虛幻引擎版本:5.5.4
?問題描述
? ? ? ? 剛創建的Third Person項目里,定義一個BP_Enemy藍圖,拖拽到場景中產生的實例會追隨玩家,但SpawnActor產生的實例會固定不動。BP_Enemy藍圖具體設計如下:

??
? ? ? ? 又定義了一個Actor藍圖BP_SpawnEnemy,在場景中隨機半徑內根據BP_Enemy藍圖生成實例,BP_SpawnEnemy藍圖具體設計如下:

? ? ? ? 場景中也添加了NavMeshBoundsVolume覆蓋,將BP_SpawnEnemy放置在場景中時產生的BP_Enemy實例靜止不動,如下圖。
可能原因
1. AI Move To節點沒有生效
2. SpawnActor產生的實例沒有激活,不會執行BeginPlay
3. AI Move To節點的輸入有問題
4. NavMeshBoundsVolume設置有問題
分析過程
? ? ? ? 問題的關鍵在于:拖拽到場景中的實例和通過SpawnActor產生的實力有什么區別?
? ? ? ? 通過在不同的節點前添加Print String節點,可以發現AI Move To的On Success和On Fail都沒有執行,懷疑過是不是異步操作的原因,但更大的可能性是輸入存在問題,在AI Move To節點前添加Print String節點打印發現輸入都很正常,Pawn和TargetActor能獲取DisplayedName,即表明成功獲取到實例引用,其他還會是什么輸入出現問題呢?
? ? ? ? 在兩天與豆包的交流里它多次提起“AIController異常”的問題,查看BP_Enemy藍圖里“AI Controller Class”發現設置成功,在SpawnActor后獲取實例并打印其AIController,Is Valid節點判斷為false,果然是沒有初始化。在知乎里查到這樣一個設置“Auto Possess AI”,看了選項恍然大悟,該設置用來定義角色的AIController在什么場景下初始化。
根本原因
? ? ? ? 配置問題,AIController沒有初始化。
解決方案?
? ? ? ?在BP_Enemy藍圖中,確認“AI Controller Class”配置是否設為“AIController”,并修改配置“Auto Possess AI”是否設置正確,各選項含義如下:
1. Disabled 不自動初始化AI Controller
2. Placed in world 當實例在場景初始化時就被放置在場景中,自動初始化AI Controller
3. Spawned 當實例是被生成出來的,生成時自動初始化AI Controller
4. Placed in world or spawned 無論實例是被放置或被生成出來的,都會自動初始化AI Controller