1.在飞艇的头文件中,声明一个速度变量
//移动速度
UPROPERTY(EditAnywhere)
float Speed = 100.0f;
2.在每帧函数里生成一个位移
// Called every frame
void AEnemy::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
float a = FMath::RandRange(0.0f, 3.0f);
float b = FMath::RandRange(0.0f, 2.0f);
float c = FMath::RandRange(0.0f, 0.3f);
UKismetSystemLibrary::PrintString(this, FString::SanitizeFloat(c));
//添加一个位移
this->AddActorWorldOffset(FVector(a, b, c) * Speed * DeltaTime);
}
======================
现在我们创建一个生成飞艇的类
1.该类放在场景中,我们同样继承于actor
2.添加一个碰撞盒子
//碰撞盒子
UPROPERTY(VisibleAnywhere)
class UBoxComponent* SpwanArea;
3.源文件中创建这个碰撞盒子
//碰撞盒子,并设为根组件
SpwanArea = CreateDefaultSubobject<UBoxComponent>(TEXT("BoxComponent"));
//设为根组件
RootComponent = SpwanArea;
//设置大小
SpwanArea->SetBoxExtent(FVector(1000.0f, 1000.0f, 100.0f));
4.在头文件中,声明一个生成函数、一个生成类型变量和句柄
//发射物种类
UPROPERTY(EditAnywhere)
TSubclassOf<class AEnemy> EnemyType;
//添加一个句柄
FTimerHandle SpwanTimerHandle;
//生成函数
UFUNCTION()
void SpwanHandler();
5.定义生成函数
void AEnemySpawner::SpwanHandler()
{
FVector org;
FVector ext;
GetActorBounds(false, org, ext);
//随机找一个点
FVector spwanpoint = UKismetMathLibrary::RandomPointInBoundingBox(org,ext);
//生成actor
GetWorld()->SpawnActor< AEnemy>(EnemyType, spwanpoint, FRotator::ZeroRotator);
}
6.我们用timer定时调用生成函数
void AEnemySpawner::BeginPlay()
{
Super::BeginPlay();
GetWorld()->GetTimerManager().SetTimer(SpwanTimerHandle,this,&AEnemySpawner::SpwanHandler,2.0f,true);
}
7.得到生成类的蓝图
8.选择生成类型
9.拖入场景
测试成功。