目录

  • 自主操作题目
  • 逻辑
  • 代码

本文尝试编写了官方文档游戏控制的摄像机中的自主操作题目2

自主操作题目

使用一个数组变量来存储摄像机,而不是摄像机1(CameraOne)和摄像机2(CameraTwo),这样你就可以遍历任意数量摄像机的序列,而不是仅仅两个。

逻辑

  1. 头文件创建一个EditAnywhere的Camera数组(TArray<AActor*>)(设置成UPROPERTY以便于在虚幻编辑器中绑定具体的摄像机)
  2. 头文件设置平滑转换两个摄像机的时间间隔SmoothBlendTime(这里将其设置成了UPROPERTY以便于在虚幻编辑器中修改)
  3. cpp的tick函数中设置在每个摄像机停留的时间TimeBetweenCameraChange
  4. TimeToNextCameraChange减去Deltatime后判断其是否小于零,是则触发摄像机转换
  • 在摄像机转换中:

    • 重设 TimeToNextCameraChange
    • 获取本地玩家控制的Actor(UGameplayStatics::GetPlayerController)
    • 编写摄像机之间的转换
      • 确认当前正在使用的摄像机并查看下一个摄像机是否存在
      • 存在则进行摄像机的转换(OurPlayerController->SetViewTargetWithBlend函数)

代码

// Fill out your copyright notice in the Description page of Project Settings.
// CameraDirector.h#pragma once#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "CameraDirector.generated.h"UCLASS()
class QUICKSTART_API ACameraDirector : public AActor
{GENERATED_BODY()public:    // Sets default values for this actor's propertiesACameraDirector();protected:// Called when the game starts or when spawnedvirtual void BeginPlay() override;public:  // Called every framevirtual void Tick(float DeltaTime) override;UPROPERTY(EditAnywhere)TArray<AActor*> CameraArr;float TimeToNextCameraChange;UPROPERTY(EditAnywhere)float SmoothBlendTime = 0.75f;};
// Fill out your copyrightnotice in the Description page of Project Settings.
//CameraDirector.cpp#include "CameraDirector.h"
#include "Kismet/GameplayStatics.h"// Sets default values
ACameraDirector::ACameraDirector()
{// Set this actor to call Tick() every frame.  You can turn this off to improve performance if you don't need it.PrimaryActorTick.bCanEverTick = true;}// Called when the game starts or when spawned
void ACameraDirector::BeginPlay()
{Super::BeginPlay();}// Called every frame
void ACameraDirector::Tick(float DeltaTime)
{Super::Tick(DeltaTime);const float TimeBetweenCameraChange = 2.0f;TimeToNextCameraChange -= DeltaTime;if (TimeToNextCameraChange <= 0.0f) {TimeToNextCameraChange += TimeBetweenCameraChange;//查找处理本地玩家控制的Actor。APlayerController* OurPlayerController = UGameplayStatics::GetPlayerController(this, 0);bool bUnchanged = true;if (OurPlayerController) {if (CameraArr[0] && (OurPlayerController->GetViewTarget() == CameraArr[CameraArr.Num() - 1])) {OurPlayerController->SetViewTargetWithBlend(CameraArr[0], SmoothBlendTime);}else {for (int32 Index = 0; bUnchanged && Index != CameraArr.Num() - 1; ++Index) {if (CameraArr[Index + 1] && (OurPlayerController->GetViewTarget() == CameraArr[Index])) {OurPlayerController->SetViewTargetWithBlend(CameraArr[Index + 1], SmoothBlendTime);bUnchanged = false;}}}}}}

【UE4笔记】C++游戏控制的摄像机相关推荐

  1. UE4学习笔记[2]Game-Controlled Cameras/游戏控制的摄像机

    第一步:在场景中放置摄像机 如果你是 虚幻引擎4 (UE4)Unreal Engine 4的新手,你可需要先阅读我们的编程快速入门教程.对于本教程,我们假设你熟悉以下操作:创建项目,向项目添加C++代 ...

  2. 【读书笔记】游戏开发原理

    游戏开发原理读书笔记 Contents 游戏开发原理读书笔记 一.游戏与游戏设计 1 游戏类型与平台 1.1 类型和子类型 1.2 出品类型 1.3 平台 1.4 图形类型 1.5 交付方式 1.6 ...

  3. Unity 2D 学习笔记:游戏实例Sunnyland

    Unity 2D 学习笔记:游戏实例Sunnyland 01安装软件&导入素材 02编辑素材&Tilemap 03图层layer&角色建立 04角色移动 05角色方向& ...

  4. 【OpenGL学习笔记⑧】——键盘控制正方体+光源【冯氏光照模型 光照原理 环境光照+漫反射光照+镜面光照】

    ✅ 重点参考了 LearnOpenGL CN 的内容,但大部分知识内容,小编已作改写,以方便读者理解. 文章目录 零. 成果预览图 一. 光照原理与投光物的配置 1.1 光照原理 1.2 投光物 二. ...

  5. UE4笔记-UStructToJsonObjectString首字母自动转换为小写的问题及解决方法

    UE4笔记-UStructToJsonObjectString首字母自动转换为小写的问题及解决方法 参考文章: (1)UE4笔记-UStructToJsonObjectString首字母自动转换为小写 ...

  6. UE4设置默认游戏模式和关卡

    UE4设置默认游戏模式和关卡 首先我们回到 VS 编辑器,在"内容浏览器"里面选择"内容(Content)": 新建一个存放资源的文件夹名为"Asse ...

  7. 学习笔记7--车辆控制平台

    本系列博客包括6个专栏,分别为:<自动驾驶技术概览>.<自动驾驶汽车平台技术基础>.<自动驾驶汽车定位技术>.<自动驾驶汽车环境感知>.<自动驾驶 ...

  8. 基于无线EEG的脑机接口和新型干式传感器进行游戏控制

    脑机接口(BCI)是一种通信系统,通过将大脑信号转换成机器指令,帮助用户与外部环境进行交互.脑电信号的可用性和可靠性使其成为脑机接口最常用的方法.许多基于脑电图的脑机接口设备都是利用传统的湿式或微机电 ...

  9. UE4(一):游戏起点流程图

    06/27/2020 游戏流程图 游戏流程图[^1] 前言: standalane路径 编译器路径 图解[^1] 总结 游戏流程图1 前言: 当分析完Launch文件夹之后,大概也了解完UE4的引擎的 ...

最新文章

  1. 平方变换载波同步 matlab,matlab源码-costas载波同步环.docx
  2. java swing 链接_JAVA中Jtable标签设置超级链接:基于Java Swing的超链接标签和超链接按钮的实现...
  3. 《庆余年》里范闲背了个诗,把这个GitHub项目带火了
  4. URAL-1982 Electrification Plan 最小生成树
  5. linux下如何运行脚本程序设计,Uboot 如何运行脚本
  6. 张小龙:微信产品观(上)
  7. win10 win11 网络共享显示网络路径不存在时解决办法
  8. CSS中相对定位relative
  9. Thief-Book:上班摸鱼看小说必备神器
  10. 522还不知道怎么表白吗?——经典设计模式之【观察者模式】
  11. 一个人写一个集群:基于GRPC的golang微服务框架iogo(grpc/protobuf/etcd/freetoo/码客 卢益贵)
  12. 一文读懂麦克风典型应用电路
  13. WIN10 登录samba服务器提示秘密不正确
  14. C++实现太阳系行星系统
  15. 高斯混合模型(Gaussian Mixture Model,GMM)
  16. android接入即时IM(接入亲加通信云)
  17. GitHub超 7.9 万星,最全Python入门算法!
  18. OpenGL 实现 RGBA 转 I420
  19. 看不懂matlab工具箱,matlab /simulink 各个工具箱的简单介绍 入门请看
  20. 站长说说之seo首页优化 原创文章不被收录怎么办

热门文章

  1. BGP路由黑洞解决办法介绍
  2. JavaScript相关面试题:setTimeout的运行机制
  3. 最终幻想:勇士启示录开启限量首测,好不好玩马上揭晓
  4. PHP session反序列化漏洞
  5. 区块链蓝图世界的展望-区块链4.0
  6. com.android.packageinstaller,Android包管理机制(二)PackageInstaller安装APK
  7. 分析NTFS文件系统内部结构
  8. springboot+mysql “友书”综合书籍平台-计算机毕业设计源码24489
  9. excel 破解密码
  10. android不用USB线进行adb调试