UnityのC#スクリプトでオブジェクトを生成する方法と削除する方法、ついでにシーン移動してもオブジェクトが削除されないようにする方法も紹介します。
生成方法
基本的な書き方は次の通りです。
Instantiate(生成したいオブジェクトやプレハブ);
// フルで書くと次の通り。
UnityEngine.Object.Instantiate(生成したいオブジェクトやプレハブ);
オプションを駆使することで特定のオブジェクトの子にしたり、生成時に位置や回転を指定できます。
// 第2引数の子要素として生成する。
Instantiate(生成したいオブジェクトやプレハブ, 親要素のTransform);
// 生成時に位置や回転を指定する。
Instantiate(オブジェクトやプレハブ, new Vector3(i * 2.0F, 0, 0), Quaternion.identity);
Instantiate(オブジェクトやプレハブ, transform.position, transform.rotation);
Objectについてはリファレンスを参照。
Object - Unity スクリプトリファレンス
Unity が参照できるすべてのオブジェクトの基本クラスです。
削除方法
基本的な書き方は次の通りです。
Destroy(GameObject);
// フルで書くと次の通り。
UnityEngine.Object.Destroy(GameObject);
指定できるオプションとしては、削除されるまでの遅延秒数があります。
Destroy(GameObject, 秒数);
シーンを移動しても削除されないようにする
任意の場所でDontDestroyOnLoad()を使います。現在進行中の私のプロジェクトでは、レースで受けたダメージをリザルト画面で表示するために使いました。あと、YouTubeチャンネルを登録していただけると嬉しいです。
DontDestroyOnLoad(GameObject);
// 削除したい場所でDestroy()をつかう。
私の場合、レース結果を記載するためのクラスにstatic変数を用意しており、この変数にプレーヤーの車(GameObject)を代入しました。このオブジェクトはリザルト画面に移動する直前にDontDestroyOnLoad()で処理します。いらなくなったタイミングでDestroy()を実行するのを忘れないでください。
[ResultInfo.cs]
public class ResultInfo : MonoBehaviour
{
public static GameObject PlayerVehicle;
…以下略
// レースの初期化時、PlayerVehicleにプレイヤーのGameObjectを代入する。
[レースシーンの初期化スクリプト]
ResultInfo.PlayerVehicle = vehicle.gameObject;
// レース終了時にオブジェクトが削除されないよう設定しておく。
[ゲーム終了時に実行されるスクリプト]
DontDestroyOnLoad(ResultInfo.PlayerVehicle);
// リザルト画面が終了する際、プレイヤーも削除する。
[リザルト画面で実行されるスクリプト]
private void OnDestroy()
{
Destroy(ResultInfo.PlayerVehicle);
}