私は本質的に自分のプレハブシステムを作成しています。ゲームオブジェクトは、人間が読めるデータファイルによって定義されます。空のゲームオブジェクトを作成し、データファイルで定義されたコンポーネントを使用してロードし、準備してInstantiate()
呼び出しを待機したいと思います。ただし、使用GameObject go = new GameObject()
するたびに新しいゲームオブジェクトがシーンに追加されます。
Unityに組み込まれたプレハブを使用して、プレハブをGameObjectとしてロードできますが、シーンに追加されません。(下の例を参照)
この背後にある理論的根拠は、Unityプレハブをロードすることによって生成されたものと、カスタムプレハブシステムによって作成されたものと、GameObjectsを含む1つのリストが欲しいということです。これは実行時に行う必要があり、Unity Editorを使用することはできません(理想的にはエンドユーザーが独自のデータファイルを定義できるためです)。
Unityが自動的にインスタンス化しないで、新しいGameObjectを作成するにはどうすればよいですか?
たとえば、次のように電話をかけることができます。
Resources.LoadAll("PrefabsDirectory", typeof(GameObject))
また、呼び出しが行われたときにシーンに追加されていないGameObjectsのリストを取得します。基本的に、私はLoadAll
自分のプレハブ用のメソッドを作成しています。同様に、呼び出しが行われたときにGameObjectsをインスタンス化したくありません。
Destroy
ます。シーンから削除して解放し、使用できなくなります。
go.SetActive(false)
は、オブジェクトプールのようなものを作成するための最良の方法です。それはまさにあなたが望むものではありませんが、おそらくカスタムのインスタンス化のために後で複製される非アクティブなオブジェクトの小さなグループを持つことができます。