【Unity】別シーンへのゲームオブジェクトの引き継ぎ
Captulionで捕獲した敵は次のステージ(別シーン)に連れて行くことができます。別シーンにゲームオブジェクトを表示させる際に行った内容をまとめてみました。
ゲームオブジェクトを別シーンでも継続して使うには
Unityで現在のシーンにあるゲームオブジェクトを別シーンに継続的表示するためには、Object.DontDestroyOnLoadを使用することで実現ができます。
DontDestroyOnLoad用のオブジェクトを作成する
捕獲直後の敵機を継続用の空のゲームオブジェクトの子オブジェクトとして設置後、DontDestroyOnLoadをそのオブジェクトに対して使うことで、別シーンでも継続してゲームオブジェクトを表示することが可能です。
Captulionの場合は、KeepObjectという名前の空のゲームオブジェクトを設置して、
敵機のスクリプトの捕獲部分で以下のようなスクリプトの記述を行います。
GameObject keep = GameObject.Find ("KeepObject");
if (keep) {
gameObject.transform.parent = keep.transform;
}
KeepObjectには以下のようなスクリプトを設定すると、次のシーンでも捕獲した敵機を継続して表示することができました。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class KeepObject : MonoBehaviour {
// 現在存在しているオブジェクト実体の記憶領域
static KeepObject _instance = null;
// オブジェクト実体の参照(初期参照時、実体の登録も行う)
static KeepObject instance {
get{ return _instance ?? (_instance = FindObjectOfType<KeepObject>()); }
}
void Awake() {
// ※オブジェクトが重複していたらここで破棄される
// 自身がインスタンスでなければ自滅
if (this != instance) {
Destroy(gameObject);
return;
}
// 以降破棄しない
DontDestroyOnLoad(gameObject);
}
void OnDestroy() {
// ※破棄時に、登録した実体の解除を行なっている
// 自身がインスタンスなら登録を解除
if (this == instance) _instance = null;
}
public void DeleteChildlen() {
foreach (Transform child in transform) {
Destroy (child.gameObject);
}
}
}
実際に再生して見ると、こちらの動画のように別シーンへ遷移してもゲームオブジェクト(捕獲した敵機)を保持することができるようになります。