【Unity】プレイヤーが消えたら復活させる方法(リプレイ機能)

Unity

スポンサーリンク

ゲームを作る上で、リプレイ機能は必須とも言えますよね。

今回は、プレイヤーが障害物などに当たって消えた場合、初めからやり直す(リプレイ)方法を紹介します。

完成動作

シーンに各GameObjectを配置

1.以下のような感じでGameObjectを配置
赤いボール(プレイヤーとして扱う)の名前は今回は"PlayerSphere"とする。
青いシリンダーはプレイヤーが当たったらプレイヤーを消すGameObject(Cylinder)

プレイヤーを消すスクリプトを作成

1.DestroyPlayer.csという名前のスクリプトを作成して、以下のコードを記載する。

using UnityEngine;

public class DestroyPlayer : MonoBehaviour
{
	/// <summary>
	/// 衝突した時
	/// </summary>
	/// <param name="collision"></param>
	private void OnCollisionEnter(Collision collision)
	{
		// 衝突した相手にPlayerタグが付いているとき
		if (collision.gameObject.tag == "Player")
		{
			// 当たった相手を1秒後に削除
			Destroy(collision.gameObject, 1.0f);
		}
	}
}

スクリプトをプレイヤーを消させたいGameObjectにアタッチ

1.DestroyPlayer.csをプレイヤーを消させたいGameObject(青いCylinderオブジェクト)にアタッチする。

プレイヤーに各種設定

1.プレイヤー(PlayerSphereオブジェクト)にRigidBodyをアタッチ

2.プレイヤー(PlayerSphereオブジェクト)のタグを"Player"にする

プレイヤーをプレハブ化

1.プレイヤー(PlayerSphereオブジェクト)をプレハブ化する。
 ※プレイヤーをプレハブ化することで、プレイヤーが消えても再生させることができる。

1-1.HierarchyタブのPlayerSphereをクリックしたまま、Assetsにカーソルを持っていき、そこで離す。

1-2.HierarchyタブのPlayerSphereの文字の色が青くなり、AssetsにPlayerSphereのプレハブができていることを確認

プレイヤーを再生(リプレイ)させるスクリプトを作成

1.ReplayPlayer.csという名前のスクリプトを作成して、以下のコードを記載する。

using UnityEngine;

public class ReplayPlayer : MonoBehaviour
{
    [SerializeField]
    [Tooltip("プレイヤーのプレハブを設定")]
    private GameObject playerPrefab;

    // Update is called once per frame
    void Update()
    {
        // 設定したplayerPrefabと同じ名前(今回は"PlayerSphere")のGameObjectを探して取得
        GameObject playerObj = GameObject.Find(playerPrefab.name);

        // playerObjが存在していない場合
        if (playerObj == null)
        {
            // playerPrefabから新しくGameObjectを作成
            GameObject newPlayerObj = Instantiate(playerPrefab);

            // 新しく作成したGameObjectの名前を再設定(今回は"PlayerSphere"となる)
            newPlayerObj.name = playerPrefab.name;
            // ※ここで名前を再設定しない場合、自動で決まる名前は、"PlayerSphere(Clone)"となるため
            //   13行目で探している"PlayerSphere"が永遠に見つからないことになり、playerが無限に生産される
            //   どういうことかは、22行目をコメントアウトしてゲームを実行すればわかります。
        }
    }
}

空のGameObjectを作成

1.Hierarchyタブで右クリックをして、"Create Empty"を選択

2."GameObject"という名前のGameObjectが作成されるのを確認

スクリプトを空のGameObjectにアタッチ

1.ReplayPlayer.csを空のGameObjectにアタッチ

空のGameObjectのReplay PlayerコンポーネントのPlayer Prefabにプレイヤープレハブを設定

1.空のGameObjectのReplay PlayerコンポーネントのPlayer Prefabにプレイヤープレハブ(Asset内の"PlayerSphere")を設定

完成

これでプレイヤーがプレイヤーを消すGameObjectに当たってプレイヤーが消えても、また再生(リプレイ)するようになりました!

Unity

Posted by ton