如果你是 虚幻引擎4 (UE4)Unreal Engine 4的新手,你可需要先阅读我们的编程快速入门教程。对于本教程,我们假设你熟悉以下操作:创建项目,向项目添加C++代码,编译代码,以及在UE4中向 Actor 添加 组件(Components)
|
英文官方文档
中文官方文档
1.1我们将从创建一个新的基本代码项目开始,名为"HowTo_AutoCamera",其中包含初学者内容.我们需要做的第一件事是在我们的场景中创建两个摄像机。由于设置摄像机有多种方法,在这里我们将使用最常见的两种方法。对于我们的第一个摄像机,找到 放置Actor(Place Actors) 面板并选中 所有类(All Classes) 选项卡,你将找到一个 摄像机(Camera) Actor。将其拖拽到 关卡编辑器(Level Editor) 中,并将其放置在合适的位置,以便它能清楚地看到我们的场景。 完成此操作后,只要我们选择了新的 摄像机Actor(Camera Actor),关卡编辑器(Level Editor) 窗口就会有一个画中画视图,显示该 摄像机Actor(Camera Actor) 可以看到的内容。
|
1.2对于我们的第二个摄像机,我们将使用一种更深入的方法,让我们可以进行更多的控制。首先,单击 放置Actor(Place Actor) 面板的 基本(Basic) 选项卡,将一个 立方体(Cube) 拖放到 关卡编辑器(Level Editor) 窗口中。
|
在这一步骤中,我们几乎可以使用任何Actor类。用我们在快速入门教程中创建的MyActor类来替代立方体(Cube)可能会很有趣。
|
1.3放置我们的 立方体(Cube) Actor后,单击 详细信息(Details) 面板中的 +添加组件(+ Add Component) 按钮,来为 立方体(Cube) 添加 摄像机组件(CameraComponent)。你现在可以设置该 摄像机组件(CameraComponent) 的位置和旋转,让我们看到一个不同于我们之前放置的 摄像机Actor(CameraActor) 的场景视图。
|
设置摄像机组件CameraComponent 的位置是(0,80,130),避免摄像机组件和正方体重合。
|
1.4我们应该打开 约束高宽比(Constrain Aspect Ratio) 来自定义我们的 摄像机组件(CameraComponent),以便它与我们的 摄像机Actor(CameraActor) 上的设置匹配。这会使摄像机视图之间的转换更流畅,但这不是必需的。
|
我们最关键的还是C++,一些其余的设置可以在使用的时候再使用浏览器是更好的。设置好我们的场景后,我们现在可以开始创建控制摄像机视图的类。
|
2.1我们现在可以创建一个C++类来控制摄像机视图了。在本教程中,我们可以扩展 Actor 为新类,我们将其称之为CameraDirector。
|
如果你忘记如何创建C++类,你可以看上一篇或者百度。
|
2.2在CameraDirector.h中,我们将以下代码添加到ACameraDirector类定义的底部位置:
|
UPROPERTY(EditAnywhere)
AActor* CameraOne;UPROPERTY(EditAnywhere)
AActor* CameraTwo;float TimeToNextCameraChange;
UPROPERTY 宏使得变量对 虚幻引擎(Unreal Engine) 可见。这样,当我们启动游戏或在将来的工作会话中重新载入关卡或项目时,这些变量中设置的值将不会被重置。我们还添加了 EditAnywhere 关键字,这允许我们在 虚幻编辑器(Unreal Editor) 中设置摄像机1(CameraOne)和摄像机2(CameraTwo)。
|
如果你有兴趣,可以对比上一节的代码。在学习的过程中,你必然会遇到你现在不会的事情,如果你不会的话,就说明你不会。但是你要是弄会了,那么就是说明你会了。将学习中遇到不会的事情弄坏你便是学到了东西,虽然有些东西你现在不一定能弄坏,但是你走着走着会再次遇到它的。
|
2.3在CameraDirector.cpp中,将以下代码行添加到文件的顶部位置,位于其它#include行的正下方:[当然你也可以放在正上方]
|
#include "Kismet/GameplayStatics.h"
GameplayStatics头文件允许我们访问一些有用的通用函数,在本教程中我们需要使用其中一个函数。完成后,将以下代码添加到 ACameraDirector::Tick 的底部位置:
|
const float TimeBetweenCameraChanges = 2.0f;
const float SmoothBlendTime = 0.75f;
TimeToNextCameraChange -= DeltaTime;
if (TimeToNextCameraChange <= 0.0f)
{TimeToNextCameraChange += TimeBetweenCameraChanges;// 查找处理本地玩家控制的actor。APlayerController* OurPlayerController = UGameplayStatics::GetPlayerController(this, 0);if (OurPlayerController){if ((OurPlayerController->GetViewTarget() != CameraOne) && (CameraOne != nullptr)){// 立即切换到摄像机1。OurPlayerController->SetViewTarget(CameraOne);}else if ((OurPlayerController->GetViewTarget() != CameraTwo) && (CameraTwo != nullptr)){// 平滑地混合到摄像机2。OurPlayerController->SetViewTargetWithBlend(CameraTwo, SmoothBlendTime);}}
}
此代码将可以让我们每隔3秒在两个不同的摄像机间切换默认玩家的视图。
|
2.4现在我们的代码可进行编译,我们可以返回到 虚幻编辑器(Unreal Editor) 并按下 编译(Compile) 按钮。无需其它代码。我们现在可以在场景中设置CameraDirector了。
|
第三步:在场景中放置Camera Director
|
3.1在代码编译完成后,我们可以将 内容浏览器(Content Browser) 中的新类的实例拖曳到 关卡编辑器(Level Editor) 中。
|
3.2接下来,我们需要设置摄像机1(CameraOne)和摄像机2(CameraTwo)变量。在 World Outliner (世界大纲视图) 中找到CameraDirector,并在 详细信息面板(Details Panel) 中进行编辑。
|
单击标记为"无(None)"的下拉框,然后将变量设置为 Cube(立方体) 和我们之前创建的 摄像机Actor (CameraActor)。
|
3.3如果我们按下播放(Play),我们将会看到与一个视图对齐的摄像机:然后平滑混合到另一个视图:
|
你甚至可以改变两个参数的值,反向,甚至第一个Camera和第二个Camera都是同一个摄像机也是可以的。我们现在的这个系统会完全基于游戏逻辑来移动玩家的摄像机。如果玩家在游戏中无法直接控制摄像机,或者混合摄像机视图十分有用时,我们可以修改代码以在这些游戏中使用。总之就是十分Coooooooooooooooooool!
|
UE4学习笔记[2]Game-Controlled Cameras/游戏控制的摄像机相关推荐
- UE4学习笔记1st:编程快速入门
UE4学习笔记1st:编程快速入门 今天我开始学习虚幻4游戏引擎,为了此我专门买了新的电脑,我将主要配置写在这里,有想学习的同学可以参考 显卡:丽台K620 CPU:E3-1230-V3 主板:b85 ...
- 【Python学习笔记】猜颜色小游戏
[Python学习笔记]猜颜色小游戏 前言 一.算法原理 1. 生成器部分 2. 检测器部分 二.代码 过程BUG汇总笔记 总结 前言 最近馋世界游戏大全51,心血来潮用Python写了个猜颜色,顺便 ...
- UE4学习笔记#三、蓝图混合空间
UE4学习笔记(谌嘉诚大佬的PUBG教程) 三.蓝图混合空间 1. 设置初始角色(关卡开始时pawn获得的角色) 2. 角色移动蓝图 3. 镜头方向蓝图 4. 利用TimeLine平滑切换行走跑步 5 ...
- JAVA学习笔记(四)城堡游戏
城堡游戏 我们在尝试了之前的简单媒体库构造之后,试着整合一下之前学到的关于类,继承,多态等知识,制作一个简单的城堡游戏,城堡游戏是一个简单的文字游戏,通过输入命令可以在地图上不同的房间进行移动. 目录 ...
- GAMES101课程学习笔记—Lec 19: Cameras, Lenses and Light Fields 相机、透镜、光场
GAMES101课程学习笔记-Lec 19: Cameras, Lenses and Light Fields 相机.透镜.光场 1 关于成像 2 相机 2.1 小孔成像 2.2 快门与传感器 2.3 ...
- 【UE4笔记】C++游戏控制的摄像机
目录 自主操作题目 逻辑 代码 本文尝试编写了官方文档游戏控制的摄像机中的自主操作题目2 自主操作题目 使用一个数组变量来存储摄像机,而不是摄像机1(CameraOne)和摄像机2(CameraTwo ...
- Mysql学习笔记(三)运算符和控制流函数
原文:Mysql学习笔记(三)运算符和控制流函数 本章学习内容: 1.操作符 2.控制流程函数 操作符: i.圆括号.. 简单的介绍一下圆括号,圆括号的使用的目的是规定计算表达式的顺序...这个想必大 ...
- STM32F407学习笔记——MG90S舵机模块(基本控制)
STM32F407学习笔记--MG90S舵机模块(基本控制) 一.基本原理: 通过改变PWM占空比来实现舵机进行不同角度转动,下面给出旋转角度与脉冲时间及对应占空比的关系(时基脉冲=20ms). 旋转 ...
- Polyworks脚本开发学习笔记(十)-互动式开发及出错控制
Polyworks脚本开发学习笔记(十)-互动式开发及出错控制 第八章组合的各种命令,完成了一个对所选的测点名称进行命名的任务.但是,由于任务中没有交互环节,只能机械地将 曲面点 - 包边点改为Flu ...
最新文章
- 如何使用Node.js获取当前脚本的路径?
- fox pro删除单条数据_删库之后不要着急跑路,教你神不知鬼不觉找回数据
- python 查看字符编码,[Python]判断系统编码和字符编码chardet
- TweetBot TabBar
- UE研究方法—ethnography(人种志)
- 算法入门经典第六章 例题6-8 树
- linux cron计划任务
- qt 5编程入门(第2版)_《C++并发编程实战第2版》第六章:设计基于锁的并发数据结构(1/3)...
- [Swift]LeetCode17. 电话号码的字母组合 | Letter Combinations of a Phone Number
- 可视对讲网络协议转换器怎么使用,协议转换器使用方法详细介绍
- tushare pro 版本获取股票历史数据
- ASP.NET Web API实现简单的文件下载与上传
- SAP License:SAP常见问题与解决办法(汇总帖)
- unity EZ Replay Manager 1.53
- 朴素贝叶斯法 - 垃圾邮件分类
- 召集令 | 2021奖金加码的“硬核”港科百万创赛又来了!
- Python 之圆周率 π 的计算
- 给未来的你-李开复在2011级大学新生学习规划讲座上的演讲
- MongoDB--- 客户端操作 与 复制集
- Adobe Audio 分轨录音教程(需要KX,Live机架)
热门文章
- 手把手教你安装 Win+Ubuntu 双系统(图文教程)
- 音视频:06.linux系统-IPC进程间通信
- NHK Easy News 翻译 12月26日-1
- PHP--地球坐标系转为火星坐标系再转为高德坐标系
- 利用笔记本的无线网卡制做WIFI热点
- 电工学计算机专业考试吗,2017年对口电子电工类考生可报考哪些单招专业?
- 为什么设置不了这是一台家用计算机,图文演示win10专业版更改不了这是一台家庭计算机的详尽处理步骤...
- 实战Windows Azure:微软云计算平台技术详解
- Discuz模板的安装方法
- Button上面添加一个图片