UE4 C++ 在指定区域范围内随机生成character
Posted Vincent_0000
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UE4 C++ 在指定区域范围内随机生成character相关的知识,希望对你有一定的参考价值。
前言
本文章将告诉你在指定区域范围内随机生成character。
没运行一次,生成的角色位置都不一样。
创建C++文件
右键文件夹空白区域,新建C++文件,继承Actor类。
.h文件
添加盒子组件,主要的作用在于指定创建范围。
UPROPERTY(VisibleAnywhere, BlueprintReadOnly)
class UBoxComponent* SpawningBox;
声明创建随机点的函数。
UFUNCTION(BlueprintPure)
FVector GetSpawnPoint();
这里与大家讲一下BlueprintPure
与我们之前看到的BlueprintCallable
区别。
声明创建的元素的类型
UPROPERTY(EditAnywhere, BlueprintReadOnly)
TSubclassOf<class ARole> PawnToSpawn;
我们一般定义一个物体属性的时候会直接UClass* DamageType
这么去写,但是官方推荐了一个TSubclassOf<>
这样写的好处是什么呢,这样写,我们的选择就变的多样化了,只要他是该类的子类,就都可以放入我们的这个属性中,也就是说以后如果我们要做一个功能,在指定位置生成不同的敌人,那么我们就可以把敌人的共同点提取出来,做一个基类,所有的敌人都继承这个基类,这样的话,我们的选择就多样化了。
对于当前这个功能,我生成的是一个角色类,然后有一个蓝图继承了他,那么我们的编辑界面就会出现:
声明生成角色类的函数。
UFUNCTION(BlueprintNativeEvent, BlueprintCallable)
void SpawnMyPawn(UClass* PawnClass, FVector const& Location);
这里出现了一个新的函数标记BlueprintNativeEvent
,我们和BlueprintImplementableEvent
做比较来促进我们的理解:
BlueprintImplementableEvent
:在C++可以声明函数(不能定义,蓝图重写),在C++里调用该函数,蓝图重写实现该函数。
BlueprintNativeEvent
:在C++可以声明和定义函数,在C++里调用该函数,蓝图重写实现该函数(蓝图可以重写或不重写C++父类函数), 但是他在cpp中实现的时候命名要按照[FunctionName]_Implementation 命名而不是 [FunctionName]。
.cpp文件
<构造函数>
添加头文件:#include "Components/BoxComponent.h"
在构造函数中把我们的盒子实例创建出来。
SpawningBox = CreateDefaultSubobject<UBoxComponent>(TEXT("SpawningBox"));
<GetSpawnPoint()>
添加头文件:#include "Kismet/KismetMathLibrary.h"
RandomPointInBoundingBox函数会根据盒子的位置和盒子的大小,在这个区域内随机生成一个位置。
FVector ASpawnVolume::GetSpawnPoint()
{
FVector Extent = SpawningBox->GetScaledBoxExtent(); // 获得盒子的长宽高
FVector Origin = SpawningBox->GetComponentLocation(); // 获得盒子的位置
FVector Point = UKismetMathLibrary::RandomPointInBoundingBox(Origin, Extent); // 生成随机位置
return Point;
}
<SpawnMyPawn实现>
添加头文件:#include "Role.h"
这个头文件是你要防止的元素的类。
获得世界,然后在世界的某个位置,以某种角度放置我们的类实例。
void ASpawnVolume::SpawnMyPawn_Implementation(UClass* PawnClass, FVector const& Location)
{
if (PawnClass) {
UWorld* MyWorld = GetWorld();
if (MyWorld) {
ARole* Create = MyWorld->SpawnActor<ARole>(PawnClass, Location, FRotator(0.f));
}
}
}
蓝图实现
最后再蓝图中按照这样的连法即可实现在指定区域范围内生成character的功能。
就是开始的时候就要创建这个角色(调用SpawnMyPawn函数),角色从(PawnToSpawn)获取, 位置从GetSpawnPoint获取。
以上是关于UE4 C++ 在指定区域范围内随机生成character的主要内容,如果未能解决你的问题,请参考以下文章