Ошибка порядка событий в скрипте Unity Simple 2D Collider SensorC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Ошибка порядка событий в скрипте Unity Simple 2D Collider Sensor

Сообщение Anonymous »

Изначально это был пост о «ответах единства» Unity, но модераторы не спешат его одобрять, поэтому я публикую его здесь, на гораздо более эффективном переполнении стека ура... так что имейте в виду, что это проблема движка Unity в скрипте C#... очевидно...

Поэтому я пытаюсь создать простой скрипт, чтобы отслеживать все 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);
}

}
Кажется, что «очистить список» можно просто установить в обновлении, и он будет работать так же, но я пробовал разные вещи, поэтому сейчас он находится в позднем обновлении. В любом случае, в списке часто отсутствуют коллайдеры, с которыми он должен сталкиваться, но несколько коллайдеров есть. И да, коллайдеры Sensor и Sensee настроены на столкновение в настройках проекта физики 2D. Наверное, мне следует упомянуть об этом. Я был бы признателен за любую информацию, которая может быть у кого-либо. Извините, что так многословно. Спасибо.

Подробнее здесь: https://stackoverflow.com/questions/371 ... ents-issue
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как я могу получить доступ к GameObject Collider в скрипте?
    Anonymous » » в форуме C#
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Как я могу получить доступ к GameObject Collider в скрипте?
    Anonymous » » в форуме C#
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Unity 6: Box Collider движется, но тело остается на месте
    Anonymous » » в форуме C#
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Unity 6: Box Collider движется, но тело остается на месте
    Anonymous » » в форуме C#
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Как Android Sensor HAL читает данные из ядра?
    Anonymous » » в форуме Android
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»