为什么有时 Vector3.Distance 不准确

所以我有这个代码:


 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;

                }

            }

        }

    }

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




米琪卡哇伊
浏览 216回答 1
1回答

慕妹3146593

您可以尝试Coroutine,Invoke或InvokeRepeating创建延迟。(尽量避免使用Timer和Thread。)然后添加一个碰撞器作为触发器作为边界框,并实现其OnTriggerExit或OnTriggerExit2D方法,以便找出另一个碰撞器何时移出边界框。但是,可能还有另一个问题:Vector3.Distance返回 a float,与 a double( .1)相比,其中一个应该转换为另一个的类型。它将float被隐式转换为double并将其准确性改变。您可以通过比较两个floats来避免这种情况if (Vector3.Distance(lastLocation, transform.position) > .1f)您可以在此处找到有关隐式转换的更多信息
打开App,查看更多内容
随时随地看视频慕课网APP