Unreal Engine 4 C++ 能够创建角色Zoom摄像头(资源)
2015-10-02 10:08
639 查看
游戏摄像头可以观察到的距离越近,作用和拉远是一个比较普遍的要求,UE4它也实现比较简单。
在这篇文章中TopDown模板案例,解释如何,分步实施能Zoom摄像头。
创建TopDown模板C++项目达产后,我们去叫3一类重要。AXXXCharacter类,实现角色的控制和行为。
AXXXGameMode类,项目的默认GameMode。定义默认的角色控制器和默认Pawn。AXXXPlayerController,角色控制器类。接受输入控制,并指导角色进行行动。
我们主要改动AXXXCharacter类。
说下Zoom实现的原理。UE4专门为摄影机碰撞实现了一个USpringArmComponent类,它能自己主动处理和摄影机相关的碰撞、缩进等等功能。为了实现Zoom,仅仅须要适当的调节此类的TargetArmLength变量的值就可以。非常easy。
首先,我们定义Zoom配置參数。
在XXXCharacter.h文件里增加下列结构体:
第二步。为AXXXCharacter类加入配置參数。
第三步。为AXXXCharacter加入成员ZoomIn和ZoomOut方法。这两个方法,详细实现Zoom功能。
第四步,为AXXXCharacter加入重载方法SetupPlayerInputComponent。此方法初始化输入绑定。
以下是各个方法的详细实现:
在菜单Edit->Project Settings->Input项目下。
我将两个动作分别绑定到了Mouse Wheel Up和Mouse Wheel Down两个按键上。
编译代码,并在Character蓝图中设置好ZoomConfig的值。运行游戏,就能看到结果了。
项目源码:http://git.oschina.net/cloudsource/UE4-Code/tree/master/sqxgame
在这篇文章中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
相关文章推荐
- 程序设计基石与实践之C语言内存地址基础
- C语言循环数组做FIFO队列
- C++常见面试题30道
- java第一次上机实验和C++之间的比对
- c++ map的基本用法
- 【C/C++学院】0816-引用包装器/仿函数/转义字符 R”()”/using别名/模板元编程 比递归优化/智能指针/多线程/静态断言以及调试技能的要求 assert
- 带你玩转Visual Studio——带你高效开发
- C/C++ | 变量的内存分配
- 2015-09-14-C++基础
- c/c++内存对齐详解
- c++ 学习 one
- C++在IO方面效率低下的鬼话别信了 cin.tie与sync_with_stdio加速输入输出
- c++11智能指针
- #LeetCode# #C++# Binary Tree Inorder Traversal
- OpenCV 使用C++获取摄像头数据并保存示例
- C++中cin、cin.get()、cin.getline()、getline()、gets()等函数的用法
- 《C++primer(第五版)》学习之路-第十四章:重载运算与类型转换
- c++课程感想4
- #LeetCode# #C++# Binary Tree Preorder Traversal
- C++学习书籍