Menu
CoddyTech

Подбираемые предметы

Часть раздела Физика и игровой процесс путешествия по Unity на Coddy. Урок 17 из 71.

Подбираемый предмет — это триггер со собственным скриптом. Когда в него что-то входит, предмет проверяет, что это игрок, передаёт ему свой эффект и уничтожает себя. Скрипт игрока хранит результат и предоставляет для этого публичный метод. Этот аптечный набор лечит любой объект, у которого есть скрипт Health:

// HealthPack.cs
public int amount = 25;

void OnTriggerEnter(Collider other)
{
    if (other.TryGetComponent(out Health health) && health.hp < 100)
    {
        health.Heal(amount);
        Destroy(gameObject);
    }
}
// Health.cs, на игроке
public int hp = 50;

public void Heal(int amount)
{
    hp = Mathf.Min(hp + amount, 100);
    Debug.Log("HP: " + hp);
}

other.TryGetComponent(out Health health) возвращает false, если в аптечный набор врезается скользящий ящик, поэтому подобрать его может только объект со скриптом Health, а игрок с полным запасом здоровья оставляет набор на потом. Набор находит игрока через other, поэтому для него не нужна ссылка из Inspector, и на уровне может быть пятьдесят таких наборов. Heal — public, потому что его вызывает другой скрипт, а ограничение в 100 задано в Health — единственном месте, где хранится hp. Destroy(gameObject) удаляет аптечный набор; Destroy(other.gameObject) удалил бы игрока.

challenge icon

Задание

Легко

Сделай так, чтобы ящики с патронами пополняли боезапас бластера (ammo 4, maxAmmo 10).

  1. В Blaster.cs добавь public int AddAmmo(int amount): int taken = Mathf.Min(amount, maxAmmo - ammo);, прибавь это значение к ammo, выведи в лог "Ammo: " + ammo и верни taken.
  2. В AmmoCrate.cs, если other.TryGetComponent(out Blaster blaster), вызови blaster.AddAmmo(amount); и Destroy(gameObject);.

Нажми «Играть» и иди направо: в Console появится Ammo: 7, а затем Ammo: 10. Затем нажми «Проверить».

Попробуйте сами

using UnityEngine;

public class AmmoCrate : MonoBehaviour
{
    public int amount = 3;

    void OnTriggerEnter(Collider other)
    {
        // Blaster игрока забирает боеприпасы, а ящик исчезает
    }
}

Все уроки раздела Физика и игровой процесс

Потренируйтесь самостоятельно: Песочница Unity