为什么有时 Vector3.Distance 不准确

Why sometimes Vector3.Distance is not accurate

所以我有这个代码:

 using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;

    public class CreateTrail : MonoBehaviour {
        Vector3 lastLocation;
        int traveled;
        public GameObject obj;
        Quaternion lastQuaternion;
        bool on;
        // Use this for initialization
        void Start () {
            lastLocation = transform.position;
            lastQuaternion = transform.rotation;
        }

        // Update is called once per frame
        void Update () {
            if (on)
            {
                if (Vector3.Distance(lastLocation, transform.position) > .1)
                {
                    Instantiate(obj, lastLocation, lastQuaternion);
                    lastLocation = transform.position;
                    lastQuaternion = transform.rotation;
                }
            }
            if (Input.GetKeyDown(KeyCode.Space))
            {
                if (on)
                {

                    on = false;
                }
                else
                {
                    lastLocation = transform.position;
                    lastQuaternion = transform.rotation;
                    on = true;
                }
            }
        }
    }

它在它所附加的对象后面创建了一系列对象,但通常包含带有脚本的对象和在彼此内部创建的对象。有没有办法将对象实例化延迟或排队到对象不在彼此内部时,而不会中断脚本的其余部分?谢谢!

您可以尝试 CoroutineInvokeInvokeRepeating 来创建延迟。 (尽可能避免使用TimerThread。)

然后添加一个 collider as trigger 作为边界框,并实现其 OnTriggerExitOnTriggerExit2D 方法以找出何时 另一个碰撞器被移到边界框外。


但是,可能还有一个问题:

Vector3.Distance returns a float, 与 double (.1) 比较时,其中一个应该转换为其他.

它是 float,它将被隐式转换为 double,并将更改其精度。

您可以通过比较两个 floats

来避免这种情况
if (Vector3.Distance(lastLocation, transform.position) > .1f)

您可以找到有关隐式转换的更多信息here