C# 使用统一的双关语同步文本

C# 使用统一的双关语同步文本,c#,unity3d,networking,photon,C#,Unity3d,Networking,Photon,我正在制作一个简单的单词生成器类型的游戏,其中一个玩家输入一个单词,另一个玩家输入一个以第一个玩家单词的最后一个字母开头的单词,我无法让文本显示在两个屏幕上。 如果我对文本进行硬编码,我就能够显示文本,比如: [PunRPC] public void DisplayWord () { MainWord.text = "Word"; } 但是我不能让它显示一个玩家刚刚在两个屏幕上输入的单词,我想这个代码应该是单词: [P

我正在制作一个简单的单词生成器类型的游戏,其中一个玩家输入一个单词,另一个玩家输入一个以第一个玩家单词的最后一个字母开头的单词,我无法让文本显示在两个屏幕上。 如果我对文本进行硬编码,我就能够显示文本,比如:

    [PunRPC]
    public void DisplayWord ()
    {
        MainWord.text = "Word";
    }
但是我不能让它显示一个玩家刚刚在两个屏幕上输入的单词,我想这个代码应该是单词:

    [PunRPC]
    public void DisplayWord ()
    {
        MainWord.text = UsedString;
        //UsedString is the word the (one of the) players just entered.
    }
任何帮助都将不胜感激,非常感谢

以下是输入单词的完整代码:

using System.Collections.Generic;
using UnityEngine.UI;
using UnityEngine;
using Photon.Pun;

public class DictionaryScript : MonoBehaviourPunCallbacks
{
    List<string> DictA = new List<string> () { 
    "a",
    "aa",
    "aaa",
    "aah",
    "aahed",
    "aahing",
    "aahs",
    "aal",
    "aalii",
    "aaliis",
    "aals",
    "aam",
    "aani",
    "aardvark",
    "aardvarks",
    "aardwolf",
    "aardwolves",
    "aargh",
    "aaron",
    "aaronic",
    "aaronical",
    "aaronite",
    "aaronitic",
    "aarrgh",
    "aarrghh",
    "aaru",
    "aas",
    "aasvogel",
    "aasvogels"};

    public List<string> DictAUsed = new List<string>() { };

    public string UsedString;
    public string NewString;

    public InputField inputField;
    public Text AddedWord;
    public Text MainWord;
    public Text TurnText;

    public Text ConnectedText;
    public Button StartButton;
    public Canvas OverlayCanvas;

    // Start is called before the first frame update
    public void Awake()
    {
        if (PhotonNetwork.IsMasterClient)
        {
            StartButton.enabled = true;
            OverlayCanvas.enabled = true;
        }
        else
        {
            StartButton.enabled = false;
            OverlayCanvas.enabled = true;
        }
    }

    void Start()
    {
        if (PhotonNetwork.InRoom)
        {
            ConnectedText.text = "Connected!";
        }
    }

    public void StartGame ()
    {
        photonView.RPC("CanvasDisplay", RpcTarget.All);
    }

    public void MyWord (string newWord)
    {
        string newString = newWord.ToLower();
        print(newString);

        if (DictA.Contains(newString) && newString[0] == MainWord.text[0] && !DictAUsed.Contains(newString))
        {
            
            UsedString = newString;
            Debug.Log(UsedString);
            photonView.RPC("OnInput", RpcTarget.All);
        }

        else
        {
            print("This word does not exist!");
            AddedWord.text = newString + " is not a valid word!";
        }

        inputField.text = "";
    }


    [PunRPC]
    public void OnInput ()
    {
        DictAUsed.Add(UsedString);
        AddedWord.text = "The word was: " + UsedString;
        photonView.RPC("DisplayWord", RpcTarget.All);
    }

    [PunRPC]
    public void DisplayWord ()
    {
        MainWord.text = UsedString;
        //UsedString is the word the (one of the) players just entered.
    }

    [PunRPC]
    public void CanvasDisplay()
    {
        //string Alphabet = "abcdefghijklmnopqrstuvwxyz";
        string Alphabet = "aaaaaaaaaaaaaaaaaaaaaaaaaa";
        MainWord.text = Alphabet[Random.Range(0, 25)].ToString();
        StartButton.enabled = false;
        OverlayCanvas.enabled = false;
    }
}
我现在只有以“aa”开头的单词,一旦我能让它工作起来,我将添加所有单词。

UsedString在您的网络中不同步=>在调用RPC时,每个播放器可能对UsedWorld有不同的值

为什么不将UsedWord作为参数传递给OnInput和DisplayWord呢

还有,为什么DisplayWord甚至是通过RPC调用的呢?由于OnInput始终与所有对象同步,您只需立即调用该方法即可

...
    photonView.RPC(nameof(OnInput), RpcTarget.All, UsedWord);
...

[PunRPC]
public void OnInput (string usedString)
{
    DictAUsed.Add(usedString);
    AddedWord.text = "The word was: " + usedString;

    // since this shall happen on any client as well
    // why even call it via RPC?
    // OnInput is called on ALL anyway so just do it right away
    DisplayWord(usedString);
}

public void DisplayWord (string usedString)
{
    MainWord.text = usedString;
}

非常感谢你!这似乎解决了问题。我尝试过类似的方法,但我不确定如何使用参数调用RPC方法,这就清除了它。