【UE4笔记】C++游戏控制的摄像机
目录
- 自主操作题目
- 逻辑
- 代码
本文尝试编写了官方文档游戏控制的摄像机中的自主操作题目2
自主操作题目
使用一个数组变量来存储摄像机,而不是摄像机1(CameraOne)和摄像机2(CameraTwo),这样你就可以遍历任意数量摄像机的序列,而不是仅仅两个。
逻辑
- 头文件创建一个EditAnywhere的Camera数组(TArray<AActor*>)(设置成UPROPERTY以便于在虚幻编辑器中绑定具体的摄像机)
- 头文件设置平滑转换两个摄像机的时间间隔SmoothBlendTime(这里将其设置成了UPROPERTY以便于在虚幻编辑器中修改)
- cpp的tick函数中设置在每个摄像机停留的时间TimeBetweenCameraChange
- 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++游戏控制的摄像机相关推荐
- UE4学习笔记[2]Game-Controlled Cameras/游戏控制的摄像机
第一步:在场景中放置摄像机 如果你是 虚幻引擎4 (UE4)Unreal Engine 4的新手,你可需要先阅读我们的编程快速入门教程.对于本教程,我们假设你熟悉以下操作:创建项目,向项目添加C++代 ...
- 【读书笔记】游戏开发原理
游戏开发原理读书笔记 Contents 游戏开发原理读书笔记 一.游戏与游戏设计 1 游戏类型与平台 1.1 类型和子类型 1.2 出品类型 1.3 平台 1.4 图形类型 1.5 交付方式 1.6 ...
- Unity 2D 学习笔记:游戏实例Sunnyland
Unity 2D 学习笔记:游戏实例Sunnyland 01安装软件&导入素材 02编辑素材&Tilemap 03图层layer&角色建立 04角色移动 05角色方向& ...
- 【OpenGL学习笔记⑧】——键盘控制正方体+光源【冯氏光照模型 光照原理 环境光照+漫反射光照+镜面光照】
✅ 重点参考了 LearnOpenGL CN 的内容,但大部分知识内容,小编已作改写,以方便读者理解. 文章目录 零. 成果预览图 一. 光照原理与投光物的配置 1.1 光照原理 1.2 投光物 二. ...
- UE4笔记-UStructToJsonObjectString首字母自动转换为小写的问题及解决方法
UE4笔记-UStructToJsonObjectString首字母自动转换为小写的问题及解决方法 参考文章: (1)UE4笔记-UStructToJsonObjectString首字母自动转换为小写 ...
- UE4设置默认游戏模式和关卡
UE4设置默认游戏模式和关卡 首先我们回到 VS 编辑器,在"内容浏览器"里面选择"内容(Content)": 新建一个存放资源的文件夹名为"Asse ...
- 学习笔记7--车辆控制平台
本系列博客包括6个专栏,分别为:<自动驾驶技术概览>.<自动驾驶汽车平台技术基础>.<自动驾驶汽车定位技术>.<自动驾驶汽车环境感知>.<自动驾驶 ...
- 基于无线EEG的脑机接口和新型干式传感器进行游戏控制
脑机接口(BCI)是一种通信系统,通过将大脑信号转换成机器指令,帮助用户与外部环境进行交互.脑电信号的可用性和可靠性使其成为脑机接口最常用的方法.许多基于脑电图的脑机接口设备都是利用传统的湿式或微机电 ...
- UE4(一):游戏起点流程图
06/27/2020 游戏流程图 游戏流程图[^1] 前言: standalane路径 编译器路径 图解[^1] 总结 游戏流程图1 前言: 当分析完Launch文件夹之后,大概也了解完UE4的引擎的 ...
最新文章
- 平方变换载波同步 matlab,matlab源码-costas载波同步环.docx
- java swing 链接_JAVA中Jtable标签设置超级链接:基于Java Swing的超链接标签和超链接按钮的实现...
- 《庆余年》里范闲背了个诗,把这个GitHub项目带火了
- URAL-1982 Electrification Plan 最小生成树
- linux下如何运行脚本程序设计,Uboot 如何运行脚本
- 张小龙:微信产品观(上)
- win10 win11 网络共享显示网络路径不存在时解决办法
- CSS中相对定位relative
- Thief-Book:上班摸鱼看小说必备神器
- 522还不知道怎么表白吗?——经典设计模式之【观察者模式】
- 一个人写一个集群:基于GRPC的golang微服务框架iogo(grpc/protobuf/etcd/freetoo/码客 卢益贵)
- 一文读懂麦克风典型应用电路
- WIN10 登录samba服务器提示秘密不正确
- C++实现太阳系行星系统
- 高斯混合模型(Gaussian Mixture Model,GMM)
- android接入即时IM(接入亲加通信云)
- GitHub超 7.9 万星,最全Python入门算法!
- OpenGL 实现 RGBA 转 I420
- 看不懂matlab工具箱,matlab /simulink 各个工具箱的简单介绍 入门请看
- 站长说说之seo首页优化 原创文章不被收录怎么办
热门文章
- BGP路由黑洞解决办法介绍
- JavaScript相关面试题:setTimeout的运行机制
- 最终幻想:勇士启示录开启限量首测,好不好玩马上揭晓
- PHP session反序列化漏洞
- 区块链蓝图世界的展望-区块链4.0
- com.android.packageinstaller,Android包管理机制(二)PackageInstaller安装APK
- 分析NTFS文件系统内部结构
- springboot+mysql “友书”综合书籍平台-计算机毕业设计源码24489
- excel 破解密码
- android不用USB线进行adb调试