You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity使用PUN开发单词接龙游戏文本跨屏同步失败问题求助

问题原因

你遇到的同步失败问题核心是UsedString是客户端本地变量:

  • 仅提交单词的玩家客户端会给UsedString赋值,其余所有客户端的UsedString都没有对应的值
  • RPC方法会在所有目标客户端本地执行,你直接读取本地UsedString自然无法拿到其他玩家提交的单词
  • 硬编码字符串是固定值,无论在哪个客户端执行都能读到相同内容,所以可以正常同步
修复方案

把需要同步的单词内容作为RPC参数传递,Photon会自动完成参数的跨客户端同步,修改代码如下:

  1. 修改MyWord方法里的RPC调用,把输入的有效单词作为参数传递
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, UsedString);
    }
    else
    {
        print("This word does not exist!");
        AddedWord.text = newString + " is not a valid word!";
    }

    inputField.text = "";
}
  1. 修改OnInputRPC方法的签名,接收传递过来的单词参数
[PunRPC]
public void OnInput (string receivedWord)
{
    DictAUsed.Add(receivedWord);
    AddedWord.text = "The word was: " + receivedWord;
    // 继续把单词参数传递给下一个RPC
    photonView.RPC("DisplayWord", RpcTarget.All, receivedWord);
}
  1. 修改DisplayWordRPC方法的签名,接收参数后赋值
[PunRPC]
public void DisplayWord (string receivedWord)
{
    MainWord.text = receivedWord;
}
额外业务逻辑提示

你当前的单词校验规则写的是newString[0] == MainWord.text[0],也就是要求新单词首字母和当前显示单词的首字母一致,不符合单词接龙“新单词首字母和上一个单词尾字母一致”的规则,后续可以调整为newString[0] == MainWord.text[^1](C# 8.0+ 索引写法)或者newString[0] == MainWord.text[MainWord.text.Length - 1]兼容旧版本写法。


内容的提问来源于stack exchange,提问作者Jamal H.A

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 06:15:03