Menu
CoddyTech

アイテムの取得

CoddyのUnityジャーニー「物理演算とゲームプレイ」セクションの一部。レッスン 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参照を設定する必要はなく、レベルに50個置くこともできます。別のスクリプトから呼び出されるため、Healはpublicです。また、上限の100は、hpを所有する唯一の場所であるHealthに設定されています。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プレイグラウンド