イラスト、モデリング、Unity、VR関連

unityとかblenderとかvr関連の作業メモ

UNET オブジェクトをスポーンする

++基本

基本は以下のような感じ。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