Unreal Engine 4 C++ 能够创建角色Zoom摄像头(资源)
游戏摄像头可以观察到的距离越近,作用和拉远是一个比较普遍的要求,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
版权声明:本文博主原创文章,博客,未经同意不得转载。
Unreal Engine 4 C++ 能够创建角色Zoom摄像头(资源)的更多相关文章
- 剖析Unreal Engine超真实人类的渲染技术Part 1 - 概述和皮肤渲染
一.概述 1.1 数字人类的概要 数字人类(Digital Human)是利用计算机模拟真实人类的一种综合性的渲染技术.也被称为虚拟人类.超真实人类.照片级人类. 它是一种技术和艺术相结合的综合性模拟 ...
- Unreal Engine 4 RenderTarget制作Live Camera效果
Unreal Engine 4 RenderTarget制作Live Camera效果 先上效果: Live Camera我不知道怎么翻译.反正意思就是将一个摄影机的Image渲染到一个2D平面上. ...
- Unreal Engine 4 创建Destructible Mesh(可破坏网格)
Unreal Engine 4的物理引擎用的是PhysX. 支持网格破坏.布料.物理粒子等,非常强大.曾经须要编码才干完毕的工作,在Unreal Engine 4 中仅仅须要拖拖拽拽就完毕了,非常方便 ...
- 游戏音频技术备忘 (五)Wwise Unreal Engine 集成代码浅析 二
AkAmbientSound类的实现 Unreal Engine提供了一个基本对象的构造器ObjectInitializer,一般来说用户创建的类总是拥有很多变量,因此 AkAmbientSound ...
- 游戏音频技术备忘 (四) Wwise Unreal Engine 集成代码浅析 (一)
在Engine\Plugins\Wwise\Source下为主要Wwise相关代码,AkAudio文件夹下为运行时相关代码,AudiokineticTools下为编辑器工具相关代码,Audiokine ...
- 游戏音频技术备忘 (三) 集成Wwise到Unreal Engine
当前受众较广的商业游戏引擎有 Unreal Engine.Unity.cocos2d-x等,在音频领域的第三方中间件则有Wwise.FMOD.Criware等,言多且烦,我们首先集成Wwise到 Un ...
- 实例甜点 Unreal Engine 4迷你教程(4)之用C++实现添加子Widget到VerticalBox中以及ClearChildren
前置教程: 1. 实例甜点前面的三篇教程: 2. 最好看看笔者前面的一篇关于博文(后记:本来笔者想用C++做DragAndDrop的功能,但是失败了,下面是蓝图实现的方法): http://www.c ...
- 实例甜点 Unreal Engine 4迷你教程(6)之三个重要基础操作SpawnActor、TArray的Add和Remove
本小节的教程需要完成前置教程:建议阅读<实例甜点 Unreal Engine 4迷你教程(5)>,因为5里面提到了本节的工程,不过也可以在不看5的前提下直接阅读本教程. 第一步:Empty ...
- Unreal Engine 4 C++ UCLASS构造函数易出错分析
Unreal Engine 4 C UCLASS构造函数易出错分析 GENERATED_BODY GENERATED_UCLASS_BODY 在Unreal Engine 4的任意类中通常会见到两个宏 ...
随机推荐
- pdftk的使用介绍
首先像下面的一页pdf,如果想把它分成两页,每一页只是一个ppt页面(为了在kindle里读比较方便), 那么可以首先用A-pdf page cut, 将pdf 切成这样12个部分 然后我们现在要的只 ...
- 外语学习强烈推荐Rosetta Stone
外语学习强烈推荐Rosetta Stone 外语学习强烈推荐Rosetta Stone
- windows 7多点触摸开发
win7 触摸屏系统应用广泛,软件操作方便,功能强大,现以被很多硬件厂商应用. 我曾用一台装有win7 的汉王平板电脑进行了多点触摸软件的开发. 开发环境及条件: 1. 平板电脑+ win7 ...
- VSTO之旅系列(二):创建Excel解决方案
原文:VSTO之旅系列(二):创建Excel解决方案 本专题概要 引言 创建VSTO项目 Excel对象模型 创建Excel外接程序 创建Excel文档级自定义项 小结 一.引言 也许很多朋友都没有听 ...
- 解决windows下的mysql匿名登陆无法使用mysql数据库的问题
原文:解决windows下的mysql匿名登陆无法使用mysql数据库的问题 我在windows下安装了mysql,但是不用密码就能登进去,而root明明是有密码的,我用select user()命令 ...
- hdu3732(多重背包)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3732 题意:Ahui学习英语单词,每个单词都是不同的,并且都有自身的价值量 w 和难度值 c (0&l ...
- “简密”App Store处女作开发总结
前言 今天是我的iOS App Store上架应用处女作"简密"第一天上线的日子,简密是我从事iOS开发三年以来的第一款个人上架应用,之前做过两年的企业级应用开发以及公司的电商应用 ...
- 数据库采用多表连接查询,对应javaBean文件连接方式
在一个Web项目中,只要是存在数据库就一定会有JavaBean文件.一个JavaBean文件会对应一张数据库中的表,供dao中的代码来调用用来存取数据.我们都知道,在数据库设计的时候,如果A.B两张表 ...
- Jetty开发指导:Jetty Websocket API
Jetty WebSocket API使用 Jetty提供了功能更强的WebSocket API,使用一个公共的核心API供WebSockets的服务端和client使用. 他是一个基于WebSock ...
- Java数据结构系列之——栈(2):栈的链式存储结构及其操作
package Stack; import LinkList.SinglyLinkList; public class LinkListStack { private SinglyLinkList&l ...