Menu
CoddyTech

アイテムの取得

CoddyのUnityジャーニー「物理演算とゲームプレイ」セクションの一部。レッスン 17/63。

アイテムは、それ自身のスクリプトを持つトリガーです。何かが入ると、アイテムはそれがプレイヤーかどうかを確認し、効果を与えて自身を破棄します。プレイヤーのスクリプトは結果を保持し、そのためのパブリックメソッドを提供します。このヘルスパックは、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

チャレンジ

簡単

プレイヤーはBlasterを持っています。ammo(開始時は4)とmaxAmmo(10)があります。矢印キーで移動し、Spaceで射撃します。どちらも記述済みです。弾薬箱で弾薬を補充できるようにしましょう。

  • Blaster.csに、publicメソッドint AddAmmo(int amount)を追加します。amountのうちmaxAmmoを超えない分だけ受け取り、新しい合計(例:Ammo: 7)をログに出力し、受け取った数を返します。
  • AmmoCrate.csでは、プレイヤーが弾薬箱に入ったとき、箱のamountをBlasterに渡し、受け取った分を差し引きます。空になった弾薬箱は削除します。弾薬が残っている箱は、残った弾薬を保持したまま、次に訪れるときまでその場に残します。

最初の弾薬箱には3、2つ目には5入っています。Playを押して右へ歩き、何発か撃ってから、2つ目の弾薬箱まで戻って歩き、Checkを押します。

自分で試してみよう

using UnityEngine;

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

    void OnTriggerEnter(Collider other)
    {
        // プレイヤーのBlasterは収まる分だけ受け取り、残りはクレートに残る。クレートは空になると消える
    }
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

物理演算とゲームプレイのすべてのレッスン