本系列为个人学习笔记,非专业教程,欢迎交流指正

一、概述

本节主要介绍浮动平台的实现(可作为不同关卡之间的连接)

二、C++实现

1、首先定义静态网格体变量

将其初始化并设为根节点

此处的静态网格体使用的是初学者内容包中的SM_AssetPlatform

2、定义StartPoint和EndPoint,用于确定浮动平台的起点和终点(均为向量)

MakeEditWidget = “ture”可用来将EndPoint属性显示到GamePanel中,实现可视化的调节。

同时注意此处的EndPoint坐标是相对于浮动平台的,而非世界坐标,因此在计算时需要将EndPoint转换为世界坐标。

3、定义bInterping布尔型变量,来控制平台循环移动

4、利用插值实现平滑的移动

插值:在两个数之间补充一些数,让过渡变得更自然

5、使用TimerManager进行定时(平台停留一段时间后再进行移动,方便人物跳跃)

6、.h和.cpp源码如下

h文件如下

#pragma once#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "FloatingPlatform.generated.h"UCLASS()
class FIRSTPROJECT_API AFloatingPlatform : public AActor
{GENERATED_BODY()public:    // Sets default values for this actor's propertiesAFloatingPlatform();// Mesh for the platformUPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category="Platform")UStaticMeshComponent* Mesh;UPROPERTY(EditAnywhere)FVector StartPoint;//将EndPoint显示在编辑窗口UPROPERTY(EditAnywhere, meta = (MakeEditWidget = "true"))FVector EndPoint;UPROPERTY(EditAnywhere, BlueprintReadOnly, Category="Platform")float InterpSpeed;UPROPERTY(EditAnywhere, BlueprintReadOnly, Category="Platform")float InterpTime;// 用来控制浮动平台的往返UPROPERTY(EditAnywhere, BlueprintReadOnly, Category="Platform")FTimerHandle InterpTimer;// 判断是否在插值bool bInterping;float Distance;protected:// Called when the game starts or when spawnedvirtual void BeginPlay() override;public: // Called every framevirtual void Tick(float DeltaTime) override;void ToggleInterping();void SwapVectors(FVector& VecOne, FVector& VecTwo);};

cpp文件如下

#include "FloatingPlatform.h"
#include "TimerManager.h"// Sets default values
AFloatingPlatform::AFloatingPlatform()
{// 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;Mesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("Mesh"));RootComponent = Mesh;StartPoint = FVector(0.f);EndPoint = FVector(0.f);bInterping = false;InterpSpeed = 4.f;InterpTime = 1.f;
}// Called when the game starts or when spawned
void AFloatingPlatform::BeginPlay()
{Super::BeginPlay();//将平台起始位置赋给StartPointStartPoint = GetActorLocation();EndPoint += StartPoint;bInterping = false;GetWorldTimerManager().SetTimer(InterpTimer, this, &AFloatingPlatform::ToggleInterping, InterpTime);Distance = (EndPoint - StartPoint).Size();
}// Called every frame
void AFloatingPlatform::Tick(float DeltaTime)
{Super::Tick(DeltaTime);if(bInterping){FVector CurrentLocation = GetActorLocation();// 插值FVector Interp = FMath::VInterpTo(CurrentLocation, EndPoint, DeltaTime, InterpSpeed);SetActorLocation(Interp);float DistanceTraveled = (GetActorLocation() - StartPoint).Size();if(Distance - DistanceTraveled <= 1.f){ToggleInterping();GetWorldTimerManager().SetTimer(InterpTimer, this, &AFloatingPlatform::ToggleInterping, InterpTime);// 交换起点和终点,使其返回SwapVectors(StartPoint, EndPoint);}}}void AFloatingPlatform::ToggleInterping()
{bInterping = !bInterping;
}void AFloatingPlatform::SwapVectors(FVector& VecOne, FVector& VecTwo)
{FVector Temp = VecOne;VecOne = VecTwo;VecTwo = Temp;
}

三、蓝图实现(配置碰撞)

升降台的碰撞类型选择10DOP-Z Simplified Collision(Z轴对齐,相较于X和Y轴对齐更逼近升降台的外形)

碰撞盒子如下

4蓝图遍历actor_【虚幻4笔记15】浮动平台相关推荐

  1. 2引擎帮助文档_【虚幻4】初学者系列教程-《基础入门》#2-学习虚幻4的15个途径...

    如果你想系统的入门学习虚幻4不妨看看这个系列教程,在教程中我会带大家一步一步详细的了解虚幻引擎的各个功能,制作一些小的场景,小的互动,最终做出一个小的游戏,增加你的成就感! 文字版语言更加简洁,对于一 ...

  2. C++语言学习笔记15:Clean 垃圾清理插件

    C++语言学习笔记15:Clean 垃圾清理插件 对话框 STET1 图片切换功能 导入位图资源 插入图片控件并修改属性 添加消息处理函数 step2 开发思路及类关系图 step3 添加控件及MFC ...

  3. 笔记15 炸弹人游戏

    笔记15 炸弹人游戏 Player Enemy Player public class PlayerContral : MonoBehaviour {//拿到它的动画系统private Animati ...

  4. UE4蓝图制作三维弹球学习笔记(二)

    UE4蓝图制作三维弹球学习笔记(二) 1.BP_Fliper Viewport 使用Static Mesh导入Fliper. Construction 使用同一个蓝图表示左右不同的Fliper.在蓝图 ...

  5. 数据结构与算法学习笔记15:最大流问题 / 二分图 / 有权无权二分图的匹配 / 匈牙利算法 / 银行家算法 / 稳定婚配

    数据结构与算法学习笔记15:最大流问题 / 二分图 / 有权无权二分图的匹配 / 匈牙利算法 / 银行家算法 / 稳定婚配 引入小题:最短路径 最大流问题(maximum flow problem) ...

  6. LeetCode刷题笔记- 15.三数之和

    LeetCode刷题笔记- 15.三数之和 C语言 题目 注意点 C语言 /*** Return an array of arrays of size *returnSize.* The sizes ...

  7. 操作系统概念学习笔记 15 内存管理(一)

    操作系统概念学习笔记 15 内存管理(一) 背景 内存是现代计算机运行的中心.内存有非常大一组字或字节组成,每一个字或字节都有它们自己的地址.CPU依据程序计数器(PC)的值从内存中提取指令.这些指令 ...

  8. Hadoop学习笔记—15.HBase框架学习(基础知识篇)

    Hadoop学习笔记-15.HBase框架学习(基础知识篇) HBase是Apache Hadoop的数据库,能够对大型数据提供随机.实时的读写访问.HBase的目标是存储并处理大型的数据.HBase ...

  9. 区块链学习笔记15——ETH状态树

    区块链学习笔记15--ETH状态树 学习视频:北京大学肖臻老师<区块链技术与应用> 笔记参考:北京大学肖臻老师<区块链技术与应用>公开课系列笔记--目录导航页 引入 要实现的功 ...

最新文章

  1. python 合并排序的数组
  2. c语言ad采样程序思路,单片机AD采样程序及其寄存器讲解
  3. XAMPP 无法启动解决
  4. c3p0配置 initialPoolSize 和minPoolSize 可以设为0吗?设0有坏处吗?
  5. bom展开算法 java程序实现_java实现aprior算法
  6. 【译】ASP.NET MVC 5 教程 - 4:添加模型
  7. 查找数组中被删除的一个元素
  8. HDU2089 不要62【数位DP+记忆化搜索】
  9. Windows Phone 7 Silverlight控件展示(含34个控件)
  10. Xcode6 - 更改项目Copyright
  11. 简述几种常用编码器协议
  12. 华为鸿蒙系统自带什么输入法,搜狗输入法华为鸿蒙系统OS2.0版下载-搜狗输入法华为鸿蒙版v10.15.2 手机版-腾飞网...
  13. android锁屏了怎么办,安卓手机被恶意锁屏该怎么办
  14. CSS3 Shape详解
  15. Java:15位或18位居民身份证号码简单校验(正则表达式)
  16. 安卓adb push图片到相册后刷新相册(Mac版)
  17. JavaScript之购物车
  18. 现代处理器的设计思想
  19. [蓝桥杯] 三升序列 python解法
  20. LDF转Excel;LDF转位定义;Excel转LDF;Excel转位定义;MatrixCreat(一)之LIN矩阵详解

热门文章

  1. 新兴解决方案增强了电动汽车电源(功耗)管理
  2. 微信小程序扫描二维码
  3. Android Studio – Cannot resolve symbol ‘R’
  4. 写单元测试应该注意什么
  5. C++ 笔记(25)— 理解 C++ 中的头文件和源文件的作用
  6. java NIO详解
  7. 观《逻辑思维,如何成为一个高手》
  8. Swift中的问号?和感叹号!
  9. 如何将简单CMS后台管理系统示例转换为Java、Php等不同后台语言的版本
  10. 一个虚函数和虚继承的问题。