当前位置: 首页 > news >正文

网站开发学习视频项目管理工具

网站开发学习视频,项目管理工具,wordpress媒体文档,四川蓉和建设公司网站C创建Pawn类玩家 创建一个GameMode蓝图用来加载我们自定义的游戏Mode新建一个Pawn的C#xff0c;MyCharacter类作为玩家#xff0c;新建一个相机组件与相机臂组件#xff0c;box组件作为根组件 // Fill out your copyright notice in the Description page of Project Set…C创建Pawn类玩家 创建一个GameMode蓝图用来加载我们自定义的游戏Mode新建一个Pawn的CMyCharacter类作为玩家新建一个相机组件与相机臂组件box组件作为根组件 // Fill out your copyright notice in the Description page of Project Settings.#pragma once#include CoreMinimal.h #include GameFramework/Pawn.h #include MyCharacter.generated.hUCLASS() class CITYTWIN_API AMyCharacter : public APawn {GENERATED_BODY()public:// Sets default values for this pawns propertiesAMyCharacter();//box作为根组件UPROPERTY(EditAnywhere, BlueprintReadOnly, Category Camera)class UBoxComponent* CollisionBox;//相机组件UPROPERTY(EditAnywhere, BlueprintReadOnly, Category Camera)class UCameraComponent* FollowCamera;//相机臂组件UPROPERTY(EditAnywhere, BlueprintReadOnly, Category Camera)class USpringArmComponent* CameraBoom;protected:// Called when the game starts or when spawnedvirtual void BeginPlay() override;public: // Called every framevirtual void Tick(float DeltaTime) override;// Called to bind functionality to inputvirtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;}; 声明创建组件硬编码一些基本属性 // Fill out your copyright notice in the Description page of Project Settings.#include MyCharacter.h #include Components/BoxComponent.h #include Camera/CameraComponent.h #include GameFramework/SpringArmComponent.h// Sets default values AMyCharacter::AMyCharacter() {// Set this pawn to call Tick() every frame. You can turn this off to improve performance if you dont need it.PrimaryActorTick.bCanEverTick true;CollisionBox CreateDefaultSubobjectUBoxComponent(TEXT(CollisionBox));CollisionBox-SetupAttachment(GetRootComponent());CameraBoom CreateDefaultSubobjectUSpringArmComponent(TEXT(CameraBoom));CameraBoom-SetupAttachment(CollisionBox);CameraBoom-TargetArmLength 1500.f;CameraBoom-bUsePawnControlRotation false;CameraBoom-bEnableCameraLag true;//摄像机臂平滑CameraBoom-bEnableCameraRotationLag true;//启用相机旋转延迟CameraBoom-bDoCollisionTest false;//关闭摄像机臂碰撞FollowCamera CreateDefaultSubobjectUCameraComponent(TEXT(FollowCamera));FollowCamera-SetupAttachment(CameraBoom);FollowCamera-bUsePawnControlRotation false; }// Called when the game starts or when spawned void AMyCharacter::BeginPlay() {Super::BeginPlay();}// Called every frame void AMyCharacter::Tick(float DeltaTime) {Super::Tick(DeltaTime);}// Called to bind functionality to input void AMyCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent) {Super::SetupPlayerInputComponent(PlayerInputComponent);}创建这个Pawn类的蓝图进行之前登录页面动画的视角旋转方向问题的解决首先将蓝图生成对齐到视角 将Pawn类自动接收玩家0 然后删除PlayerStart 运行结果 移动增强输入系统 在项目建立.cs文件中添加这个模块 绑定增强输入系统操作MyCharacter.h // Fill out your copyright notice in the Description page of Project Settings.#pragma once#include CoreMinimal.h #include GameFramework/Pawn.h #include ../../../../UE_5.2.1/UE_5.2/Engine/Plugins/EnhancedInput/Source/EnhancedInput/Public/InputActionValue.h #include MyCharacter.generated.hUCLASS() class CITYTWIN_API AMyCharacter : public APawn {GENERATED_BODY()public:// Sets default values for this pawns propertiesAMyCharacter();//box作为根组件UPROPERTY(EditAnywhere, BlueprintReadOnly, Category Camera)class UBoxComponent* CollisionBox;//相机组件UPROPERTY(EditAnywhere, BlueprintReadOnly, Category Camera)class UCameraComponent* FollowCamera;//相机臂组件UPROPERTY(EditAnywhere, BlueprintReadOnly, Category Camera)class USpringArmComponent* CameraBoom;//绑定映射UPROPERTY(EditAnywhere, BlueprintReadOnly, Category Input)class UInputMappingContext* MappingContext;//移动绑定UPROPERTY(EditAnywhere, BlueprintReadOnly, Category Input)class UInputAction* LeftButtonAction;protected:// Called when the game starts or when spawnedvirtual void BeginPlay() override;//鼠标按下操作事件void LeftMouseDown(const FInputActionValue value);void LeftMouseUp(const FInputActionValue value);public: // Called every framevirtual void Tick(float DeltaTime) override;// Called to bind functionality to inputvirtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;}; MyCharacter.cpp // Fill out your copyright notice in the Description page of Project Settings. #include MyCharacter.h #include Components/BoxComponent.h #include Camera/CameraComponent.h #include GameFramework/SpringArmComponent.h #include EnhancedInputSubsystems.h #include EnhancedInputComponent.h// Sets default values AMyCharacter::AMyCharacter() {// Set this pawn to call Tick() every frame. You can turn this off to improve performance if you dont need it.PrimaryActorTick.bCanEverTick true;CollisionBox CreateDefaultSubobjectUBoxComponent(TEXT(CollisionBox));CollisionBox-SetupAttachment(GetRootComponent());CameraBoom CreateDefaultSubobjectUSpringArmComponent(TEXT(CameraBoom));CameraBoom-SetupAttachment(CollisionBox);CameraBoom-TargetArmLength 1500.f;CameraBoom-bUsePawnControlRotation false;CameraBoom-bEnableCameraLag true;//摄像机臂平滑CameraBoom-bEnableCameraRotationLag true;//启用相机旋转延迟CameraBoom-bDoCollisionTest false;//关闭摄像机臂碰撞FollowCamera CreateDefaultSubobjectUCameraComponent(TEXT(FollowCamera));FollowCamera-SetupAttachment(CameraBoom);FollowCamera-bUsePawnControlRotation false; } // Called when the game starts or when spawned void AMyCharacter::BeginPlay() {Super::BeginPlay();APlayerController* PlayerController CastAPlayerController(Controller);if (PlayerController){UEnhancedInputLocalPlayerSubsystem* Subsystem ULocalPlayer::GetSubsystemUEnhancedInputLocalPlayerSubsystem(PlayerController-GetLocalPlayer());if (Subsystem){Subsystem-AddMappingContext(MappingContext, 0);}} } void AMyCharacter::LeftMouseDown(const FInputActionValue value) { }void AMyCharacter::LeftMouseUp(const FInputActionValue value) { } // Called every frame void AMyCharacter::Tick(float DeltaTime) {Super::Tick(DeltaTime);} // Called to bind functionality to input void AMyCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent) {Super::SetupPlayerInputComponent(PlayerInputComponent);UEnhancedInputComponent* EnhancedInputConponent CastUEnhancedInputComponent(PlayerInputComponent);if (EnhancedInputConponent){EnhancedInputConponent-BindAction(LeftButtonAction, ETriggerEvent::Started, this, AMyCharacter::LeftMouseDown);EnhancedInputConponent-BindAction(LeftButtonAction, ETriggerEvent::Completed, this, AMyCharacter::LeftMouseUp);} }获取鼠标位置坐标与鼠标移动后的差量 使用GetMousePosition函数来获取鼠标的坐标点在MyCharacter.h中新建一个函数专门用来获取鼠标的坐标点的函数 //鼠标的坐标点FVector2D MousePos FVector2D::ZeroVector;void GetMousePosition();在MyCharacter.cpp中实现此方法 void AMyCharacter::GetMousePosition() {GetWorld()-GetFirstPlayerController()-GetMousePosition(MousePos.X, MousePos.Y);//打印鼠标信息到屏幕GEngine-AddOnScreenDebugMessage(-1, 1, FColor::Red, FString::Printf(TEXT(%f,%f), MousePos.X, MousePos.Y)); } 获取鼠标变化差量当我们鼠标变化时我们要获取到这个变化的差量值我们可以定义两个变量一个变量存储用来作为变化之前的绝对位置减去变化之后的当前绝对位置然后另外两个变量来存储变化之后当前的绝对位置 //鼠标的坐标点FVector2D MousePos FVector2D::ZeroVector;//记录的鼠标变化差量FVector2D MouseVariationDifference FVector2D::ZeroVector;//记录变化之后的鼠标坐标float MouseX 0.f;float MouseY 0.f;void AMyCharacter::GetMousePosition() {//获取当前鼠标移动坐标GetWorld()-GetFirstPlayerController()-GetMousePosition(MousePos.X, MousePos.Y);//记录的鼠标变化差量MouseVariationDifference MousePos - FVector2D(MouseX, MouseY);//记录变化后的鼠标位置MouseX MousePos.X;MouseY MousePos.Y;//打印鼠标信息到屏幕GEngine-AddOnScreenDebugMessage(1, 1, FColor::Red, FString::Printf(TEXT(%f,%f), MousePos.X, MousePos.Y));GEngine-AddOnScreenDebugMessage(2, 1, FColor::Yellow, FString::Printf(TEXT(%f,%f), MouseVariationDifference.X, MouseVariationDifference.Y)); }设置滑动鼠标实现旋转视角效果 通过获取的移动的鼠标差量进行鼠标滑动移动视角新建一个鼠标视角移动速度变量用来控制鼠标实现视角旋转的移动速度 //鼠标视角移动速度float MouseSpeed 0.1f;新建一个鼠标视角移动函数函数逻辑ActorRotator.Pitch (MouseVariationDifference.Y * MouseSpeedPitch是虚幻中的抬头与低头在直角坐标系中用来Y来描述ActorRotator.Yaw (MouseVariationDifference.X * MouseSpeed * -1.f)Yaw是摇头转向在直角坐标系中用来X来描述实践中得乘以-1使用估计是因为虚幻默认以右方向为正方向的原因 //鼠标移动视角移动事件void MouseMove();void AMyCharacter::MouseMove() {FRotator ActorRotator GetActorRotation();FRotator NewActorRotator FRotator(ActorRotator.Pitch (MouseVariationDifference.Y * MouseSpeed),ActorRotator.Yaw (MouseVariationDifference.X * MouseSpeed * -1.f), ActorRotator.Roll);SetActorRotation(NewActorRotator); }调用函数 // Called every frame void AMyCharacter::Tick(float DeltaTime) {Super::Tick(DeltaTime);//获取鼠标坐标GetMousePosition();//鼠标移动视角MouseMove();}运行结果 鼠标左键视觉拖动效果 将滑动鼠标实现旋转视角效果设置为鼠标左键按下后才能实现添加一个布尔变量用来标识是否要开启鼠标旋转视角事情 //标识鼠标左键是否按下bool bIsMouseLeftDown false;void AMyCharacter::MouseMove() {if (bIsMouseLeftDown){FRotator ActorRotator GetActorRotation();//限制一下视角度数带来的错误FRotator NewActorRotator FRotator(FMath::Clamp((ActorRotator.Pitch (MouseVariationDifference.Y * MouseSpeed)),-80.f,-10.f),ActorRotator.Yaw (MouseVariationDifference.X * MouseSpeed * -1.f), ActorRotator.Roll);SetActorRotation(NewActorRotator);} }void AMyCharacter::LeftMouseDown(const FInputActionValue value) {bIsMouseLeftDown true; }void AMyCharacter::LeftMouseUp(const FInputActionValue value) {bIsMouseLeftDown false; }鼠标右键视角移动效果 添加右键的输入操作 新建右键是否按下的标识布尔变量创建右键操作的输入行为即绑定函数 //移动绑定UPROPERTY(EditAnywhere, BlueprintReadOnly, Category Input)class UInputAction* RightButtonAction;//标识鼠标右键是否按下bool bIsMouseRightDown false;// Called to bind functionality to input void AMyCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent) {Super::SetupPlayerInputComponent(PlayerInputComponent);UEnhancedInputComponent* EnhancedInputConponent CastUEnhancedInputComponent(PlayerInputComponent);if (EnhancedInputConponent){EnhancedInputConponent-BindAction(LeftButtonAction, ETriggerEvent::Started, this, AMyCharacter::LeftMouseDown);EnhancedInputConponent-BindAction(LeftButtonAction, ETriggerEvent::Completed, this, AMyCharacter::LeftMouseUp);EnhancedInputConponent-BindAction(RightButtonAction, ETriggerEvent::Started, this, AMyCharacter::RightMouseDown);EnhancedInputConponent-BindAction(RightButtonAction, ETriggerEvent::Completed, this, AMyCharacter::RightMouseUp);} }void AMyCharacter::RightMouseDown(const FInputActionValue value) {bIsMouseRightDown true; }void AMyCharacter::RightMouseUp(const FInputActionValue value) {bIsMouseRightDown false; } 新建鼠标右键移动速度变量编写鼠标右键移动逻辑 //鼠标右键移动速度float MouseRightSpeed 100.f;void AMyCharacter::MouseMove() {if (bIsMouseLeftDown){FRotator ActorRotator GetActorRotation();//限制一下视角度数带来的错误FRotator NewActorRotator FRotator(FMath::Clamp((ActorRotator.Pitch (MouseVariationDifference.Y * MouseSpeed)),-80.f,-10.f),ActorRotator.Yaw (MouseVariationDifference.X * MouseSpeed * -1.f), ActorRotator.Roll);SetActorRotation(NewActorRotator);}if (bIsMouseRightDown){FVector SpeedMove FVector(MouseVariationDifference.Y * MouseRightSpeed,-1.0 * MouseRightSpeed * MouseVariationDifference.X, 0);AddActorLocalOffset(SpeedMove);//限制z轴FVector Location GetActorLocation();FVector NewLocation FVector(Location.X, Location.Y, 4520);SetActorLocation(NewLocation);} }鼠标中键控制摄像机臂长度缩放地图效果 新建鼠标中键的操作行为添加一个鼠标中键移动速度变量然后在鼠标中键操作事件中完成逻辑逻辑是获取相机臂的长度用获取鼠标滚轮的量值乘以鼠标中键移动速度变量被获取的相机臂原长度减去 //移动绑定UPROPERTY(EditAnywhere, BlueprintReadOnly, Category Input)class UInputAction* MiddleButtonAction;//鼠标中键移动速度float MouseMiddleSpeed 1000.f;void AMyCharacter::MiddleMouseSlide(const FInputActionValue value) {float Axis value.Getfloat();float CameraArm CameraBoom-TargetArmLength;//限制相机臂长度CameraBoom-TargetArmLength FMath::Clamp((CameraArm - Axis * MouseMiddleSpeed), 1000.f, 30000.f); }运行结果 源码 MyCharacter.h // Fill out your copyright notice in the Description page of Project Settings.#pragma once#include CoreMinimal.h #include GameFramework/Pawn.h #include ../../../../UE_5.2.1/UE_5.2/Engine/Plugins/EnhancedInput/Source/EnhancedInput/Public/InputActionValue.h #include MyCharacter.generated.hUCLASS() class CITYTWIN_API AMyCharacter : public APawn {GENERATED_BODY()public:// Sets default values for this pawns propertiesAMyCharacter();//box作为根组件UPROPERTY(EditAnywhere, BlueprintReadOnly, Category Camera)class UBoxComponent* CollisionBox;//相机组件UPROPERTY(EditAnywhere, BlueprintReadOnly, Category Camera)class UCameraComponent* FollowCamera;//相机臂组件UPROPERTY(EditAnywhere, BlueprintReadOnly, Category Camera)class USpringArmComponent* CameraBoom;//绑定映射UPROPERTY(EditAnywhere, BlueprintReadOnly, Category Input)class UInputMappingContext* MappingContext;//移动绑定UPROPERTY(EditAnywhere, BlueprintReadOnly, Category Input)class UInputAction* LeftButtonAction;//移动绑定UPROPERTY(EditAnywhere, BlueprintReadOnly, Category Input)class UInputAction* RightButtonAction;//移动绑定UPROPERTY(EditAnywhere, BlueprintReadOnly, Category Input)class UInputAction* MiddleButtonAction;//鼠标的坐标点FVector2D MousePos FVector2D::ZeroVector;//记录的鼠标变化差量FVector2D MouseVariationDifference FVector2D::ZeroVector;//记录变化之后的鼠标坐标float MouseX 0.f;float MouseY 0.f;//鼠标视角移动速度float MouseSpeed 0.1f;//鼠标右键移动速度float MouseRightSpeed 100.f;//鼠标中键移动速度float MouseMiddleSpeed 1000.f;//标识鼠标左键是否按下bool bIsMouseLeftDown false;//标识鼠标右键是否按下bool bIsMouseRightDown false;protected:// Called when the game starts or when spawnedvirtual void BeginPlay() override;//鼠标按下操作事件void LeftMouseDown(const FInputActionValue value);void LeftMouseUp(const FInputActionValue value);void RightMouseDown(const FInputActionValue value);void RightMouseUp(const FInputActionValue value);void MiddleMouseSlide(const FInputActionValue value);//鼠标移动视角移动事件void MouseMove();public: // Called every framevirtual void Tick(float DeltaTime) override;// Called to bind functionality to inputvirtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;void GetMousePosition(); }; MyCharacter.cpp // Fill out your copyright notice in the Description page of Project Settings.#include MyCharacter.h #include Components/BoxComponent.h #include Camera/CameraComponent.h #include GameFramework/SpringArmComponent.h #include EnhancedInputSubsystems.h #include EnhancedInputComponent.h #include Engine/Engine.h// Sets default values AMyCharacter::AMyCharacter() {// Set this pawn to call Tick() every frame. You can turn this off to improve performance if you dont need it.PrimaryActorTick.bCanEverTick true;CollisionBox CreateDefaultSubobjectUBoxComponent(TEXT(CollisionBox));CollisionBox-SetupAttachment(GetRootComponent());CameraBoom CreateDefaultSubobjectUSpringArmComponent(TEXT(CameraBoom));CameraBoom-SetupAttachment(CollisionBox);CameraBoom-TargetArmLength 1500.f;CameraBoom-bUsePawnControlRotation false;CameraBoom-bEnableCameraLag true;//摄像机臂平滑CameraBoom-bEnableCameraRotationLag true;//启用相机旋转延迟CameraBoom-bDoCollisionTest false;//关闭摄像机臂碰撞FollowCamera CreateDefaultSubobjectUCameraComponent(TEXT(FollowCamera));FollowCamera-SetupAttachment(CameraBoom);FollowCamera-bUsePawnControlRotation false; }// Called when the game starts or when spawned void AMyCharacter::BeginPlay() {Super::BeginPlay();APlayerController* PlayerController CastAPlayerController(Controller);if (PlayerController){UEnhancedInputLocalPlayerSubsystem* Subsystem ULocalPlayer::GetSubsystemUEnhancedInputLocalPlayerSubsystem(PlayerController-GetLocalPlayer());if (Subsystem){Subsystem-AddMappingContext(MappingContext, 0);}} }void AMyCharacter::LeftMouseDown(const FInputActionValue value) {bIsMouseLeftDown true; }void AMyCharacter::LeftMouseUp(const FInputActionValue value) {bIsMouseLeftDown false; }void AMyCharacter::RightMouseDown(const FInputActionValue value) {bIsMouseRightDown true; }void AMyCharacter::RightMouseUp(const FInputActionValue value) {bIsMouseRightDown false; }void AMyCharacter::MiddleMouseSlide(const FInputActionValue value) {float Axis value.Getfloat();float CameraArm CameraBoom-TargetArmLength;//限制相机臂长度CameraBoom-TargetArmLength FMath::Clamp((CameraArm - Axis * MouseMiddleSpeed), 1000.f, 30000.f); }void AMyCharacter::MouseMove() {if (bIsMouseLeftDown){FRotator ActorRotator GetActorRotation();//限制一下视角度数带来的错误FRotator NewActorRotator FRotator(FMath::Clamp((ActorRotator.Pitch (MouseVariationDifference.Y * MouseSpeed)),-80.f,-10.f),ActorRotator.Yaw (MouseVariationDifference.X * MouseSpeed * -1.f), ActorRotator.Roll);SetActorRotation(NewActorRotator);}if (bIsMouseRightDown){FVector SpeedMove FVector(MouseVariationDifference.Y * MouseRightSpeed,-1.0 * MouseRightSpeed * MouseVariationDifference.X, 0);AddActorLocalOffset(SpeedMove);//限制z轴FVector Location GetActorLocation();FVector NewLocation FVector(Location.X, Location.Y, 4520);SetActorLocation(NewLocation);} }// Called every frame void AMyCharacter::Tick(float DeltaTime) {Super::Tick(DeltaTime);//获取鼠标坐标GetMousePosition();//鼠标移动视角MouseMove();}// Called to bind functionality to input void AMyCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent) {Super::SetupPlayerInputComponent(PlayerInputComponent);UEnhancedInputComponent* EnhancedInputConponent CastUEnhancedInputComponent(PlayerInputComponent);if (EnhancedInputConponent){EnhancedInputConponent-BindAction(LeftButtonAction, ETriggerEvent::Started, this, AMyCharacter::LeftMouseDown);EnhancedInputConponent-BindAction(LeftButtonAction, ETriggerEvent::Completed, this, AMyCharacter::LeftMouseUp);EnhancedInputConponent-BindAction(RightButtonAction, ETriggerEvent::Started, this, AMyCharacter::RightMouseDown);EnhancedInputConponent-BindAction(RightButtonAction, ETriggerEvent::Completed, this, AMyCharacter::RightMouseUp);EnhancedInputConponent-BindAction(MiddleButtonAction, ETriggerEvent::Triggered, this, AMyCharacter::MiddleMouseSlide);} }void AMyCharacter::GetMousePosition() {//获取当前鼠标移动坐标GetWorld()-GetFirstPlayerController()-GetMousePosition(MousePos.X, MousePos.Y);//记录的鼠标变化差量MouseVariationDifference MousePos - FVector2D(MouseX, MouseY);//记录变化后的鼠标位置MouseX MousePos.X;MouseY MousePos.Y;//打印鼠标信息到屏幕/*GEngine-AddOnScreenDebugMessage(1, 1, FColor::Red, FString::Printf(TEXT(%f,%f), MousePos.X, MousePos.Y));GEngine-AddOnScreenDebugMessage(2, 1, FColor::Yellow, FString::Printf(TEXT(%f,%f), MouseVariationDifference.X, MouseVariationDifference.Y));*/ }
http://www.hkea.cn/news/14397743/

相关文章:

  • 外贸网站推广策划本溪网站设计
  • 重庆网站设计更新手机排行榜最新
  • 无锡市政务服务网站建设项目wordpress 免邮箱
  • 广州平台网站搭建中山做网站联系电话
  • 网站营销软件dede电影网站模板下载
  • 怎么创建网页的快捷方式医疗类网站还有做seo
  • c 网站开发的书籍ps如何做网站首页
  • 做调查问卷用的网站或软件小程序登录网址
  • 聚宝汇 网站建设网站防注入怎么办
  • 企业网站设计的基本内容包括哪些购买虚拟机建网站
  • 盘锦公司做网站温州人才网站开发
  • 网站建设 枫子科技建站教程的实现方式
  • 南通专业网站排名推广wordpress注册链接无效
  • 导购类网站怎么做网站设计配色
  • 虚拟主机网站模板wordpress svg logo
  • 网站开发主要工作内容html登录界面设计
  • 宁波营销网站建设圣亚科技网站案例
  • 云南省中国建设工程造价管理协会网站北京建设主管部门网站
  • 怎么做网站空间稳定的手机网站设计
  • 家用电器销售的网站开发宣传片拍摄要求
  • 小白学做网站买什么书网站美工和平面设计
  • 北京住房建设部官方网站西宁城西区建设局网站
  • 网站模块功能东莞横沥网站制作
  • 做普通网站公司吗如果给公司网站做网络广告
  • 有没有做装修的大型网站而不是平台网站建设桔子科技
  • 北京建站公司哪个好wordpress 后台好卡
  • 纪检监察网站建设的意义婚纱摄影网站模板之家
  • 网站更新方法做推广适合哪些网站吗
  • 新建南昌网站建设公司wordpress发号系统
  • 建网站图片怎么找金隅嘉华大厦网站建设公司