++基本
基本は以下のような感じ。Command等を使いサーバーでPrefabをInstantiateしNetworkServer.Spawnする。NetworkServer.SpawnはServerでしか使えない。サーバーでスポーンされたオブジェクトはクライアントにスポーンされる
[Command] void CmdSpawn(){ GameObject go = Instantiate(Prefab); NetworkServer.Spawn(go); }
---
++注意
Commandに渡せる引数の型が限定されている。例えば、Spawn()にPrefabを渡してそれをInstantiateする等は出来ない。SerializeFieldに登録するなど引数以外の手段でPrefabを用意する必要がある。
(これを忘れていて私はかなり詰まった)
Instantiate(Resources.Load("prefab_path",typeof(GameObject)),at,r) as GameObject;
のようにResourcesフォルダ以下にprefabをセットしLoadする手もある。
Commandに渡せる引数の型はc#の基本的な型とVector3、Quaternion、あとNetwork系の型をいくつかという感じ。自作の型はこれら許可されている型のみで構成された構造体なら渡せるっぽい。
ちなみにこれら以外の型を渡した場合、例外などは出ずnullになる。
http://motoyama.hateblo.jp/entry/unet-07だと
NetworkIdentity コンポーネントがアタッチされたGameObject
を渡せるらしいが、やってみたらnullになった。
++削除
NetworkServer.Destroy()を使う
++参考
UNET⑦ CommandとClientRPCでチャットを作る - MOTOYAMA BLOG
UNet - The thing you want to instantiate is null - Unity Answers