Unreal Engine 4 C++ 能够创建角色Zoom摄像头(资源)

Unreal Engine 4 C++ 能够创建角色Zoom摄像头(资源)

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

游戏摄像头可以观察到的距离越近,作用和拉远是一个比较普遍的要求,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

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/116841.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 网站优化网络推广怎么做_网站推广公司

    网站优化网络推广怎么做_网站推广公司如何优化网站,网站推广优化一般流程

  • C#之 对象数组

    C#之 对象数组对象数组就是数组里的每个元素都是类的对象,赋值时先定义对象,然后将对象直接赋给数组就行了。万物皆可对象,举个例子:一台电脑。我们就可以把电脑看成一个对象。第一种:常规的写法string[]xxx={}例如我们写一个名字集合的数组:string[]name=newstring[]{“小白”,”小黑”,”小明”};//可以简写为:tring[]nam…

  • 在AWS的EU区域地理位置上分布式MongoDB集群

    在AWS的EU区域地理位置上分布式MongoDB集群

  • blob对象介绍[通俗易懂]

    blob对象介绍[通俗易懂]一个Blob对象表示一个不可变的,原始数据的类似文件对象。Blob表示的数据不一定是一个JavaScript原生格式blob对象本质上是js中的一个对象,里面可以储存大量的二进制编码格式的数据。创建blob对象创建blob对象本质上和创建一个其他对象的方式是一样的,都是使用Blob()的构造函数来进行创建。构造函数接受两个参数:第一个参数为一个数据

    2022年10月30日
  • 全文六万字《计算智能》智能优化算法 张军【Python】

    全文六万字《计算智能》智能优化算法 张军【Python】就这?《计算智能》张军超详细讲解前言正文第1章绪论1.1最优化问题1.1.1函数优化问题1.1.2组合优化问题1.2.1计算复杂性1.2.2NP理论1.3计算智能方法1.3.1计算智能的分类与理论1.3.2计算智能的研究与发展1.3.3计算智能的特征与应用前言由于最近新参与了一个与智能优化相关的科研课题,所以需要了解一些计算智能的算法知识。经老师推荐,从网上购买了张军老师的这本《计算智能》,尽管出版年份距今已有一些年日,但因该领域多年来并未有太多新的大改变,且该书对新手相对友好,故

  • intellijidea激活码2021【2021免费激活】

    (intellijidea激活码2021)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。https://javaforall.cn/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~S…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号