4蓝图遍历actor_【虚幻4笔记15】浮动平台
本系列为个人学习笔记,非专业教程,欢迎交流指正
一、概述
本节主要介绍浮动平台的实现(可作为不同关卡之间的连接)
二、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】浮动平台相关推荐
- 2引擎帮助文档_【虚幻4】初学者系列教程-《基础入门》#2-学习虚幻4的15个途径...
如果你想系统的入门学习虚幻4不妨看看这个系列教程,在教程中我会带大家一步一步详细的了解虚幻引擎的各个功能,制作一些小的场景,小的互动,最终做出一个小的游戏,增加你的成就感! 文字版语言更加简洁,对于一 ...
- C++语言学习笔记15:Clean 垃圾清理插件
C++语言学习笔记15:Clean 垃圾清理插件 对话框 STET1 图片切换功能 导入位图资源 插入图片控件并修改属性 添加消息处理函数 step2 开发思路及类关系图 step3 添加控件及MFC ...
- 笔记15 炸弹人游戏
笔记15 炸弹人游戏 Player Enemy Player public class PlayerContral : MonoBehaviour {//拿到它的动画系统private Animati ...
- UE4蓝图制作三维弹球学习笔记(二)
UE4蓝图制作三维弹球学习笔记(二) 1.BP_Fliper Viewport 使用Static Mesh导入Fliper. Construction 使用同一个蓝图表示左右不同的Fliper.在蓝图 ...
- 数据结构与算法学习笔记15:最大流问题 / 二分图 / 有权无权二分图的匹配 / 匈牙利算法 / 银行家算法 / 稳定婚配
数据结构与算法学习笔记15:最大流问题 / 二分图 / 有权无权二分图的匹配 / 匈牙利算法 / 银行家算法 / 稳定婚配 引入小题:最短路径 最大流问题(maximum flow problem) ...
- LeetCode刷题笔记- 15.三数之和
LeetCode刷题笔记- 15.三数之和 C语言 题目 注意点 C语言 /*** Return an array of arrays of size *returnSize.* The sizes ...
- 操作系统概念学习笔记 15 内存管理(一)
操作系统概念学习笔记 15 内存管理(一) 背景 内存是现代计算机运行的中心.内存有非常大一组字或字节组成,每一个字或字节都有它们自己的地址.CPU依据程序计数器(PC)的值从内存中提取指令.这些指令 ...
- Hadoop学习笔记—15.HBase框架学习(基础知识篇)
Hadoop学习笔记-15.HBase框架学习(基础知识篇) HBase是Apache Hadoop的数据库,能够对大型数据提供随机.实时的读写访问.HBase的目标是存储并处理大型的数据.HBase ...
- 区块链学习笔记15——ETH状态树
区块链学习笔记15--ETH状态树 学习视频:北京大学肖臻老师<区块链技术与应用> 笔记参考:北京大学肖臻老师<区块链技术与应用>公开课系列笔记--目录导航页 引入 要实现的功 ...
最新文章
- python 合并排序的数组
- c语言ad采样程序思路,单片机AD采样程序及其寄存器讲解
- XAMPP 无法启动解决
- c3p0配置 initialPoolSize 和minPoolSize 可以设为0吗?设0有坏处吗?
- bom展开算法 java程序实现_java实现aprior算法
- 【译】ASP.NET MVC 5 教程 - 4:添加模型
- 查找数组中被删除的一个元素
- HDU2089 不要62【数位DP+记忆化搜索】
- Windows Phone 7 Silverlight控件展示(含34个控件)
- Xcode6 - 更改项目Copyright
- 简述几种常用编码器协议
- 华为鸿蒙系统自带什么输入法,搜狗输入法华为鸿蒙系统OS2.0版下载-搜狗输入法华为鸿蒙版v10.15.2 手机版-腾飞网...
- android锁屏了怎么办,安卓手机被恶意锁屏该怎么办
- CSS3 Shape详解
- Java:15位或18位居民身份证号码简单校验(正则表达式)
- 安卓adb push图片到相册后刷新相册(Mac版)
- JavaScript之购物车
- 现代处理器的设计思想
- [蓝桥杯] 三升序列 python解法
- LDF转Excel;LDF转位定义;Excel转LDF;Excel转位定义;MatrixCreat(一)之LIN矩阵详解