日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

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

發(fā)布時間:2023/11/27 生活经验 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 4蓝图遍历actor_【虚幻4笔记15】浮动平台 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

本系列為個人學(xué)習(xí)筆記,非專業(yè)教程,歡迎交流指正

一、概述

本節(jié)主要介紹浮動平臺的實現(xiàn)(可作為不同關(guān)卡之間的連接)

二、C++實現(xiàn)

1、首先定義靜態(tài)網(wǎng)格體變量

將其初始化并設(shè)為根節(jié)點

此處的靜態(tài)網(wǎng)格體使用的是初學(xué)者內(nèi)容包中的SM_AssetPlatform

2、定義StartPoint和EndPoint,用于確定浮動平臺的起點和終點(均為向量)

MakeEditWidget = “ture”可用來將EndPoint屬性顯示到GamePanel中,實現(xiàn)可視化的調(diào)節(jié)。

同時注意此處的EndPoint坐標(biāo)是相對于浮動平臺的,而非世界坐標(biāo),因此在計算時需要將EndPoint轉(zhuǎn)換為世界坐標(biāo)。

3、定義bInterping布爾型變量,來控制平臺循環(huán)移動

4、利用插值實現(xiàn)平滑的移動

插值:在兩個數(shù)之間補充一些數(shù),讓過渡變得更自然

5、使用TimerManager進(jìn)行定時(平臺停留一段時間后再進(jìn)行移動,方便人物跳躍)

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;
}

三、藍(lán)圖實現(xiàn)(配置碰撞)

升降臺的碰撞類型選擇10DOP-Z Simplified Collision(Z軸對齊,相較于X和Y軸對齊更逼近升降臺的外形)

碰撞盒子如下

總結(jié)

以上是生活随笔為你收集整理的4蓝图遍历actor_【虚幻4笔记15】浮动平台的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。