游戏摄像头可以观察到的距离越近,作用和拉远是一个比较普遍的要求,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摄像头(资源)的更多相关文章

  1. 剖析Unreal Engine超真实人类的渲染技术Part 1 - 概述和皮肤渲染

    一.概述 1.1 数字人类的概要 数字人类(Digital Human)是利用计算机模拟真实人类的一种综合性的渲染技术.也被称为虚拟人类.超真实人类.照片级人类. 它是一种技术和艺术相结合的综合性模拟 ...

  2. Unreal Engine 4 RenderTarget制作Live Camera效果

    Unreal Engine 4 RenderTarget制作Live Camera效果 先上效果: Live Camera我不知道怎么翻译.反正意思就是将一个摄影机的Image渲染到一个2D平面上. ...

  3. Unreal Engine 4 创建Destructible Mesh(可破坏网格)

    Unreal Engine 4的物理引擎用的是PhysX. 支持网格破坏.布料.物理粒子等,非常强大.曾经须要编码才干完毕的工作,在Unreal Engine 4 中仅仅须要拖拖拽拽就完毕了,非常方便 ...

  4. 游戏音频技术备忘 (五)Wwise Unreal Engine 集成代码浅析 二

    AkAmbientSound类的实现 Unreal Engine提供了一个基本对象的构造器ObjectInitializer,一般来说用户创建的类总是拥有很多变量,因此 AkAmbientSound  ...

  5. 游戏音频技术备忘 (四) Wwise Unreal Engine 集成代码浅析 (一)

    在Engine\Plugins\Wwise\Source下为主要Wwise相关代码,AkAudio文件夹下为运行时相关代码,AudiokineticTools下为编辑器工具相关代码,Audiokine ...

  6. 游戏音频技术备忘 (三) 集成Wwise到Unreal Engine

    当前受众较广的商业游戏引擎有 Unreal Engine.Unity.cocos2d-x等,在音频领域的第三方中间件则有Wwise.FMOD.Criware等,言多且烦,我们首先集成Wwise到 Un ...

  7. 实例甜点 Unreal Engine 4迷你教程(4)之用C++实现添加子Widget到VerticalBox中以及ClearChildren

    前置教程: 1. 实例甜点前面的三篇教程: 2. 最好看看笔者前面的一篇关于博文(后记:本来笔者想用C++做DragAndDrop的功能,但是失败了,下面是蓝图实现的方法): http://www.c ...

  8. 实例甜点 Unreal Engine 4迷你教程(6)之三个重要基础操作SpawnActor、TArray的Add和Remove

    本小节的教程需要完成前置教程:建议阅读<实例甜点 Unreal Engine 4迷你教程(5)>,因为5里面提到了本节的工程,不过也可以在不看5的前提下直接阅读本教程. 第一步:Empty ...

  9. Unreal Engine 4 C++ UCLASS构造函数易出错分析

    Unreal Engine 4 C UCLASS构造函数易出错分析 GENERATED_BODY GENERATED_UCLASS_BODY 在Unreal Engine 4的任意类中通常会见到两个宏 ...

随机推荐

  1. Android登陆界面实现-支持输入框清楚和震动效果功能

    演示效果 主要代码例如以下 自己定义的一个EditText.用于实现有文字的时候显示能够清楚的button: import android.content.Context; import androi ...

  2. python语言学习7——数据类型和变量

    整数 python可以处理任意大小的整数,包括负整数,在程序中的表示方法和数学上的写法一样 计算机由于使用二进制,有时候采用十六进制表示整数比较方便,十六进制数用0x前缀 浮点数 简单的小数就直接用小 ...

  3. 【VBA研究】查找目录以下全部文件的名称

    作者:iamlaosong 目录里面保存有面单扫描的图像文件,文件名称为邮件号码.如今想收集这些邮件号码,由于量非常大,不可能一个一个的截取,仅仅能通过程序实现.假定,当前工作表B列里放的是存放这些图 ...

  4. redis做RDB时请求超时case

        近期在排查redis做rdb时会有部分请求超时的case.初步推断是我们redisserver上开启了THP(Transparent Huge Pages).      1) Linux本身的 ...

  5. HDU 1061 N^N (n的n次方的最后一位)

    题目意思: http://acm.hdu.edu.cn/showproblem.php?pid=1061 求N^N的最后一位数. 题目分析: 此题有非常多种方法,主要是中循环节,看自己怎么找了.我的方 ...

  6. Android在子线程中更新UI(一)

    MainActivity如下: package cc.testui1; import android.os.Bundle; import android.os.Handler; import andr ...

  7. SocketAsyncEventArgs使用解说

    原文:SocketAsyncEventArgs使用解说 如果在.NET下写过网络通讯的同学应该感觉不陌生了,有很多刚入门的同学很多都认为这东西可以大大提高处理效能还有就是使用上很不适应.其实使用之前最 ...

  8. Linux档案种类与扩展名(2013.09.03)

    档案种类: 正规档案(regular file ):    第一个字符为 [ -],例如 [-rwxrwxrwx ].另外,依照档案的内容,又大略可以分为:     纯文本档(ASCII)     二 ...

  9. POJ3050 Hopscotch 【DFS】

    Hopscotch Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 2113   Accepted: 1514 Descrip ...

  10. Linux php/php-fpm 安装,配置

    1> 下载php源代码   #wget  http://cn2.php.net/get/php-5.4.30.tar.gz/from/this/mirror   官网5.2的版本号貌似没提供   ...