在我的场景中,我有一个移动到特定目的地的特工。我立即尝试复制它以创建第二个特工,结果是非常奇怪的:特工被运输到地图的对角并停止移动。 此外,运行时的导航网格似乎已更改(如您在第二个屏幕截图中所见)。一旦我禁用了一个代理,另一个代理便开始按预期工作。
编辑: 这是我用于字符的代码(如您所见,我手动管理字符旋转/翻译,而不是委派代理,在我之前将相同的脚本分配给第二个字符之前,它一直有效。) >
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
public class AI_PlayerController : MonoBehaviour
{
public Transform goal;
bool isTracking = false;
public float speed = 1.0f;
Vector3 currentDirection;
Animator anim;
NavMeshAgent agent;
Vector2 smoothDeltaPosition = Vector2.zero;
Vector2 velocity = Vector2.zero;
// Start is called before the first frame update
void Start()
{
anim = GetComponent<Animator>();
agent = GetComponent<NavMeshAgent>();
agent.SetDestination(goal.position);
agent.updatePosition = false;
agent.updateRotation = false;
}
void Update ()
{
if (agent.remainingDistance > agent.radius) {
Vector3 worldDeltaPosition = agent.nextPosition - transform.position;
worldDeltaPosition.y = 0;
Quaternion rotation = Quaternion.LookRotation(worldDeltaPosition);
transform.rotation = Quaternion.Slerp(transform.rotation, rotation, .1f);
anim.SetBool("move", true);
} else {
anim.SetBool("move", false);
}
}
void OnAnimatorMove ()
{
// Update position to agent position
transform.position = agent.nextPosition;
}
}
答案 0 :(得分:0)
您是否清除并重新烘焙了导航网?我不确定这是否行得通,但可以解决问题。否则,请尝试在两者上都删除并重新添加NavMeshAgent
组件。如果它们是预制件,那么您可能需要重新创建它们而不是复制它们,以免不必要的更改不会在它们之间意外传播。
编辑:如果不查看代码就很难确定问题。您可以上传导航/运动脚本吗?
编辑2 您可以尝试使用以下移动脚本替换两个角色上的脚本吗?动画逻辑可以稍后再添加。
如果这不起作用,那么我建议您检查场景中是否正确设置了NavMesh(例如,确保正确标记了导航障碍,并清除并重新烘焙NavMesh)。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
[RequireComponent(typeof(NavMeshAgent))]
public class AI_PlayerController : MonoBehaviour
{
public Transform goal;
public float speed = 3.0f;
public float acceleration = 8.0f;
NavMeshAgent agent;
// Start is called before the first frame update
void Start()
{
agent = GetComponent<NavMeshAgent>();
agent.speed = speed;
agent.acceleration = acceleration;
agent.SetDestination(goal.position);
}
}