上一篇由于Mac没电了,写的有点仓促,可能逻辑不是太好,有些说明有遗漏。先来补充一下:
申请免费光子云的正确步骤应该是先去全球官网注册账号,接着建立photon cloud application,得到一个APP ID,然后拿着这个APP ID去那个中文网页申请,申请的时候还需注意APP ID类型选择 Photon PUN
OK,现在开始逐一实现上一篇说的目标:
using System.Collections; using System.Collections.Generic; using UnityEngine; //引入命名空间 using Photon.Pun; using Photon.Realtime; //让脚本继承MonoBehaviourPunCallbacks类,这个类是关于回调函数的 public class NetworkingManager : MonoBehaviourPunCallbacks { [SerializeField] private int sceneIndex; //当按钮被点击的时候判断一下是否与服务器链接,如果链接成功就加入房间,否则开始链接。 public void ClickBtn() { if (PhotonNetwork.IsConnected) { PhotonNetwork.JoinRandomRoom(); } else { PhotonNetwork.ConnectUsingSettings(); } } //尝试与主服务器进行链接时调用 public override void OnConnectedToMaster() { PhotonNetwork.JoinRandomRoom(); } //当链接成功时调用 public override void OnConnected() { Debug.Log("------链接成功------"); } //当链接失败的时候 public override void OnDisconnected(DisconnectCause cause) { Debug.Log("------链接失败------"); } //当加入大厅成功的时候 public override void OnJoinedLobby() { Debug.Log("------加入大厅成功------"); } //加入房间失败的时候调用,加入房间失败,并创建房间,可容纳最大人数为5人 public override void OnJoinRandomFailed(short returnCode, string message) { Debug.Log("------加入房间失败------"); Debug.Log("------建立新房间,最大可容纳5人------"); PhotonNetwork.CreateRoom("RoomName",new RoomOptions { MaxPlayers = 5 }); } //创建房间成功 public override void OnCreatedRoom() { Debug.Log("------创建房间成功------"); } //创建房间失败 public override void OnCreateRoomFailed(short returnCode, string message) { Debug.Log("------创建房间失败------"); } //加入房间成功,并跳转场景至游戏界面 public override void OnJoinedRoom() { Debug.Log("------加入房间成功------"); PhotonNetwork.LoadLevel(sceneIndex); } //离开房间时调用 public override void OnLeftRoom() { Debug.Log("------离开房间------"); } //离开大厅时调用 public override void OnLeftLobby() { Debug.Log("------离开大厅------"); } }
各个回调函数的注释已经写的很详细了,就不再一一介绍了。编写完成后,在button上添加点击后所要触发的方法ClickBtn() 可以开始运行然后点击连接测试一下,下图是我运行测试的结果
using System.Collections; using System.Collections.Generic; using UnityEngine; //引入命名空间 using Photon.Pun; public class GameManager : MonoBehaviourPun //继承MonoBehaviourPun类 { [SerializeField] private GameObject Player; private GameObject go = null; //游戏一开始就把玩家实例话出来 private void Awake() { go = PhotonNetwork.Instantiate(Player.name, Vector3.zero, Quaternion.identity); } /// <summary> /// WASD键跟新player的位置信息 /// </summary> private void Update() { go.transform.position += Input.GetAxis("Horizontal") * Vector3.right * 0.4f; go.transform.position += Input.GetAxis("Vertical") * Vector3.forward * 0.4f; } }