用Navigation寻路 怎么才能判断人物到达目的地
用Navigation寻路 怎么才能判断人物到达目的地
byesameVR 发表于3个月前
用Navigation寻路 怎么才能判断人物到达目的地
  • 发表于 3个月前
  • 阅读 6
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 新注册用户 域名抢购1元起>>>   

用了Navigation寻路,用代码怎么才能判断人物到达目的地,从而让人物从Move状态转到Idle状态,求救。

void FixedUpdate()
{
Vector3 point;
RaycastHit hit;//射线碰到的物体
if (Input.GetMouseButton(0))
{

Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray, out hit))
{
point = hit.point;//得到碰撞点的坐标
GetComponent<NavMeshAgent>().destination = point;
}
}
} 

回复1:NavMeshAgent.remainingDistance

回复2:谢谢大神秒回,我用这个代码,可是角色到了目的地 还是在Move状态 if (nav.remainingDistance == 0) { animator.SetBool("Move", false); } else { animator.SetBool("Move", true); }

人物移动到目的地后 是原地踏步没有到Idle状态,,,

回复3: if (nav.remainingDistance <= nav.stoppingDistance + 0.1f)

回复4:解决了,取绝对值就行了。新手们注意。。。。
if (Mathf.Abs(nav.remainingDistance) < 0.01)
{
animator.SetBool("Move", false);
}
else
{
animator.SetBool("Move", true);
}

 

回复4:

navMeshAgent调用setDestination 后,会有一个计算路径的时间,计算过程中pathPending为true. 在这个过程中remainingDistance一直为0.

回复5:

判断到达目的地不能用距离为0,应该是小于一个比零大一点点的数,所有涉及浮点数判断的,用等于一定要谨慎,因为浮点数是不精确的,原因大概是这样:
机器只判断1和0,本身是无法识别小数的,我们只能用科学计数法去逼近小数。比如说二进制的110.11换算成十进制是1*2^2+1*2^1+0*2^0+1*2^(-1)+1*2^(-2)=6.75,那么反过来如果想要表示一个十进制的小数,转成二进制,某些数可以精确表示,比如0.75就是二进制0.11,
0.5就是二进制0.1,但如果是0.623这种呢,好像就不能准确表示了,二进制所能表示的数只能是n个2的m次方相加,这个虽然可以无限去逼近任一个数,但永远是离散的,而真实的浮点数是连续的,所以多数情况下是不精确的。

 

共有 人打赏支持
粉丝 0
博文 4
码字总数 0
×
byesameVR
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: