2017-04-26 17 views
1

私はUNetを使用しています。私には2人のゲーマーがいます。そのうちの1つはサーバーで、そのうち1つはクライアントです。 [Command]と[ClientRPC]でクライアントデータを取得できますが、サーバーからクライアントにデータを送信できません。どうすればこの問題を解決できますか? 注:サーバーはプレーヤーでもあります。Unity Unetを使用してサーバからクライアントにデータを送信する方法

[Command] 
    void CmdSendDizilimToServer(string dizilim){ 
     if (isLocalPlayer) 
      RpcSetPlayerDizilim(dizilim); 
     else 
      this.Sira = dizilim; 
    } 
[ClientRpc] 
    void RpcSetPlayerDizilim(string dizilim){ 
     this.Sira = dizilim; 
    } 

'Dizilim' 手段 '配列':ここで

は私のサーバーコードにクライアントからのデータを送信しています。 'Sira'は 'Order'を意味します。

実際には、サーバーとクライアントには独自の「注文」文字列があります。 1つのゲームオブジェクトを始めるゲームが生まれたとき。そして、私はサーバーがクライアント '注文'スクリプトを取得したい(私はこれを行うことができます)クライアントはサーバー '注文'文字列を取得する(私はそれを行うことはできません)。どうすればそれを解決できますか?

それは私の生まれた選手オブジェクトスクリプトです:私は私の質問を解決

using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 
using System.IO; 
using UnityEngine.Networking; 

public class MultiPlayerOyunKontrol : NetworkBehaviour { 
    CreateCharacter cc; 
    public string Sira; 
    GameObject EnemyObject; 
    [SyncVar (hook = "DizilimGetir")] 
    string OyuncuDizilimi; 
    // Use this for initialization 
    void Start() { 
     if (!isLocalPlayer) 
     { 
      this.gameObject.name = "Oyuncu2"; 
      OyuncuDizilimi = PlayerPrefs.GetString("Player Dizilim"); 
     } 
     else 
      gameObject.name = "Oyuncu1"; 


    } 

    // Update is called once per frame 
    void Update() { 

    } 


    public override void OnStartLocalPlayer(){ 
     //CmdSendNameToServer (PlayerPrefs.GetString("Player Name")); 
     CmdSendDizilimToServer (PlayerPrefs.GetString ("Player Dizilim")); 

    } 
    [Command] 
    void CmdDusmanAktif(){ 
     RpcAktiflestir(); 

    } 
    [Command] 
    void CmdSendNameToServer(string nameToSend) 
    { 
     RpcSetPlayerName(nameToSend); 
    } 
    [Command] 
    void CmdSendDizilimToServer(string dizilim){ 
     if (isLocalPlayer) 
      RpcSetPlayerDizilim(dizilim); 
     else 
      this.Sira = dizilim; 
    } 
    [ClientRpc] 
    void RpcAktiflestir(){ 
     EnemyObject = GameObject.FindGameObjectWithTag ("DusmanKarakterleri"); 
     EnemyObject.SetActive (true); 
    } 
    [ClientRpc] 
    void RpcSetPlayerName(string name) 
    { 
     this.gameObject.name = name; 
    } 
    [ClientRpc] 
    void RpcSetPlayerDizilim(string dizilim){ 
     this.Sira = dizilim; 
    } 
    void DizilimGetir(string dizilim) { 
     if(!isLocalPlayer) 
     this.Sira = dizilim; 
    } 


} 

答えて

0

。クライアントがトリガーされたOnStartLocalPlayer()を生成したが、サーバーのみのために発生した。サーバーはクライアント・データを読み取ることができますが、クライアントはその機能を起動できません。そして私はこのコードを書いています。

private void OnGUI() 
    { 
     if (isLocalPlayer) 
     { 
      if (GUI.Button(new Rect(0, 500, 100, 100), "Gonder")) 
      { 
       CmdSendDizilimToServer(PlayerPrefs.GetString("Player Dizilim")); 
      } 
     } 
    } 

その後、ボタンをクリックすると、クライアントはサーバーのデータを読み取ることができます。

+0

私は[この質問](https://stackoverflow.com/questions/48487614/unity-networking-how-can-i-sync-vars-on-all-clients)に掲載されている同様の問題があります。私はあなたの答えを見るが、私はどのように変数の状態をサーバーから読み取ることを達成していない。クライアントからサーバによって制御されるオブジェクトから値を取得する方法をより良く説明できますか?私の場合、私は何のためにも 'OnGUI()'を使いません。 – SebasSBM

関連する問題