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的主要内容,如果未能解决你的问题,请参考以下文章

java生成指定范围内随机秒数

SQL Server生成指定范围内的随机数

C++中随机数生成范围内

js如何生成指定范围内的随机数

随机生成指定范围内的随机数,放在指定长度的数组内

在一个范围内随机生成指定个数的不重复随机数