Как сделать хп врага?

Шалом. У меня появилась проблема.

  1. С помощью какого скрипта добавить урон от выстрелов? (и куда его добавить)
  2. Как сделать XP у врагов?.
  3. Как сделать хр у себя?

ПОЖАЛУЙСТА ОБЬЯСНЯЙТЕ ПОДРОБНО ИБО Я ТОЛЬКО НАЧАЛ Изучать.


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

Автор решения: JIOX

Хп храните как число от 0 до 100 например. Когда пуля пересекает персонажа отнимаете какое-то количество. У себя или у врагов неважно.

→ Ссылка
Автор решения: Арман

Знаете про Принципы SOLID? Это сокращение. Нам интересует буква S который гласит:

Для каждого класса должно быть определено единственное назначение. Все ресурсы, необходимые для его осуществления, должны быть инкапсулированы в этот класс и подчинены только этой задаче.


Следуя принципу:

  1. Создаём скрипт Data или Database. Там будут буквально ВСЕ данные об игре - количество врагов, имя главного героя, любимое блюдо главного героя, количество жизней и так далее. Там всё должно быть публичное чтобы менять данные с других скриптов.
  2. Каждый элемент должен иметь свой скрипт, который будет контролировать взаимодействие именно с ним. Это не значит создать 3141592 скриптов, надо всё это делать аккуратно.
  3. Вам крайне будут полезна информация о событиях и обработчиках в Unity чтобы весь код не вложить в Update

А теперь маленький пример:

  • Data.cs
public static class Player
{
    private static int _MinHealth = 0, _MaxHealth = 100, _Health = 100;
    public static int Health
    {
        get  
        {  
            return _Health;
        }  
        set  
        {  
            if(value < _MinHealth)
            {
                _Health = _MinHealth;
            }
            else if(value > _MaxHealth)
            {
                _Health = _MaxHealth;
            }
            else
            {
                _Health = value;
            }
        }  
    }
}
  • Player.cs
private void OnColliderEnter(Collider other)
{
    if(other.gameObject.tag == "Bullet")
    {
        Data.Player.Health -= Random.Range(20, 30);
        Destroy(other.gameObject);
        if(Data.Player.Health == 0)
        {
            Destroy(this);
            Debug.Log("Проигрыш.");
        }
    }
    else if(other.gameObject.tag == "Medkit")
    {
        Data.Player.Health += 25;
        Destroy(other.gameObject);
        Debug.Log("ОЗ восстановлено на 25 очков.");
    }
}
→ Ссылка