UE4 C++创建可以定时上升下降的平台——浮动平台
Posted Vincent_0000
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UE4 C++创建可以定时上升下降的平台——浮动平台相关的知识,希望对你有一定的参考价值。
前言
本文章将会教你如何制作可以定时上升下降的平台——浮动平台。
创建C++文件
.h 文件
右击文件空白位置,创建C++文件,继承Actor类。
- 声明静态网格体,上图所展示的平台就是他的实例。
UPROPERTY(VisibleAnywhere, BlueprintReadOnly)
UStaticMeshComponent* Mesh;
- 声明起始点
UPROPERTY(EditAnywhere)
FVector StartPoint;
- 声明终止点
是用户自定义的,是相对于起始点的变化量
UPROPERTY(EditAnywhere, meta = (MakeEditWidget = true))
FVector EndPoint;
后面标签有一个meta,打开之后,你就会看到
显示出来,这个点出来,方便我们调试,(虽然在这个代码中没有体现他的优势。但是秉持着多学多益的想法,还是要和大家讲一下。)
- 声明浮动速度
UPROPERTY(EditAnywhere, BlueprintReadOnly)
float InterpSpeed; // 浮动速度
- 声明浮动时间
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
float InterpTime; // 浮动时间
- 声明时间手柄
FTimerHandle InterpTimer;
记录某个物体的时间量。
- 声明浮动状态
UPROPERTY(EditAnywhere)
bool bInterping; // 表示向上浮动还是向下浮动
- 声明转换浮动方向函数
void ToggleInterping();
.cpp 文件
- 构造函数
创建静态网格体实例,并且设置为根组件。
Mesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("Mesh"));
RootComponent = Mesh;
初始化运动方向、速度、时间、起始点。
bInterping = true; // 刚开始的时候是为向上运动
InterpSpeed = 4;
InterpTime = 5;
StartPoint = FVector(0.f);
- BeginPlay()
如果我们的实例中没有修改了我们的起始点(起始点向量等于零向量),我门就要自己获取起始点。(为啥要这么写后面会有讲。)
if (StartPoint == FVector(0.f)) StartPoint = GetActorLocation();
因为我们的终点只是一个向量差,所以的话,还要加上起始点的坐标。
EndPoint += StartPoint;
每InterpTime秒后调用一次ToggleInterping(方向转换函数),当前已经过去的多少时间信息保存在InterpTimer变量中。
GetWorldTimerManager().SetTimer(InterpTimer, this, &AFloatingPlatform::ToggleInterping, InterpTime, true);
- Tick(float DeltaTime)
我们每一帧都要更新一下我们浮动平台的位置,这样才会有一个动态的效果,如何做呢?
先获取到他的位置,如果是方向是向上走的话,我们就要计算经过了DeltaTime的时间,之前记录的位置是CurrentLocation,要以InterpSpeed的速度走向EndPoint时的位置。方向向下同理。
然后把计算出来的位置更新。
FVector CurrentLocation = GetActorLocation();
FVector TargetLocation;
if (bInterping) TargetLocation = FMath::VInterpTo(CurrentLocation, EndPoint, DeltaTime, InterpSpeed);
else TargetLocation = FMath::VInterpTo(CurrentLocation, StartPoint, DeltaTime, InterpSpeed);
SetActorLocation(TargetLocation);
- ToggleInterping()
这个函数的意思就是方向翻转,所以我们只需要对方向取非即可。
bInterping = !bInterping;
创建蓝图
右击我们刚刚创建的C++文件,创建以它为父类的蓝图,给他一个静态网格体的实例。
将该蓝图文件拖入世界中。
因为是浮动平台嘛,所以就会有一个传送的效果,要想实现两个浮动平台相接的话,两个的方向必须要是反向的,以我的项目为例,给大家说一下我是怎么确定值的。
- 下面的这个平台
我给他设置的初始位置是
(
X
=
−
30.000000
,
Y
=
−
700.000000
,
Z
=
135.000000
)
(X=-30.000000,Y=-700.000000,Z=135.000000)
(X=−30.000000,Y=−700.000000,Z=135.000000)
修改了上升的向量。
- 上面的那个平台
设置的初始位置是: ( X = 970.000000 , Y = − 700.000000 , Z = 1135.000000 ) (X=970.000000,Y=-700.000000,Z=1135.000000) (X=970.000000,Y=−700.000000,Z=1135.000000)因为它是向下的,所以他们就相差了两个向量差,也就是1000,加个1000就好了。
然后把起始点计算好,取消勾选Interping。
好了,完成!赶紧运行看看效果吧!!
以上是关于UE4 C++创建可以定时上升下降的平台——浮动平台的主要内容,如果未能解决你的问题,请参考以下文章