Я строю простую сверхуную румяную игру, используя единство. У меня есть опыт разработки, но я новичок как в рамках единства, так и в C#. Есть ли чистый и изящный способ взаимодействия с объектами игроков с другими различными типами объектов в сцене?Единство, взаимодействующее с объектами
Например, сцена была бы полна стен, врагов и других объектов, которые блокируют путь, и игрок может взаимодействовать, пытаясь двигаться в их направлении. Стоя рядом с сундуком и двигаясь в его направлении, он не перемещал игрока, а открывал сундук. Если вы двигаетесь в стену, это повредит его и т. Д.
В настоящее время я использую raycast2d, чтобы получить объект, блокирующий путь, но не могу найти решение, как с ним взаимодействовать, не имея чтобы проверить, какой тип объекта он (стена, есть сундук и т. д.). Я создал интерфейс, который реализует все взаимодействующие объекты с помощью метода взаимодействия(), но разные типы объектов требуют различной информации. Стена потребует суммы урона, который он должен принять (зависит от статистики игрока, которая находится в классе игрока), сундук не принимает ничего. Поэтому всем им сложно реализовать один и тот же интерфейс. Если стена спросит у игрока, что у него есть, это также плохая практика программирования.
Я нашел аналогичный вопрос об этом, опубликованном некоторое время назад on stackowerflow. Это предполагает использование шаблона наблюдателя, но я не могу представить, чтобы каждый объект на сцену был подписан на событие движения игрока, и после каждого хода проверки погоды он попал или нет.
Есть ли стандартное решение для такого взаимодействия? Тот, который будет слабо связан, чист и будет следовать хорошей практике программирования?
Ищите слои и коллайдеры. – Aybe
как бы они помогли? Я мог бы не понимать слои и коллайдеры полностью. Я знаю, что они используются, чтобы указать, что объекты на одном слое могут столкнуться. Но как сундук, так и стена будут на том же блоке, что и игрок, я хочу, чтобы они реагировали на взаимодействие по-разному, не проверяя, есть ли это стена или что-то еще. –