为什么有时 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;
}
}
}
}
它在它所附加的对象后面创建了一系列对象,但通常包含带有脚本的对象和在彼此内部创建的对象。有没有办法将对象实例化延迟或排队到对象不在彼此内部时,而不会中断脚本的其余部分?谢谢!
您可以尝试 Coroutine
、Invoke
或 InvokeRepeating
来创建延迟。 (尽可能避免使用Timer
和Thread
。)
然后添加一个 collider as trigger 作为边界框,并实现其 OnTriggerExit
或 OnTriggerExit2D
方法以找出何时 另一个碰撞器被移到边界框外。
但是,可能还有一个问题:
Vector3.Distance
returns a float
, 与 double
(.1
) 比较时,其中一个应该转换为其他.
它是 float
,它将被隐式转换为 double
,并将更改其精度。
您可以通过比较两个 float
s
来避免这种情况
if (Vector3.Distance(lastLocation, transform.position) > .1f)
您可以找到有关隐式转换的更多信息here
所以我有这个代码:
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;
}
}
}
}
它在它所附加的对象后面创建了一系列对象,但通常包含带有脚本的对象和在彼此内部创建的对象。有没有办法将对象实例化延迟或排队到对象不在彼此内部时,而不会中断脚本的其余部分?谢谢!
您可以尝试 Coroutine
、Invoke
或 InvokeRepeating
来创建延迟。 (尽可能避免使用Timer
和Thread
。)
然后添加一个 collider as trigger 作为边界框,并实现其 OnTriggerExit
或 OnTriggerExit2D
方法以找出何时 另一个碰撞器被移到边界框外。
但是,可能还有一个问题:
Vector3.Distance
returns a float
, 与 double
(.1
) 比较时,其中一个应该转换为其他.
它是 float
,它将被隐式转换为 double
,并将更改其精度。
您可以通过比较两个 float
s
if (Vector3.Distance(lastLocation, transform.position) > .1f)
您可以找到有关隐式转换的更多信息here