1

我正在使用 UNet。我在现场有两个游戏玩家。其中之一是服务器,其中之一是客户端。我可以使用 [Command] 和 [ClientRPC] 获取客户端数据,但我无法将数据从服务器发送到客户端,我该如何解决这个问题?注意:服务器也是玩家。

这是我从客户端向服务器发送数据的代码:

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

“地子林”的意思是“序列”。“Sira”的意思是“命令”。

实际上在服务器和客户端都有自己的“订单”字符串。游戏开始时产生一个游戏对象。我希望服务器获取客户端“订单”脚本(我可以这样做)客户端获取服务器“订单”字符串(我不能这样做)。我该如何解决?

这是我生成的玩家对象脚本:

    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

0

我解决了我的问题。当客户端产生 OnStartLocalPlayer() 时触发但仅针对服务器。服务器可以读取客户端数据,但客户端不能触发该功能。我写了这段代码。

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

之后,当我单击按钮时,客户端可以读取服务器数据。

于 2017-04-26T08:16:18.020 回答