• Как сделать чтобы Player наносил урон Enemy?

    @Ente
    Unity developer
    Сделай себе два скрипта, первый будет для всех объектов в игре, которые обладают здоровьем, это могут быть персонажи (твой игрок, враги), предметы (двери, стены и т.п.)

    У этих объектов будет скрипт, назовем его Health.cs

    [SerializedField] private int hitpoints = 100;
    public Action<int, int> OnChange;
    
    public void Change(int amount)
    {
               hitpoints += amount;
               OnChange?.Invoke(hitpoints, amount);
    }


    В этом скрипте можно будет менять здоровье через функцию Change, причем в любую сторону, может проходить и урон, так и лечение, все зависит от знака в переданной переменной amount. Также скрипт бросает событие, что здоровье изменилось, чтобы другие скрипты могли подписаться и отреагировать. Например, скрипт, который рисует полосу здоровья или скрипт, который отвечает за смерть персонажа.

    Второй скрипт - Damage.cs. Он будет работать на триггерах в Unity, и когда объекты пересекаются между собой, то происходит вызов функции урона, например, если персонаж встанет в огонь, его затронет пуля или меч. Само собой нужно проставить им триггеры нужного размера, как объекту с уроном, так и тому, кому наносится урон + поставить правильно матрицу коллизий, чтобы OnTriggerEnter2D не затрагивал другие объекты, которые не являются его целью.

    [SerializedField] private int amount = -10;
    public Action<int> OnDamage;
    
    private void OnTriggerEnter2D(Collider2D collider)
    {
          collider.gameObject.GetComponent<Health>().Change(amount);
          OnDamage?.Invoke(amount);
    }
    Ответ написан
    21 комментарий