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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 00:52:09