Photon2021 | 光子引擎photonengine中文站
【PhotonEngine 学习笔记】(一)简单使用_Icetone丶的博客-CSDN博客
【千锋合集】史上最全Unity3D全套教程|匠心之作_哔哩哔哩_bilibili
中国区
测试游戏
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Photon.Pun;
using Photon.Realtime;
//p105
public class PhotonDemo : MonoBehaviour
{
public GUISkin skin;
#region GUI Fields
private List<string> photonState;
#endregion
//标记上一次的状态
private ClientState previousState;private void Awake()
{
photonState = new List<string>();
}
// Start is called before the first frame update
void Start()
{
//初始状态
previousState = PhotonNetwork.NetworkClientState;
//添加到字典
photonState.Add(previousState.ToString());
}// Update is called once per frame
void Update()
{
if (PhotonNetwork.NetworkClientState != previousState) {
//添加到字典
photonState.Add(PhotonNetwork.NetworkClientState.ToString());
//更新previous
previousState = PhotonNetwork.NetworkClientState;
}
}private void OnGUI()
{
GUI.skin = skin;
//显示状态
//GUILayout.Label(photonState);if (GUILayout.Button("连接Photon Cloud")) {
//连接Photon Cloud
bool connectResult = PhotonNetwork.ConnectUsingSettings();
}
//显示状态
for (int i = 0; i < photonState.Count; i++)
{
GUILayout.Label(photonState[i]);
}
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Photon.Pun;
using Photon.Realtime;
//p105
public class PhotonDemo : MonoBehaviour
{
public GUISkin skin;
#region GUI Fields
private List<string> photonState;private string roomName="Room007";
private string roomMaxCount="2";
#endregion
//标记上一次的状态
private ClientState previousState;private void Awake()
{
photonState = new List<string>();
}
// Start is called before the first frame update
void Start()
{
//初始状态
previousState = PhotonNetwork.NetworkClientState;
//添加到字典
photonState.Add(previousState.ToString());
}// Update is called once per frame
void Update()
{
if (PhotonNetwork.NetworkClientState != previousState) {
//添加到字典
photonState.Add(PhotonNetwork.NetworkClientState.ToString());
//更新previous
previousState = PhotonNetwork.NetworkClientState;
}
}private void OnGUI()
{
GUI.skin = skin;
//显示状态
//GUILayout.Label(photonState);
//显示状态
//for (int i = 0; i < photonState.Count; i++)
//{
//GUILayout.Label(photonState[i]);
//}
//显示目前状态
GUILayout.Label(photonState[photonState.Count-1]);switch (PhotonNetwork.NetworkClientState) {
//未连接状态
case ClientState.PeerCreated:
ConnectToPhotonCloud();
break;
//连接到主服务器
case ClientState.ConnectedToMasterserver:
//房间操作
RoomOperation();
break;
}}
/// <summary>
/// 房间操作
/// </summary>
private void RoomOperation() {GUILayout.Label("请输入房间名称:");
roomName = GUILayout.TextField(roomName);GUILayout.Label("请输入房间最大人数:");
roomMaxCount = GUILayout.TextField(roomMaxCount);if (GUILayout.Button("创建房间")) {
//房间设置
RoomOptions options = new RoomOptions();
options.MaxPlayers = byte.Parse(roomMaxCount);
//创建房间
PhotonNetwork.CreateRoom(roomName,options);
}
if (GUILayout.Button("进入游戏大厅"))
{
//加入大厅
PhotonNetwork.JoinLobby();
}
if (GUILayout.Button("随机加入房间"))
{
//随机加入房间
PhotonNetwork.JoinRandomRoom();}
}/// <summary>
/// 连接Photon Cloud
/// </summary>
private void ConnectToPhotonCloud() {
if (GUILayout.Button("连接Photon Cloud"))
{
//连接Photon Cloud
bool connectResult = PhotonNetwork.ConnectUsingSettings();
}
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Photon.Pun;
using Photon.Realtime;using Hashtable = ExitGames.Client.Photon.Hashtable;
//p105
public class PhotonDemo : MonoBehaviour
{
public GUISkin skin;
#region GUI Fields
private List<string> photonState;private string roomName="Room007";
private string roomMaxCount="2";
#endregion
//标记上一次的状态
private ClientState previousState;
//回调Demo
private PhotonCallbackDemo cbDemo;private string playerNickName = "";
private void Awake()
{
photonState = new List<string>();cbDemo = GetComponent<PhotonCallbackDemo>();
}
// Start is called before the first frame update
void Start()
{
//初始状态
previousState = PhotonNetwork.NetworkClientState;
//添加到字典
photonState.Add(previousState.ToString());
//初始化玩家昵称
playerNickName = "Player" + Random.Range(101, 999);
}// Update is called once per frame
void Update()
{
if (PhotonNetwork.NetworkClientState != previousState) {
//添加到字典
photonState.Add(PhotonNetwork.NetworkClientState.ToString());
//更新previous
previousState = PhotonNetwork.NetworkClientState;
}
}private void OnGUI()
{
GUI.skin = skin;
//显示状态
//GUILayout.Label(photonState);
//显示状态
//for (int i = 0; i < photonState.Count; i++)
//{
//GUILayout.Label(photonState[i]);
//}
//显示目前状态
GUILayout.Label(photonState[photonState.Count-1]);switch (PhotonNetwork.NetworkClientState) {
//未连接状态
case ClientState.PeerCreated:
ConnectToPhotonCloud();
break;case ClientState.Disconnected:
ConnectToPhotonCloud();
break;
//连接到主服务器
case ClientState.ConnectedToMasterserver:
//房间操作
RoomOperation();
break;
//进入房间状态
case ClientState.Joined:
JoinedRoomOperation();
break;
//进入大厅状态
case ClientState.JoinedLobby:
JoinedLobbyOperation();
break;
}
if (GUILayout.Button("断开连接")) {
//断开连接
PhotonNetwork.Disconnect();
}
}
/// <summary>
/// 进入大厅后的操作
/// </summary>
private void JoinedLobbyOperation() {
GUILayout.Label("Room List:");
GUILayout.Label("——————————————");
foreach (var item in cbDemo.roomList) {
if (!item.IsOpen || !item.IsVisible)
continue;
if (item.MaxPlayers == 0)
continue;
GUILayout.Label("房间名称"+item.Name);
GUILayout.Label("房间最大人数" + item.PlayerCount +"/"+item.MaxPlayers);
if (GUILayout.Button("加入房间")) {
//设置昵称
PhotonNetwork.LocalPlayer.NickName = playerNickName;
//加入房间
PhotonNetwork.JoinRoom(item.Name);
}
GUILayout.Label("-------------------------");
}
GUILayout.Label("——————————————");
if (GUILayout.Button("离开大厅")) {
//离开大厅
PhotonNetwork.LeaveLobby();
}
}
/// <summary>
/// 进入房间后的操作
/// </summary>
private void JoinedRoomOperation() {
GUILayout.Label("Player List:");
GUILayout.Label("——————————————");
//找到当前房间,再遍历所有玩家[字典]
//foreach (var item in PhotonNetwork.CurrentRoom.Players) {
// //逐个显示每个玩家
// GUILayout.Label(item.Key + ":" + item.Value.NickName+ (item.Value.IsLocal?"yes":"no"));
//}//直接遍历玩家列表【数组】【已经排好序】【游戏使用】
foreach (var item in PhotonNetwork.PlayerList)
{
//逐个显示每个玩家
GUILayout.Label(item.ActorNumber + ":" + item.NickName);
//临时属性
object isReady;
//获取玩家是否已经准备
item.CustomProperties.TryGetValue("Ready",out isReady);
if (isReady == null || !(bool)isReady)
{
//如果是当前玩家
GUILayout.Label("该玩家未准备");
if (item.IsLocal && GUILayout.Button("准备"))
{
Hashtable readyHash = new Hashtable();
readyHash.Add("Ready", true);
//设置准备属性
item.SetCustomProperties(readyHash);
}
else
{
GUILayout.Label("未准备");
}
}
else {
GUILayout.Label("已准备");
//如果是当前玩家
if (item.IsLocal && GUILayout.Button("取消准备"))
{
Hashtable readyHash = new Hashtable();
readyHash.Add("Ready", false);
//设置准备属性
item.SetCustomProperties(readyHash);
}
}
}
GUILayout.Label("——————————————");
if (GUILayout.Button("离开房间")) {
//离开房间
PhotonNetwork.LeaveRoom();
}
}
/// <summary>
/// 房间操作
/// </summary>
private void RoomOperation() {GUILayout.Label("请输入房间名称:");
roomName = GUILayout.TextField(roomName);GUILayout.Label("请输入房间最大人数:");
roomMaxCount = GUILayout.TextField(roomMaxCount);if (GUILayout.Button("创建房间")) {
//房间设置
RoomOptions options = new RoomOptions();
options.MaxPlayers = byte.Parse(roomMaxCount);//设置昵称
PhotonNetwork.LocalPlayer.NickName = playerNickName;
//创建房间
PhotonNetwork.CreateRoom(roomName,options);
}
if (GUILayout.Button("进入游戏大厅"))
{
//加入大厅
PhotonNetwork.JoinLobby();
}
if (GUILayout.Button("随机加入房间"))
{
//设置昵称
PhotonNetwork.LocalPlayer.NickName = playerNickName;
//随机加入房间
PhotonNetwork.JoinRandomRoom();}
}/// <summary>
/// 连接Photon Cloud
/// </summary>
private void ConnectToPhotonCloud() {
GUILayout.Label("请输入昵称:");playerNickName = GUILayout.TextField(playerNickName);
if (GUILayout.Button("连接Photon Cloud"))
{
//连接Photon Cloud
bool connectResult = PhotonNetwork.ConnectUsingSettings();
}
}
}