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

Unity使用Photon PUN开发时如何在场景中显示已加入的房间名称?

Photon PUN 加入房间后显示房间名实现方案

1. 前置准备

  • 在游戏场景中创建 UGUI Text 或 TextMeshProUGUI 组件,命名为RoomNameDisplay,调整到合适的显示位置
  • 新建独立控制脚本,命名为RoomUIManager.cs,挂载到场景中永久存在的UI节点上

2. 基础实现(脚本逻辑)

首先引入必要命名空间:

using Photon.Pun;
using Photon.Realtime;
// 用UGUI Text加下面这行
using UnityEngine.UI;
// 用TextMeshPro加下面这行
// using TMPro;

脚本继承MonoBehaviourPunCallbacks以使用PUN官方回调,重写加入房间成功的触发方法:

public class RoomUIManager : MonoBehaviourPunCallbacks
{
    // Inspector面板拖拽赋值对应UI组件
    public Text roomNameText;
    // TextMeshPro版本改为 public TMP_Text roomNameText;

    // 加入房间成功后PUN会自动调用该方法
    public override void OnJoinedRoom()
    {
        // 直接从Photon当前房间实例获取名称
        string roomName = PhotonNetwork.CurrentRoom.Name;
        roomNameText.text = $"房间名:{roomName}";
        base.OnJoinedRoom();
    }
}

3. 场景切换场景适配

如果你的逻辑是「加入房间成功后才切换到游戏场景」,会出现回调触发时游戏场景还未加载、UI组件不存在的问题,按以下方式修改:

方式一:直接在游戏场景加载后读取房间信息

游戏场景的RoomUIManager改为在Start生命周期读取,无需额外存储:

private void Start()
{
    if (PhotonNetwork.InRoom)
    {
        roomNameText.text = $"房间名:{PhotonNetwork.CurrentRoom.Name}";
    }
}

方式二:静态变量暂存

如果需要跨场景传递更多房间信息,可以用静态变量暂存:

// 全局静态存储类
public static class GameTempData
{
    public static string CurrentRoomName;
}

在加入房间的逻辑脚本中先存值再切场景:

public override void OnJoinedRoom()
{
    GameTempData.CurrentRoomName = PhotonNetwork.CurrentRoom.Name;
    PhotonNetwork.LoadLevel("GameScene");
}

游戏场景中读取即可:

private void Start()
{
    roomNameText.text = $"房间名:{GameTempData.CurrentRoomName}";
}

注意事项

  • 不要在Awake生命周期读取PhotonNetwork.CurrentRoom,可能因Photon状态未同步完成导致空引用
  • 创建房间时需确保传入的房间名非空,避免显示空白
  • 可重写OnLeftRoom回调实现退出房间后清空房间名显示的逻辑

内容的提问来源于stack exchange,提问作者BlckAddict

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 05:18:03