Поэтому я пытаюсь создать простой скрипт, чтобы отслеживать все 2D-коллайдеры, касающиеся определенного 2D-триггера коллайдер. Предполагается, что он поддерживает общий общедоступный список 2D-коллайдеров, включающий все 2D-коллайдеры, которые касались его 2D-коллайдера в текущем кадре, к которому могут получить доступ другие сценарии для выполнения других задач. Я попробовал несколько реализаций и обнаружил, что из-за порядка событий Unity выполняет все, что это сложнее, чем кажется (во всяком случае, для меня). Другие сценарии, использующие список коллайдеров из сценария датчика, получают доступ к списку только во время их обновления(), и логически кажется, что список должен быть правильно заполнен в это время, но я, должно быть, ошибаюсь, потому что это явно не так. Вот моя последняя и лучшая попытка. Может ли кто-нибудь сказать мне, где я ошибаюсь? (Есть также логическое значение, гарантирующее добавление только новых коллайдеров, эта часть не имеет отношения к тому, о чем я спрашиваю... Во всяком случае, я так думаю...)
Код: Выделить всё
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class SimpleColliderSensor : MonoBehaviour {
public bool repeatsallowed;
public List sensedobjs;
bool clearlist;
public void init()
{
clearlist = false;
repeatsallowed = false;
sensedobjs = new List();
}
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);
}
}
Подробнее здесь: https://stackoverflow.com/questions/371 ... ents-issue