我有一个非常奇怪的问题。
我使用 navmesh 工具和自定义脚本创建了一个 AI,一旦到达旧目的地,它就会不断为 navmesh 代理分配新目的地。
我不得不更换这个 AI 的模型(之前是一个胶囊),所以我这样做了,复制了几乎所有的组件,调整了一些参数,如代理高度等,然后运行它。
胶囊 AI 可以正常工作,但具有正确模型的 AI 显然不能。
调试后,我发现建模 AI 的目标列表由 Vector3.zero 组成,而胶囊 AI 在其目标列表中具有正确的 vector3。
这是我的 AI 目标脚本:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
public class AIMovement : MonoBehaviour
{
private NavMeshAgent _navMeshAgent; //reference to the navmesh agent
private MapController _mapControllerScript; //reference to the map controller script to access waypoints
private List<Vector3> _wayPoints = new List<Vector3>();
private Vector3 _destination;
// Use this for initialization
void Start()
{
_mapControllerScript = GameObject.Find("Map_01").GetComponent<MapController>();
SetWayPointLocations();
_navMeshAgent = this.GetComponent<NavMeshAgent>();
Debug.Log(_mapControllerScript.ToString());
Debug.Log(_mapControllerScript.HealthPickUpPositions.ToString());
Debug.Log(_navMeshAgent);
Debug.Log(_wayPoints);
foreach (Vector3 waypoint in _wayPoints)
{
Debug.Log(waypoint);
}
}
// Update is called once per frame
void Update()
{
MoveAroundMap();
}
void MoveAroundMap()
{
if (_navMeshAgent.transform.position.x == _destination.x &&
_navMeshAgent.transform.position.z == _destination.z
|| _destination == new Vector3(0, 0, 0)
)
{
Debug.Log("Acquiring new position");
_destination = _wayPoints[Random.Range(0, _wayPoints.Count-1)];
}
_navMeshAgent.SetDestination(_destination);
}
void SetWayPointLocations()
{
foreach (Vector3 waypoint in _mapControllerScript.HealthPickUpPositions)
{
_wayPoints.Add(waypoint);
}
foreach (Vector3 waypoint in _mapControllerScript.AmmoPickUpPositions)
{
_wayPoints.Add(waypoint);
}
}
}
这是控制台:您可以清楚地看到胶囊 AI 的坐标是正确的,而损坏的 AI 的坐标是 (0, 0, 0)。
这是层次结构窗口:Capsule 是工作的 AI,Character_Piccolo 是不工作的。
这是Capsule的检查员,工作的 AI。
这是模型的检查员,坏掉的 AI。
抱歉,拖了这么久,但我想确保你们拥有所有需要的信息。
提前致谢!