如何移动对象使其更精确地对准目标,然后使其成为目标的子对象?

丹尼尔·利普(Daniel Lip)
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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何更精确地设计 deezer api 查询

如何更精确地衡量上下文切换的成本

在打印浮点数时,如何更精确地打印小数位?

需要Java“更精确地重新抛出异常”

浮点RNG是否应该更精确地接近0?

如何使其成为整数?

如何使其成为BCNF

您如何在仍然注视目标的同时保持使相机平稳地移动到新位置?

Unity获取游戏对象移动目标的Canvas UI文本位置

如何将带有2个嵌套对象的数组弄平并使其成为一个

如何在React中获取嵌套的Json并使其成为对象数组

JavaScript 中的列表操作以使其成为 JSON 对象

如何缓慢地向目标平滑地旋转物体?对象未面向目标旋转

有什么方法可以比 currentTimeMillis() 或 nanoTime() 更精确地测量时间吗?

使用openpyxl可以更精确地放置图像吗?(像素坐标而不是像元坐标?)

有没有比SDL_Delay更精确地延迟程序的方法?

如何使用AutoMapper映射目标对象和源对象中的子对象?

使用css使对象出现,然后延迟后使其消失

如何使用带有对象作为目标的jquery在特定元素之后附加元素?

Excel VBA-如何对Range对象进行编程以使其水平移动?

如何计算射击子弹以击中移动目标的角度?

如何计算弹丸撞击移动目标的位置?

将子对象设为新的父对象时,如何自由地(内部)移动子对象?

如何将目标对象移动到对象索引数组的前面?

如何获得从设备到信标的更精确的距离?

同一目标的多个 Proxy 对象的明显污染

在对象库中包含 CMake 目标的标头

平滑地将对象向目标对象旋转

在同步块中修改对象(例如HashSet)是否等同于使其成为同步对象?