Photon Fusion最新版本如何设置玩家昵称?原NickName属性已移除
解决Photon Fusion最新版本中玩家用户名/昵称设置问题
方法一:用NetworkObject的同步字段存储(推荐,支持实时同步)
给玩家控制的NetworkObject添加带[Networked]特性的字符串字段,该字段会自动在所有客户端同步:
using Fusion; public class PlayerNetworkObject : NetworkBehaviour { [Networked(onChanged: nameof(OnPlayerNameUpdated))] public string PlayerName { get; set; } // 昵称变更时自动触发UI更新 private void OnPlayerNameUpdated() { // 示例:更新本地UI显示 GetComponentInChildren<TMPro.TextMeshProUGUI>().text = PlayerName; } }
玩家加入游戏并关联NetworkObject后,直接设置该字段即可:
// 在玩家加入回调(如OnPlayerJoined)内执行 var playerNetObj = Runner.Spawn(playerPrefab, spawnPos, spawnRot, playerRef); playerNetObj.GetComponent<PlayerNetworkObject>().PlayerName = "你的自定义昵称";
其他客户端会自动同步这个值,直接读取PlayerName就能显示用户名。
方法二:通过PlayerRef的自定义数据存储(适合仅初始设置的场景)
如果不需要实时更新昵称,可利用PlayerRef的自定义数据存储:
// 设置昵称(玩家加入时执行) public void OnPlayerJoined(PlayerRef playerRef) { var customData = new Dictionary<string, object>(); customData["PlayerName"] = "玩家昵称"; Runner.SetPlayerCustomData(playerRef, customData); } // 获取指定玩家的昵称 public string GetPlayerNickname(PlayerRef playerRef) { if (Runner.TryGetPlayerCustomData(playerRef, out var data) && data is Dictionary<string, object> customData) { return customData["PlayerName"] as string ?? "默认玩家"; } return "默认玩家"; }
方法三:通过SessionInfo传递初始昵称
在启动游戏/加入房间时,将昵称放入StartGameArgs的自定义数据中:
var startGameArgs = new StartGameArgs { SessionName = "MyGameRoom", PlayerCount = 4, CustomLobbyData = new Dictionary<string, string> { {"PlayerName", "我的昵称"} } }; Runner.StartGame(startGameArgs);
其他玩家可通过Runner.SessionInfo.CustomLobbyData获取数据,但需要自行维护玩家与昵称的对应关系。
内容的提问来源于stack exchange,提问作者Prakyath
相关产品推荐
相关产品推荐

