博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Unreal Engine 4 C++ 能够创建角色Zoom摄像头(资源)
阅读量:6696 次
发布时间:2019-06-25

本文共 2292 字,大约阅读时间需要 7 分钟。

游戏摄像头可以观察到的距离越近,作用和拉远是一个比较普遍的要求,UE4它也实现比较简单。

在这篇文章中TopDown模板案例,解释如何,分步实施能Zoom摄像头。

创建TopDown模板C++项目达产后,我们去叫3一类重要。AXXXCharacter类,实现角色的控制和行为。

AXXXGameMode类,项目的默认GameMode。定义默认的角色控制器和默认Pawn。AXXXPlayerController,角色控制器类。接受输入控制,并指导角色进行行动。

我们主要改动AXXXCharacter类。

说下Zoom实现的原理。UE4专门为摄影机碰撞实现了一个USpringArmComponent类,它能自己主动处理和摄影机相关的碰撞、缩进等等功能。为了实现Zoom,仅仅须要适当的调节此类的TargetArmLength变量的值就可以。非常easy。

首先,我们定义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方法实现非常easy。就不解释了。

编译代码,并在Character蓝图中设置好ZoomConfig的值。运行游戏,就能看到结果了。

项目源码:http://git.oschina.net/cloudsource/UE4-Code/tree/master/sqxgame

版权声明:本文博主原创文章,博客,未经同意不得转载。

你可能感兴趣的文章
(原创)优酷androidclient 下载中 bug 解决
查看>>
Web 前端攻防(2014版)-baidu ux前端研发部
查看>>
[歪谈]拽一个贵人出来给你"当炮架子"
查看>>
用TextPaint来绘制文字
查看>>
iOS开发-Get请求,Post请求,同步请求和异步请求
查看>>
关于 ioctl 的 FIONREAD 參数
查看>>
[翻译] IQAudioRecorderController
查看>>
Linux命令-目录处理命令:mkdir
查看>>
js两个小技巧【看到了就记录一下】
查看>>
[React] React Fundamentals: Accessing Child Properties
查看>>
C#发送电子邮件 (异步) z
查看>>
SQL Server CLR全功略之一---CLR介绍和配置
查看>>
struts2.1.6教程二、struts.xml配置及例程
查看>>
memcached client --ref
查看>>
Oracle PL/SQL之LOOP循环控制语句
查看>>
Codeforces Round #301 (Div. 2) C. Ice Cave BFS
查看>>
logcat使用
查看>>
ajax请求模拟登录
查看>>
Python Tools for Machine Learning
查看>>
关于C++ const 的全面总结
查看>>