using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MoveNavi : MonoBehaviour
{
public float speed;
private GameObject rig_f_middle;
// Start is called before the first frame update
void Start()
{
rig_f_middle = GameObject.Find("rig_f_middle.02.R");
}
// Update is called once per frame
void Update()
{
if(IKControl.startMovingNAVI == true)
{
Vector3 moveDir = (rig_f_middle.transform.position - transform.position).normalized;
transform.position += moveDir * speed * Time.deltaTime;
}
}
}
问题在于,即使非常接近目标的移动变换也永远不会停止移动,而我希望它停止移动。
我还想使变换尽可能接近目标,因为它非常接近但不接近目标。
最后,我要使当对象到达目标并停止移动时,使该对象成为目标的子对象。
您可以在更新中引入检查,以测量距目标转换的距离,如下所示:
void Update ( )
{
if ( IKControl.startMovingNAVI == true )
{
var v = rig_f_middle.transform.position - transform.position;
if ( v.magnitude < yourToleranceValue )
{
this.transform.parent = rig_f_middle.transform;
this.enabled = false;
return;
}
Vector3 moveDir = v.normalized;
transform.position += moveDir * speed * Time.deltaTime;
}
}
现在,我个人将采取额外的步骤,仅检查sqrMagnitude
,而不是magnitude
因为计算较轻,尤其是在更新循环中,因此,这也许是您不需要或不关心的优化。无论哪种方式,您都可以将其yourToleranceValue
适当地设置为公共的,可序列化的字段,也可以选择。然后,当两个变换足够接近时,它将成为该变换的父对象,并且还会关闭此组件,因此不再执行检查。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句