首页 > 代码库 > Unreal Engine 4 C++ 为角色创建一个可以Zoom的摄影机(源代码)
Unreal Engine 4 C++ 为角色创建一个可以Zoom的摄影机(源代码)
游戏中观察角色的摄影机可以拉近和拉远是一个比较常见的需求,UE4中实现起来也比较简单。这篇文章以TopDown模板为例,讲解如何一步步实现可以Zoom的摄影机。
创建好TopDown模板的C++项目之后,我们会得到3个重要的类。AXXXCharacter类,实现角色的控制和行为。AXXXGameMode类,项目的默认GameMode,定义默认的角色控制器和默认Pawn。AXXXPlayerController,角色控制器类,接受输入控制,并指导角色进行行动。我们主要修改AXXXCharacter类。
说下Zoom实现的原理,UE4专门为摄影机碰撞实现了一个USpringArmComponent类,它能自动处理和摄影机相关的碰撞、缩进等等功能。为了实现Zoom,只需要适当的调节此类的TargetArmLength变量的值即可。很简单。
首先,我们定义Zoom配置参数。在XXXCharacter.h文件中加入下列结构体:
USTRUCT() struct FZoomData { GENERATED_USTRUCT_BODY() UPROPERTY(EditDefaultsOnly, Category = Config) float MinCameraLen; UPROPERTY(EditDefaultsOnly, Category = Config) float MaxCameraLen; UPROPERTY(EditDefaultsOnly, Category = Config) float ZoomStepLen; };MinCameraLen,定义摄影机最近距离;MaxCameraLen,定义摄影机最远距离;ZoomStepLen,定义每一小步,Zoom的距离。注意USRUCT()前缀,这个结构体后面在编辑器中可以自己配置。
第二步,为AXXXCharacter类添加配置参数。
UPROPERTY(EditDefaultsOnly, Category = Config) FZoomData ZoomConfig;
第三步,为AXXXCharacter添加成员ZoomIn和ZoomOut方法。这两个方法,具体实现Zoom功能。
UFUNCTION(BlueprintCallable, Category= Camera) void ZoomIn(); UFUNCTION(BlueprintCallable, Category = Camera) void ZoomOut();
第四步,为AXXXCharacter添加重载方法SetupPlayerInputComponent。此方法初始化输入绑定。
protected: virtual void SetupPlayerInputComponent(class UInputComponent* InputComponent) override;
void AsqxgameCharacter::SetupPlayerInputComponent(class UInputComponent* InputComponent) { check(InputComponent); InputComponent->BindAction("ZoomIn", IE_Pressed, this, &AsqxgameCharacter::ZoomIn); InputComponent->BindAction("ZoomOut", IE_Pressed, this, &AsqxgameCharacter::ZoomOut); }SetupPlayerInputComponent方法,绑定了两个名为ZoomIn和ZoomOut的动作,这两个动作在编辑器中设置。在菜单Edit->Project Settings->Input项目下。
我将两个动作分别绑定到了Mouse Wheel Up和Mouse Wheel Down两个按键上。
void AsqxgameCharacter::ZoomIn() { if (CameraBoom->TargetArmLength >= ZoomConfig.MinCameraLen) { CameraBoom->TargetArmLength -= ZoomConfig.ZoomStepLen; } else { CameraBoom->TargetArmLength = ZoomConfig.MinCameraLen; } } void AsqxgameCharacter::ZoomOut() { if (CameraBoom->TargetArmLength <= ZoomConfig.MaxCameraLen) { CameraBoom->TargetArmLength += ZoomConfig.ZoomStepLen; } else { CameraBoom->TargetArmLength = ZoomConfig.MaxCameraLen; } }ZoomIn和ZoomOut方法实现很简单,就不解释了。
编译代码,并在Character蓝图中设置好ZoomConfig的值,执行游戏,就能看到结果了。
项目源代码:http://git.oschina.net/cloudsource/UE4-Code
Unreal Engine 4 C++ 为角色创建一个可以Zoom的摄影机(源代码)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。