任务:获取场景Actor的起始位置,根据布尔值的设定,初始化Actor的位置,以及给Actor设定定向移动
float.h关键部分源码如下:
public:
// Sets default values for this actor's properties
AFloat();
UPROPERTY(VisibleAnywhere,Category="ActorMeshComponents")
UStaticMeshComponent* StaticMesh;
//InitLocation向量,用来储存Actor初始化的位置,可在实例中编辑
UPROPERTY(EditInstanceOnly,BlueprintReadWrite,Category="Float Variates")
FVector InitLocation;
//PreLocation向量,用来储存Actor的起始位置,在属性界面中只可读
UPROPERTY(VisibleAnywhere,BlueprintReadOnly,Category = "Float Variates")
FVector PreLocation;
//InitVector向量,用来储存定向移动的偏移方向向量,可在实例中编辑
UPROPERTY(EditInstanceOnly,BlueprintReadWrite, Category = "Float Variates")
FVector InitVector;
//bShouldInit布尔变量,用来控制是否对Actor进行位置初始化,可在实例中编辑
UPROPERTY(EditInstanceOnly,BlueprintReadOnly,Category = "Float Variates")
bool bShouldInit;
//bShouldMove布尔变量,用来控制是否让Actor进行定向移动,可在实例中编辑
UPROPERTY(EditInstanceOnly, BlueprintReadOnly, Category = "Float Variates")
bool bShouldMove;
float.cpp关键部分源码如下:
// 构造函数,对Actor相关变量进行初始化
AFloat::AFloat()
{
// 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;
StaticMesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("CustomStatciMesh"));
InitLocation = FVector(0);
PreLocation = FVector(0);
InitVector = FVector(1,0,0);
bShouldInit = false;
bShouldMove = false;
}
// Called when the game starts or when spawned
//BeginPlay为虚幻引擎自有函数,在游戏开始时执行一次
void AFloat::BeginPlay()
{
Super::BeginPlay();
//获取Actor当前位置并赋值给PreLocation向量
PreLocation = GetActorLocation();
//如果bShouldInit布尔值为true,则将当前Actor位置初始化为InitLocation向量
if (bShouldInit)
{
SetActorLocation(InitLocation);
}
}
// Called every frame
//Tick为虚幻引擎自有函数,在游戏运行的每一帧均执行一次
void AFloat::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
//如果bShouldMove布尔值为true,则当前Actor位置偏移InitVector向量,由于每一帧执行一次,相当于实现了定向移动
if (bShouldMove)
{
AddActorLocalOffset(InitVector);
}
}