Первоначально это сообщение о единстве ответов единства, но модераторы принимают их сладкое время, одобряя его, поэтому я размещаю его здесь, на более высоком переполнении стека cheer ... так что имейте в виду, что это проблема движка Unity в сценарии C# ... очевидно ...Unity Simple 2D Collider Sensor Script Order of Events Issue
Итак, я пытаюсь создать простой скрипт для отслеживания всех 2D-коллайдеров, касающихся определенного 2D триггерный коллайдер Он должен поддерживать общий открытый 2D-коллайдерный список всех 2D-коллайдеров, которые касались его 2D-коллайдера текущего кадра, к которому можно получить доступ с помощью других сценариев, чтобы делать другие вещи. Я пробовал несколько реализаций и обнаружил, что из-за порядка событий единство выполняет вещи, что это сложнее, чем кажется (для меня в любом случае). Другие скрипты, использующие список коллайдеров из скрипта сенсора, имеют доступ только к списку во время их обновления(), и логически выглядит, что список должен быть правильно заполнен в то время, но я должен ошибаться, потому что это явно не так. Вот моя последняя и лучшая попытка, может кто-нибудь сказать мне, где я ошибаюсь? (Там же BOOL для обеспечения добавляются только новые коллайдеров, что часть не имеет никакого отношения к тому, что я спрашиваю ... Я думаю, что так или иначе ...)
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-проекта физики. Вероятно, я должен упомянуть об этом. Я был бы признателен за любое понимание, которое может иметь любой. Извините, так много. Благодарю.