联网游戏开发

Photon2021 | 光子引擎photonengine中文站

Multiplayer Game Development Made Easy | Photon EngineGlobal cross platform multiplayer game backend as a service (SaaS, Cloud) for synchronous and asynchronous games and applications. SDKs are available for android, iOS, .NET., Mac OS, Unity 3D, Windows, Unreal Engine, HTML5 and others.https://www.photonengine.com/

【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();
        }       
    }
}
 

猜你喜欢

转载自blog.csdn.net/renwen1579/article/details/125883211