###前提・実現したいこと
unityでマルチプレイヤー用に関数を呼んでクライアント間でデータをやりとりしたい。
###発生している問題・エラーメッセージ
ホストからクライアントの関数を呼ぶことはできるが、クライアントからホストの関数を呼ぶことが出来ない。
###該当のソースコード
動作確認のため、NetworkBehaviourを継承した以下のようなソースを記述しています。
[SyncVar (hook = "HookChangeName")]
private string name = "";
public void ChangeName(){
Debug.Log("call ChangeName");
string create_name = "";
for(int i = 1; i <= 4;i++) create_name += Random.Range(0,10);
name = create_name;
name_label.text = name + ":ChangeName";
CmdChangeName(name);
}
private void HookChangeName(string set_name){
Debug.Log("call HookChangeName");
name = set_name;
name_label.text = name + ":HookChangeName";
CmdChangeName(name);
}
[Command]
private void CmdChangeName(string set_name){
Debug.Log("call CmdChangeName");
name = set_name;
name_label.text = name + ":CmdChangeName";
}
###試したこと
上記コードは動作確認用に「ChangeName」関数を呼ぶと適当な名前を生成し、それの表示と名前を各クライアントで共有する、というものです。
このコードで、ホストで「ChangeName」関数を実行すると、「ChangeName」、「HookChangeName」、「CmdChangeName」、「CmdChangeName」の順に呼ばれ、
クライアントでは「HookChangeName」のみが呼ばれ、確かにホスト側で生成した名前が表示されます。
しかし、クライアントで「ChangeName」関数を実行しても、
name変数が変更されたことによる「HookChangeName」も、明示的に実行している「CmdChangeName」も呼ばれず、
ホスト側ではいずれの関数も呼ばれません。従って、クライアントで生成した名前をホスト側に渡すことが出来ません。
クライアントからホストの関数を呼ぶにはどうすればよいのでしょうか?
クライアント間の通信には「Network Manager HUD」を使用し、
ホスト側では「Enable Match Maker」から「Create Internet Match」を、クライアント側では「Find Internet Match」で作成したマッチに接続しています。
###補足情報
unityのverは5.5.0f3 personalです。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。