最简单的 UE 4 C++ 教程 —— 设置 Actor 的位置和朝向【十】

1,983 阅读1分钟

【原教程是基于 UE 4.18,我是基于 UE 4.25】

英文原地址

核心 API

SetActorLocationAndRotation

接上一节教程,在本教程中,我们将学习如何使用 SetActorLocationAndRotation 函数。创建一个新的 C++ Actor 子类并将其命名为 SetActorLocationAndRotation。在头文件中创建分别一个 FVectorFQuat 变量,通过设置 UPROPERTYEditAnywhere 使它们可以在任何地方被编辑。同时将这些变量放在 Location 类别中,使它们在一起,并与其他属性分开。

下面是最终的头文件

SetActorLocationAndRotation.h

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "SetActorLocationAndRotation.generated.h"

UCLASS()
class UNREALCPP_API ASetActorLocationAndRotation : public AActor
{
	GENERATED_BODY()
	
public:	
	// Sets default values for this actor's properties
	ASetActorLocationAndRotation();

protected:
	// Called when the game starts or when spawned
	virtual void BeginPlay() override;

public:	
	// Called every frame
	virtual void Tick(float DeltaTime) override;

	UPROPERTY(EditAnywhere, Category = Location)
	FVector NewLocation;

	UPROPERTY(EditAnywhere, Category = Location)
	FQuat NewRotation;
	
};

在这个例子中,我们将在 BeginPlay 函数中调用 SetActorLocationAndRotation 函数。要了解更多关于 SetActorLocationAndRotation 函数的信息,请点击这里

下面是最后的 .cpp 文件。

SetActorLocationAndRotation.cpp

#include "SetActorLocationAndRotation.h"


// Sets default values
ASetActorLocationAndRotation::ASetActorLocationAndRotation()
{
 	// 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 ASetActorLocationAndRotation::BeginPlay()
{
	Super::BeginPlay();

	SetActorLocationAndRotation(NewLocation, NewRotation, false, 0, ETeleportType::None);
}

// Called every frame
void ASetActorLocationAndRotation::Tick(float DeltaTime)
{
	Super::Tick(DeltaTime);
}

编译代码。将新角色拖放到游戏中。向 actor 添加一个静态网格组件。在编辑器中,为 NewLocationNewRotation 设置一个值,然后当你点击 play 按钮时,actor 将定位和旋转到这些坐标上。

效果示意图

  • 游戏运行前

  • 游戏运行后