我有一个项目,我们使用光子来腾出房间供人们加入。
我可以显示玩家数量,但问题是它不会实时更新玩家数量。 是否可以让房间在房间浏览器中显示实时玩家数量。因为目前它仅在您断开并重新连接到网络时更新它。我尝试了一些解决方法,但似乎没有任何效果。
^^这就是它目前的样子。它仅在重新连接到服务器时更新。^^
public override void OnRoomListUpdate(List<RoomInfo> roomList)
{
foreach (RoomInfo info in roomList)
{
//Removed from rooms list
if (info.RemovedFromList)
{
int index = _listings.FindIndex(x => x.RoomInfo.Name == info.Name);
if(index != -1)
{
Destroy(_listings[index].gameObject);
_listings.RemoveAt(index);
}
}
//Added to rooms list
else
{
int index = _listings.FindIndex(x => x.RoomInfo.Name == info.Name);
if (index == -1)
{
RoomListing listing = Instantiate(_roomListing, _content);
if (listing != null)
{
listing.SetRoomInfo(info);
_listings.Add(listing);
}
}
else
{
//Modify listing here
}
}
}
}
^^这就是创建/删除房间时我们的代码的样子。^^
public class RoomListing : MonoBehaviour
{
[SerializeField]
private TextMeshProUGUI _text;
public RoomInfo RoomInfo { get; private set; }
public void SetRoomInfo(RoomInfo roomInfo)
{
RoomInfo = roomInfo;
_text.text = roomInfo.PlayerCount + "/" +roomInfo.MaxPlayers + "," + roomInfo.Name;
}
public void OnClick_Button()
{
PhotonNetwork.JoinRoom(RoomInfo.Name);
}
}
^^这是添加房间信息的代码(例如名称、最大玩家,在本例中还有玩家计数。)
有人知道我们可以做些什么来实时更新玩家数量吗?我们尝试了很多事情,但遗憾的是没有成功。
使用相同的代码,只需添加
_roomListing.SetRoomInfo(_listings[index].RoomInfo);
哪里是
//Modify listing here
。
当相关房间的信息发生变化时,它会不断更新相关房间的信息。
在列表的相关预制件中,只需在 SetRoomInfo(...)
中添加一行(例如 playerCountText.text = roomInfo.PlayerCount + "/"+roomInfo.MaxPlayers;
)即可更新玩家计数的相关预制件组件。