Unity PUN2でネットワークオブジェクトを子オブジェクトとして生成する方法

C言語関連

UnityでPUN2を使ってネットワークオブジェクトを生成する場合、特定の親オブジェクトの下に生成したいケースがあります。この記事では、子オブジェクトとしてのインスタンス生成方法を解説します。

1. 親オブジェクトの取得

まず、生成先となる親オブジェクトAのTransformを取得します。例えば、空の子オブジェクトを親に設定する場合は以下のように取得できます。

Transform parentTransform = networkObjectA.transform.Find("EmptyChild");

2. PhotonNetwork.Instantiateで生成

PUN2でオブジェクトBを生成する際にはPhotonNetwork.Instantiateを使用します。このとき、生成後に親を設定することが可能です。

GameObject objB = PhotonNetwork.Instantiate("PrefabB", Vector3.zero, Quaternion.identity);
objB.transform.SetParent(parentTransform, false);

SetParentの第二引数にfalseを渡すことで、親のTransformの位置やスケールを維持したまま子として設定できます。

3. 注意点

ネットワーク上で生成されたオブジェクトは各クライアントで同期されるため、親子関係を設定する場合も全クライアントで正しく同期されるように注意する必要があります。

オブジェクトの同期が必要ない場合は、ローカルでSetParentするだけでも構いませんが、同期させたい場合はカスタムRPCやNetworked Transformを利用するのが良いでしょう。

まとめ

PUN2でオブジェクトBをオブジェクトAの子(空オブジェクトの子)として生成するには、まず親Transformを取得し、PhotonNetwork.Instantiateで生成後にSetParentで親に設定します。同期の必要性に応じてRPCやNetworked Transformも活用しましょう。

コメント

タイトルとURLをコピーしました