我会这样做的方式如下:
创建一个脚本并将其附加到跟踪所遵循的对象。
创建一个空游戏对象的预制件,其对撞机的大小与您的轨迹大小相同,并将其附加到脚本中。
public TrailRenderer trail; //the trail
public GameObject TrailFollower;
public GameObject ColliderPrefab;
创建一个collider prefab池(你使用的越多,它就越昂贵,但更准确。)
public int poolSize=5;
GameObject[] pool;
void Start()
{
trail = GetComponent<TrailRenderer>();
pool = new GameObject[poolSize];
for (int i = 0; i < pool.Length; i++)
{
pool[i] = Instantiate(ColliderPrefab);
}
}
现在在更新游戏时,您应该执行以下操作:
void Update () {
if (!trail.isVisible)
{
for (int i = 0; i < pool.Length; i++)
{
pool[i].gameObject.SetActive(false);
}
}
else
{
TrailCollission();
}
}
void TrailCollission()
{
for (int i = 0; i < pool.Length; i++)
{
if (pool[i].gameObject.activeSelf == false)
{
pool[i].gameObject.SetActive(true);
pool[i].gameObject.transform.position = TrailFollower.gameObject.transform.position;
return;
}
}
}
检查屏幕上是否正在绘制轨迹,如果没有,则隐藏所有对撞机。
否则,在池中运行并搜索隐藏的对撞机。
- 当找到隐藏的对撞机时,使其在轨迹游戏对象的位置上可见。
(如果不是所有的轨迹都立即消失,您还可以添加 iEnumerator 它将在所需时间后隐藏它)。
通过使池更大,丢失对撞机的机会将降低,玩弄它直到找到适合您需要的东西。
编辑:
要让 Collider 在一段时间后隐藏,请执行以下操作:
private IEnumerator hide(float waitTime, GameObject p)
{
while (true)
{
yield return new WaitForSeconds(waitTime);
p.SetActive(false);
yield break;
}
yield break;
}
在设置他们的位置后调用它
hide(time,pool[i].gameObject);
StartCoroutine(hide);