У меня здесь конкретный c вопрос, но за ним я не понимаю типы данных и то, что на самом деле представляют собой имена, теги и типы компонентов Unity.
Особый c вопрос таков: I хотите ( во время выполнения, НЕ через редактор ), чтобы иметь возможность создавать компоненты, которые могут обнаруживать коллизии и передавать информацию об обнаружении другим компонентам. Компоненты довольно простые - (невидимые) кубики разных размеров с прикрепленными Colliders
и isTrigger
установленными в каждом случае. Затем при обнаружении столкновения (OnTriggerEntry()
, OnTriggerExit()
) для передачи информации о столкновении другим компонентам, например: «Привет, X только что столкнулся с номером 6».
Изначально я хотел иметь возможность перехватить эти вызывает предположение, что это были события - но кажется, что это не события (я полагаю, MonoBehaviour
отменяет). Читая в другом месте, кажется, что единственный способ сделать это - динамически прикрепить скрипт (класс C#) после создания компонента.
Поскольку этих компонентов будет несколько, все с тем же прикрепленным скриптом (классом) мне затем нужно установить некоторые внутренние переменные класса, чтобы сообщить ему, что делать / с кем связываться при столкновении. Вот здесь и начинается путаница.
Мне кажется, что дизайнеры / разработчики Unity, пытаясь не обременять людей слишком большим количеством кода, склонны замалчивать такие детали или, по крайней мере, пытаться их объяснить. непрограммным способом. Понятно, но очень сбивает с толку кого-то вроде меня, мыслящего терминами программного обеспечения.
Класс в скрипте, который я прикрепляю, будет иметь имя (например, 'MyCollisionHandler
'), но это не экземпляр класса, это просто определение класса - или тип, если вы предпочитаете, например, 'class MyCollisionHandler { ...
'. Однако это должен быть случай (если он не содержит только статические c переменные и функции), который когда-то был прикреплен к компоненту, что существует его экземпляр.
Итак, проще говоря - как сделать Я получаю ссылку на указанный c экземпляр общего типа класса, который прикреплен к указанному c объекту обнаружения столкновений? Как только я получу это, я могу использовать методы, чтобы настроить его так, как мне нравится. Если я использую FindObjectOfType<MyCollisionHandler>()
, это не поможет, потому что их может быть множество, и он вернет только первый найденный. Хорошо, я могу использовать вместо этого FindObjectsOfType<MyCollisionHandler>()
и получить их массив - но какой именно?
Итак, это возвращается к моему общему непониманию структуры Unity - разнице между именами компонентов, тегами и т. Д. c - и как они соотносятся с определениями классов и экземплярами. В общем - как добраться до отдельных экземпляров объектов класса, прикрепленных к игровым объектам?