为了账号安全,请及时绑定邮箱和手机立即绑定

为什么有时 Vector3.Distance 不准确

为什么有时 Vector3.Distance 不准确

C#
米琪卡哇伊 2021-11-14 16:01:43
所以我有这个代码: 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 回答

?
慕妹3146593

TA贡献1820条经验 获得超9个赞

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

然后添加一个碰撞器作为触发器作为边界框,并实现其OnTriggerExitOnTriggerExit2D方法,以便找出另一个碰撞器何时移出边界框。


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

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

它将float被隐式转换为double并将其准确性改变。

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

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

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


查看完整回答
反对 回复 2021-11-14
  • 1 回答
  • 0 关注
  • 215 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信