前提・実現したいこと
UnityでPhotonを使用して変数の受け渡しをしたいです。
流れとしては下記のように考えています。
・オブジェクトA,B(同一のUnityChanprefab)をネットワークインスタンスで生成。
・AがBに攻撃し、Bにヒットした際にAからRPCを用いてBに変数を受け渡し。
・Bが変数を受け取り、ダメージアニメーションを実行。
やってみたこと
1、UnityChanのprefab(両方とも同じもの)をネットワークインスタンス化し2つアプリを実行
2、ネットワークインスタンス化したUnityChanからRPCを用いて自分以外のターゲットで関数を実行
該当のソースコード(1の部分)
C#
1public class SimplePun : MonoBehaviourPunCallbacks 2{ 3 // Start is called before the first frame update 4 void Start() 5 { 6 PhotonNetwork.ConnectUsingSettings(); 7 } 8 void OnGUI() 9 { 10 GUILayout.Label(PhotonNetwork.NetworkClientState.ToString()); 11 } 12 13 public override void OnConnectedToMaster() 14 { 15 PhotonNetwork.JoinRoom("Room"); 16 } 17 18 public override void OnJoinedRoom() 19 { 20 GameObject unityChan = PhotonNetwork.Instantiate("unitychan", Vector3.zero, Quaternion.identity, 0); 21 //unityChan.GetComponent<UnityChanController>().enabled = true; 22 //unityChan.GetComponent<Animator>().enabled = true; 23 24 } 25 public override void OnJoinRoomFailed(short returnCode, string message) 26 { 27 PhotonNetwork.CreateRoom("Room"); 28 } 29}
該当のソースコード(2の部分)
C#
1 2private bool damageAnimFlag; 3void Start () { 4 damageAnimFlag = false; 5 } 6void Update() 7 { 8 if (photonView.IsMine) 9 { 10 Debug.Log(damageAnimFlag);//RPCのSetDamageAnimationが実行されてもずっとfalseのままになってしまう。 11 if (damageAnimFlag == true)//damageAnimFlagにtrueが入ったら(RPCで値を渡したい) 12 { 13 playDamageAnimation();//ダメージを受けるアニメーションを実行 14 damageAnimFlag = false; 15 } 16 } 17 18void OnTriggerEnter(Collider other) 19 { 20 if (photonView.IsMine) 21 { 22 if (animator.GetBool("isAttack") == true && other.CompareTag("Player"))//プレイヤーの攻撃が他のプレイヤーにあったった時にDamageアニメーションを実行させるために値を送信。 23 { 24 photonView.RPC("SetDamageAnimation", RpcTarget.Others, true); 25 this.setCapsuleCollider(false); 26 } 27 } 28 } 29 30 [PunRPC] 31 void SetDamageAnimation(bool flag) 32 { 33 //Debug.Log("Execute RPC"); 34 this.damageAnimFlag = flag; 35 //Debug.Log(damageAnimFlag);ここにはtrueがはいっている 36 }
### 結果
他のインスタンスの変数に値がうまく入らない。
SetDamageAnimationが実行されてdamageAnimFlagにはtrueが入っているのだが、update関数内のdamageAnimFlagにはtrueが入らず
falseのままダメージアニメーションが実行されない。
どなたか原因を教えていただけないでしょうか。
また、RPCを用いて他オブジェクトに変数を渡したい場合はどのようにすれば良いのでしょうか。
今回RPCを使用してダメージアニメーションを実行させようとしておりますが、
通常はどのように実装するのが良いかよければ教えていただけないでしょうか。
(足りない情報、必要な情報がございましたら補足いたしますのでよろしくお願いいたします。)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/02/11 03:02 編集