Единство — два игрока-человека, как определить, какой игрок нанес наибольший урон ИИ-врагу?

#unity3d

#unity3d

Вопрос:

Я искренне извиняюсь за то, что у меня нет кода, который я мог бы предложить здесь.

Я совершенно сбит с толку, я все еще новичок в программировании и пытаюсь выполнить простое упражнение, чтобы проверить идею игровой механики с помощью прототипа.

Я приведу простой пример:

  • 2 игрока против 2 Врага ИИ
  • оба вражеских ии имеют по 400 очков здоровья
  • у обоих игроков-людей есть оружие, которое наносит 20 очков урона за нажатие на спусковой крючок.
  • оба врага мертвы после быстрой битвы.

Я хочу вознаградить игрока, который нанес врагам наибольший урон.

Вот чего я пытаюсь достичь: как мне определить, какой игрок нанес наибольший урон вражескому ИИ?

Любая помощь была бы признательна, как только я смогу понять концепцию того, как это сделать, я смогу двигаться дальше в том, как это кодировать.

Спасибо.

Комментарии:

1. Если для вас важно, кто нанес ущерб чему-то, то вам нужно как-то отслеживать это. У вас может быть Список или словарь по каждому врагу, чтобы отслеживать поступающий урон, а затем запрашивать его, чтобы найти, кто сделал больше всего, когда они умрут.

2. Не было бы проще, если бы функция/объект, который наносит урон, сообщал игроку, какой ущерб они нанесли, и позволял игроку хранить его?

3. Используете ли вы мультиплеер или просто игру для двоих на консоли

4. Спасибо вам, ребята, я изучу оба пути.

5. @JustARandomWibuuuu это будет многопользовательский онлайн

Ответ №1:

Вопрос слишком общий — есть много способов сделать это. Давайте придерживаться ООП: давайте создадим объект «урон» (скрипт, класс), который содержит следующую информацию: сумма урона, идентификатор игрока. Когда игрок нажимает на триггер, давайте предположим, что сборная пуля создана. На нем есть скрипт (MonoBehaviour), называемый «DamageContainer». Когда вы создаете экземпляр пули, вы также создаете свой объект «повреждение», устанавливаете правильные значения и помещаете его в «контейнер повреждений»пули. Затем, когда пуля сталкивается с врагом, вы получаете эту информацию от пули. Сумма урона, которую вы используете, чтобы уменьшить здоровье врага. Для подсчета урона вам понадобится сам счетчик. Это может быть статический класс, объект с возможностью написания сценария, синглтон или что-то еще. Давайте использовать статический класс, что не является лучшей практикой, но простейшей. Вам нужен простой статический класс, называемый «DamageCounter» и содержащий два общедоступных поля: Player1Damage и Player2Damage. Когда пуля сталкивается с врагом, вам нужно добавить нанесенный урон в соответствующее поле «Счетчика повреждений», в зависимости от урона.Игровое поле.

И не забывайте сбрасывать статические значения классов в начале каждого боя.

Комментарии:

1. @Михалио Хаджинов Вау! Спасибо! Это очень глубоко, я понимаю, о чем вы говорите, вы четко проиллюстрировали свою теорию. Пожалуйста, позвольте мне резюмировать: По сути, идентификатор игрока (с суммами ущерба) этого скрипта, который прикрепляется к каждому экземпляру пули, с помощью объекта с надписью damagecontainer (это создает данные игрока после подтверждения попадания. Затем у нас есть счетчик для каждого игрока, когда враг умирает, счетчик показывает общие значения урона каждого игрока. Блестящий сэр! Спасибо. Это ОЧЕНЬ помогает.

2. Рад помочь. Идея ООП заключается в том, что все является объектами, и вы можете инкапсулировать любые данные внутри объекта. Итак, урон — это объект, содержащий данные (идентификатор стрелка, сумма урона, тип урона-лед, огонь и т.д.), и пуля просто переносит этот объект от стрелка к цели.

3. Кроме того, как я сейчас думаю, не стоит использовать статический класс — лучше реализовать счетчик внутри самого врага — если у вас есть только один враг. Или, если врагов много, вам лучше создать счетчик как нестатический и дать ссылку на него каждому врагу. Объект, написанный сценарием, хорошо подходит для этого, вы можете просто назначить его сборному объекту противника.

4. Спасибо, я определенно последую вашему совету — разместите счетчик внутри врага.

5. @Михалио Хаджинов Я много слышал о теории ООП, но большая ее часть была разрозненной или мое понимание ее было разрозненным, и я не мог полностью уловить нюансы. Однако, когда вы показываете мне, как использовать игровые объекты для того, что обычно находится в неосязаемой физической сфере, теперь это имеет гораздо больше смысла. Я действительно ценю вас, ваш ответ привел к изменению парадигмы в моем мыслительном процессе. Счастливых вам праздников. Еще раз спасибо вам!