Unity NavMeshAgent未达到目标-移动

时间:2019-05-30 23:04:30

标签: unity3d

我已经创建了一个简单的场景,现在我正在尝试使兔子移动到飞机上的鼠标单击位置。

因此,我向兔子添加了刚体,导航网格代理和简单的“寻路”脚本。

飞机的网格渲染器设置为“静态导航”,“生成OffMeshLinks”和“可行走”

现在,一旦兔子靠近给定的目的地,它不会停下来,而是会在目的地周围很小的圆圈内“跑来跑去”。

这是我的脚本

using UnityEngine;
using UnityEngine.AI;

public class Pathfinding : MonoBehaviour {

private NavMeshAgent agent;
private Animator animator;

// Use this for initialization
void Start() {
    agent = GetComponent<NavMeshAgent>();
    animator = GetComponent<Animator>();
}

// Update is called once per frame
void Update() {
    RaycastHit hit;

    if(Input.GetMouseButtonDown(0)) {
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        if(Physics.Raycast(ray, out hit)) {
            agent.SetDestination(hit.point);
            animator.SetInteger("AnimIndex", 1);
            animator.SetBool("Next", true);
        }
    }
}
}

和我的兔子物体的照片;)

enter image description here

2 个答案:

答案 0 :(得分:1)

停止距离应> 0

答案 1 :(得分:1)

实际上我错了,更新Unity并不能解决问题,但是我意识到问题是动画“ Root Transformation Position(XZ)” /“烘焙成姿势”已停用。

我也将脚本更改为

using UnityEngine;
using UnityEngine.AI;

public class Pathfinding : MonoBehaviour {

private NavMeshAgent agent;
private Animator animator;

private bool run = false;

// Use this for initialization
void Start() {
    agent = GetComponent<NavMeshAgent>();
    animator = GetComponent<Animator>();
}

// Update is called once per frame
void Update() {
    RaycastHit hit;

    if(Input.GetMouseButtonDown(0)) {
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        if(Physics.Raycast(ray, out hit)) {
            Debug.Log("start");
            agent.SetDestination(hit.point);
            animator.SetInteger("AnimIndex", 1);
            animator.SetBool("Next", true);
            run = true;
        }
    }else if(agent.remainingDistance <= agent.stoppingDistance && run) {
        Debug.Log("stop");
        animator.SetInteger("AnimIndex", 0);
        animator.SetBool("Next", true);
        run = false;
    }


}
}