0

Unityネットワーキングで自分の方向性を理解するための簡単なLANゲームを作成しています。プレーヤーがグリッド内の正方形をクリックすると、青色に変わるだけです。私の問題は、LAN ホストが四角形をクリックすると、ローカルでのみ更新され、クライアントは更新されないことです。クライアントが四角をクリックすると、ローカルで更新され、LAN ホストが更新されますが、他のクライアントは更新されません。すべてのグリッド ピースにネットワーク ID が関連付けられています

何か案は?

コードは次のとおりです。

     using UnityEngine;
     using System.Collections;
     using UnityEngine.Networking;

     public class Player_Paint : NetworkBehaviour {

         [SyncVar]GameObject syncGridPiece;
         GameObject gridPiece;

         void Update () {
             Paint();
             TransmitGridColours();
         }

         void Paint(){
             if(isLocalPlayer && Input.GetMouseButtonDown(0)){
                 RaycastHit2D hit = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Input.mousePosition), Vector2.zero);
                 if(hit.collider != null){
                     print(GameObject.Find (hit.transform.name));
                     gridPiece = hit.collider.transform.gameObject;
                     gridPiece.GetComponent<SpriteRenderer>().color = Color.blue;
                 }
             }
         }
         [Command]
         void CmdProvideGridColourToServer(GameObject gridPiece){
             if(gridPiece){
                 syncGridPiece = gridPiece;
                 syncGridPiece.GetComponent<SpriteRenderer>().color = Color.blue;
             }

         }
         [Client]
         void TransmitGridColours(){
             if(isLocalPlayer){
                 CmdProvideGridColourToServer(gridPiece);
             }
         }
     }
4

2 に答える 2

2

syncGridPiece syncvar にフックを追加する必要があります。コマンドで行ったように、フック関数で色を青に設定します。フックはリモート プレイヤーで呼び出されます。

また、GameOject を syncvar として使用できるとは思いません。IDを送信するだけです。

[SyncVar(hook=UpdateGridPiece)] int syncGridPiece

おそらく、RPC はあなたがやりたいことにもっと適応するでしょう。私が理解していることから、syncGridPiece は任意の正方形である可能性があるため、すべての更新を同じメッセージで渡すべきではありません。X 人のプレイヤーが X マスをクリックしたことを RPC で送信するだけです。

ダメージの例を見てください: https://docs.unity3d.com/Manual/UNetActions.html

于 2016-11-17T16:50:15.910 に答える