所以我有以下代码:
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;
}
}
}
}
它会在附着对象的后面创建一个对象的痕迹,但通常会使带有脚本的对象与在彼此内部创建的对象。有没有一种方法可以将对象实例化延迟或排队到对象不在彼此之间时,而不会中断脚本的其余部分?谢谢!
答案 0 :(得分:1)
您可以尝试Coroutine
,Invoke
或InvokeRepeating
创建延迟。 (避免尽量使用Timer
和Thread
。)
然后添加一个 collider as trigger 作为边界框,并使用其实现的OnTriggerExit
或OnTriggerExit2D
方法来确定何时另一个对撞机 strong>移到边界框之外。
但是,可能还有另一个问题:
Vector3.Distance
返回一个float
,与double
(.1
)相比,其中一个应转换为另一个的类型。
float
会隐式转换为double
,并会更改其精度。
您可以通过比较两个float
来避免这种情况
if (Vector3.Distance(lastLocation, transform.position) > .1f)
您可以找到有关隐式强制转换here
的更多信息