关于UE4里面Spawn出来的Actor启用导航寻路的问题

     今天做项目的时候,遇到了一个坑~

一般使用简单的AI寻路,采用的都是nav,然后在蓝图中使用导航寻路的节点进行寻路的~

网上看到的也都是,这个AI_Actor在场景中存在,而不是spawn出来的,如下图所示,一般都是类似于这么写就ok了



     这样子在运行的时候就会看到这个actor自动走向了你的target目标点处


如果您搜索到我的这篇博客的话,就会发现问题来了——如果这个Actor只是Spawn出来的,那么这一段就好像失效了,它不动了,一直停在原地~顿时心中万分不解了,一脸懵逼,不晓得啥子情况,明明按道理说都是一样的啊~</

UE5中,`SpawnActor` 是用于在场景中动态创建(生成)Actor实例的函数,允许在游戏运行时根据需要创建新的Actor,如敌人、道具、特效等,在动态场景生成、游戏逻辑控制等方面非常有用[^1]。 ### 基本用法 一般可以通过 `UWorld` 类的 `SpawnActor` 方法来生成Actor。以下是基本的代码示例: ```cpp // 假设在某个Actor类的成员函数中 if (UWorld* World = GetWorld()) { // 要生成的Actor的类 TSubclassOf<AActor> ActorClass = AMyActor::StaticClass(); // 生成位置 FVector SpawnLocation(0.0f, 0.0f, 0.0f); // 生成旋转 FRotator SpawnRotation(0.0f, 0.0f, 0.0f); // 生成Actor AActor* SpawnedActor = World->SpawnActor<AActor>(ActorClass, SpawnLocation, SpawnRotation); if (SpawnedActor) { // 生成成功后的操作 } } ``` ### 注意事项 在做项目过程中可能会遇到先 `SpawnActor` 再传参会先运行生成的Actor的 `BeginPlay` 然后才进行传参的问题。例如以下代码: ```cpp if (ABaseCharactor* BaseCharactor = GetWorld()->SpawnActor<ABaseCharactor>(NewClass, CharactorLocation, CharactorRotatation)) { BaseCharactor->ID = ID; } ``` 如果在 `BeginPlay` 时就需要用到参数做操作,需要考虑解决该传参时机问题。 ### 蓝图使用 在蓝图中也可以使用 `Spawn Actor from Class` 节点来生成Actor,在事件图表中找到该节点,设置好要生成的Actor类、生成位置和旋转等参数即可。 ### 相关蓝图设计示例 定义一个Actor蓝图 `BP_SpawnEnemy`,可以在场景中随机半径内根据 `BP_Enemy` 蓝图生成实例,具体可在 `BP_SpawnEnemy` 的事件图表中进行设计[^3]。 ### 蓝图宏库用法 还可以制作一个蓝图宏库用以在构造器中 `Spawn Actor`,示例代码如下: ```cpp void UakietoolsBPLibrary::SpawnMyActor(UWorld* World, UClass* Class, FVector const& Location) { if (Class) { if (World) { World->SpawnActor<APostProcessVolume>(Class, Location, FRotator(0.f)); } } } ```
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值