为什么有时Vector3.Distance不准确

时间:2018-08-03 18:17:00

标签: c# unity3d delay instantiation

所以我有以下代码:

 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;
                }
            }
        }
    }

它会在附着对象的后面创建一个对象的痕迹,但通常会使带有脚本的对象与在彼此内部创建的对象。有没有一种方法可以将对象实例化延迟或排队到对象不在彼此之间时,而不会中断脚本的其余部分?谢谢!

1 个答案:

答案 0 :(得分:1)

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

然后添加一个 collider as trigger 作为边界框,并使用其实现的OnTriggerExitOnTriggerExit2D方法来确定何时另一个对撞机 strong>移到边界框之外。


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

Vector3.Distance返回一个float,与double.1)相比,其中一个应转换为另一个的类型。

float会隐式转换为double,并会更改其精度。

您可以通过比较两个float来避免这种情况

if (Vector3.Distance(lastLocation, transform.position) > .1f)

您可以找到有关隐式强制转换here

的更多信息