Не могу придумать подходящий способ реализации взаимодействия Unity3D
Моя система взаимодействия с объектами устроена так: Скрипт выпускает из камеры игрока луч определённой длины. Сталкиваясь с объектом, он проверяет его тег. Если тег - "Look", то скрипт луча вызовет находящийся на этом объекте скрипт, который запустит диалог. Здесь всё просто, ведь скрипт, запускающий диалог, всегда один и тот же. Т.е я всегда знаю название скрипта и могу воспользоваться GetComponent. Однако, если тег объекта - "Use", то скрипт луча вновь должен вызвать скрипт на объекте... но скриптов взаимодействия может быть неограниченное количество и я не могу точно знать, какой скрипт лежит на объекте.
Ответы (1 шт):
На объекте может скрипт, скажем, "IsUse_OpenDoor" или "IsUse_TakeItem". Эта система не может заранее знать, какой из этих скриптов будет висеть на интерактивном объекте, поэтому я не уверен, что стоит делать в такой ситуации.
Для таких случаев придумали как минимум интерфейсы и SOLID (а ещё есть шаблоны проектирования...)
Должен быть общий интерфейс, например interface IUsable
с методом Use
. Далее куча компонентов, которая должна реализовывать этот интерфейс. А при взятии компонента будет использоваться именно имя интерфейса общего hit.transform.GetComponent<IUsable>
и у него вызываться метод Use
Всё очень просто. Надо изучать основы программирования