1

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

クライアントからサーバーコードにデータを送信するのは次のとおりです。

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

「ディジリム」とは「配列」を意味します。「シラ」は「秩序」を意味します。

実際には、サーバーとクライアントには独自の「注文」文字列があります。ゲームの開始時に、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;
    }


}
4

1 に答える 1