Unity使用PUN开发单词接龙游戏文本跨屏同步失败问题求助
问题原因
你遇到的同步失败问题核心是UsedString是客户端本地变量:
- 仅提交单词的玩家客户端会给
UsedString赋值,其余所有客户端的UsedString都没有对应的值 - RPC方法会在所有目标客户端本地执行,你直接读取本地
UsedString自然无法拿到其他玩家提交的单词 - 硬编码字符串是固定值,无论在哪个客户端执行都能读到相同内容,所以可以正常同步
修复方案
把需要同步的单词内容作为RPC参数传递,Photon会自动完成参数的跨客户端同步,修改代码如下:
- 修改
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 = ""; }
- 修改
OnInputRPC方法的签名,接收传递过来的单词参数
[PunRPC] public void OnInput (string receivedWord) { DictAUsed.Add(receivedWord); AddedWord.text = "The word was: " + receivedWord; // 继续把单词参数传递给下一个RPC photonView.RPC("DisplayWord", RpcTarget.All, receivedWord); }
- 修改
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
相关产品推荐
相关产品推荐

