第一步:在场景中放置摄像机
如果你是 虚幻引擎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++,一些其余的设置可以在使用的时候再使用浏览器是更好的。设置好我们的场景后,我们现在可以开始创建控制摄像机视图的类。
第二步:在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/游戏控制的摄像机相关推荐

  1. UE4学习笔记1st:编程快速入门

    UE4学习笔记1st:编程快速入门 今天我开始学习虚幻4游戏引擎,为了此我专门买了新的电脑,我将主要配置写在这里,有想学习的同学可以参考 显卡:丽台K620 CPU:E3-1230-V3 主板:b85 ...

  2. 【Python学习笔记】猜颜色小游戏

    [Python学习笔记]猜颜色小游戏 前言 一.算法原理 1. 生成器部分 2. 检测器部分 二.代码 过程BUG汇总笔记 总结 前言 最近馋世界游戏大全51,心血来潮用Python写了个猜颜色,顺便 ...

  3. UE4学习笔记#三、蓝图混合空间

    UE4学习笔记(谌嘉诚大佬的PUBG教程) 三.蓝图混合空间 1. 设置初始角色(关卡开始时pawn获得的角色) 2. 角色移动蓝图 3. 镜头方向蓝图 4. 利用TimeLine平滑切换行走跑步 5 ...

  4. JAVA学习笔记(四)城堡游戏

    城堡游戏 我们在尝试了之前的简单媒体库构造之后,试着整合一下之前学到的关于类,继承,多态等知识,制作一个简单的城堡游戏,城堡游戏是一个简单的文字游戏,通过输入命令可以在地图上不同的房间进行移动. 目录 ...

  5. GAMES101课程学习笔记—Lec 19: Cameras, Lenses and Light Fields 相机、透镜、光场

    GAMES101课程学习笔记-Lec 19: Cameras, Lenses and Light Fields 相机.透镜.光场 1 关于成像 2 相机 2.1 小孔成像 2.2 快门与传感器 2.3 ...

  6. 【UE4笔记】C++游戏控制的摄像机

    目录 自主操作题目 逻辑 代码 本文尝试编写了官方文档游戏控制的摄像机中的自主操作题目2 自主操作题目 使用一个数组变量来存储摄像机,而不是摄像机1(CameraOne)和摄像机2(CameraTwo ...

  7. Mysql学习笔记(三)运算符和控制流函数

    原文:Mysql学习笔记(三)运算符和控制流函数 本章学习内容: 1.操作符 2.控制流程函数 操作符: i.圆括号.. 简单的介绍一下圆括号,圆括号的使用的目的是规定计算表达式的顺序...这个想必大 ...

  8. STM32F407学习笔记——MG90S舵机模块(基本控制)

    STM32F407学习笔记--MG90S舵机模块(基本控制) 一.基本原理: 通过改变PWM占空比来实现舵机进行不同角度转动,下面给出旋转角度与脉冲时间及对应占空比的关系(时基脉冲=20ms). 旋转 ...

  9. Polyworks脚本开发学习笔记(十)-互动式开发及出错控制

    Polyworks脚本开发学习笔记(十)-互动式开发及出错控制 第八章组合的各种命令,完成了一个对所选的测点名称进行命名的任务.但是,由于任务中没有交互环节,只能机械地将 曲面点 - 包边点改为Flu ...

最新文章

  1. 如何使用Node.js获取当前脚本的路径?
  2. fox pro删除单条数据_删库之后不要着急跑路,教你神不知鬼不觉找回数据
  3. python 查看字符编码,[Python]判断系统编码和字符编码chardet
  4. TweetBot TabBar
  5. UE研究方法—ethnography(人种志)
  6. 算法入门经典第六章 例题6-8 树
  7. linux cron计划任务
  8. qt 5编程入门(第2版)_《C++并发编程实战第2版》第六章:设计基于锁的并发数据结构(1/3)...
  9. [Swift]LeetCode17. 电话号码的字母组合 | Letter Combinations of a Phone Number
  10. 可视对讲网络协议转换器怎么使用,协议转换器使用方法详细介绍
  11. tushare pro 版本获取股票历史数据
  12. ASP.NET Web API实现简单的文件下载与上传
  13. SAP License:SAP常见问题与解决办法(汇总帖)
  14. unity EZ Replay Manager 1.53
  15. 朴素贝叶斯法 - 垃圾邮件分类
  16. 召集令 | 2021奖金加码的“硬核”港科百万创赛又来了!
  17. Python 之圆周率 π 的计算
  18. 给未来的你-李开复在2011级大学新生学习规划讲座上的演讲
  19. MongoDB--- 客户端操作 与 复制集
  20. Adobe Audio 分轨录音教程(需要KX,Live机架)

热门文章

  1. 手把手教你安装 Win+Ubuntu 双系统(图文教程)
  2. 音视频:06.linux系统-IPC进程间通信
  3. NHK Easy News 翻译 12月26日-1
  4. PHP--地球坐标系转为火星坐标系再转为高德坐标系
  5. 利用笔记本的无线网卡制做WIFI热点
  6. 电工学计算机专业考试吗,2017年对口电子电工类考生可报考哪些单招专业?
  7. 为什么设置不了这是一台家用计算机,图文演示win10专业版更改不了这是一台家庭计算机的详尽处理步骤...
  8. 实战Windows Azure:微软云计算平台技术详解
  9. Discuz模板的安装方法
  10. Button上面添加一个图片