Не могу придумать подходящий способ реализации взаимодействия Unity3D

введите сюда описание изображенияМоя система взаимодействия с объектами устроена так: Скрипт выпускает из камеры игрока луч определённой длины. Сталкиваясь с объектом, он проверяет его тег. Если тег - "Look", то скрипт луча вызовет находящийся на этом объекте скрипт, который запустит диалог. Здесь всё просто, ведь скрипт, запускающий диалог, всегда один и тот же. Т.е я всегда знаю название скрипта и могу воспользоваться GetComponent. Однако, если тег объекта - "Use", то скрипт луча вновь должен вызвать скрипт на объекте... но скриптов взаимодействия может быть неограниченное количество и я не могу точно знать, какой скрипт лежит на объекте.


Ответы (1 шт):

Автор решения: Алексей Шиманский

На объекте может скрипт, скажем, "IsUse_OpenDoor" или "IsUse_TakeItem". Эта система не может заранее знать, какой из этих скриптов будет висеть на интерактивном объекте, поэтому я не уверен, что стоит делать в такой ситуации.

Для таких случаев придумали как минимум интерфейсы и SOLID (а ещё есть шаблоны проектирования...)

Должен быть общий интерфейс, например interface IUsable с методом Use. Далее куча компонентов, которая должна реализовывать этот интерфейс. А при взятии компонента будет использоваться именно имя интерфейса общего hit.transform.GetComponent<IUsable> и у него вызываться метод Use

Всё очень просто. Надо изучать основы программирования

→ Ссылка