这最初是关于统一的“统一答案”的帖子,但版主正在花时间批准它,所以我将它发布在更优越的堆栈溢出欢呼上......所以请记住,这是一个 Unity 引擎问题C# 脚本...显然...
所以我正在尝试制作一个简单的脚本来跟踪所有接触某个 2D 触发对撞机的 2D 对撞机。它应该维护一个通用的公共 2D 对撞机列表,其中包含所有接触其 2D 对撞机当前帧的 2D 对撞机,其他脚本可以访问该帧以执行其他操作。我已经尝试了几种实现,并且发现由于事件的顺序统一执行事情,它比看起来更难(无论如何对我来说)。使用传感器脚本中对撞机列表的其他脚本仅在其 update() 期间访问该列表,从逻辑上讲,当时应该正确填充该列表,但我一定是错的,因为它显然不是。这是我最近和最好的尝试,有人可以告诉我哪里出错了吗?(那里'
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class SimpleColliderSensor : MonoBehaviour {
public bool repeatsallowed;
public List<Collider2D> sensedobjs;
bool clearlist;
public void init()
{
clearlist = false;
repeatsallowed = false;
sensedobjs = new List<Collider2D>();
}
void FixedUpdate()
{
}
void Update()
{
}
void LateUpdate()
{
clearlist = true;
}
void OnTriggerEnter2D(Collider2D c)
{
OnTriggerStay2D(c);
}
void OnTriggerStay2D(Collider2D c)
{
if (clearlist)
{
sensedobjs.Clear();
clearlist = false;
}
if (repeatsallowed)
{
sensedobjs.Add(c);
}
else
{
if (!sensedobjs.Contains(c))
{
sensedobjs.Add(c);
}
}
}
void OnCollisionStay2D(Collision2D c)
{
OnTriggerStay2D(c.collider);
}
void OnCollisionEnter2D(Collision2D c)
{
OnTriggerStay2D(c.collider);
}
}
似乎“clearlist”可以在更新中设置并且它的工作方式相同,但我正在尝试不同的东西,所以它现在处于后期更新中。无论如何,列表经常缺少它应该与之碰撞的碰撞器,但有一些碰撞器。是的,传感器和感知对撞机被设置为在物理 2D 项目设置中发生碰撞。我可能应该提到这一点。我将不胜感激任何人可能有的见解。抱歉太啰嗦了。谢谢。