私は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;
}
}