Unity進(jìn)階–通過PhotonServer實(shí)現(xiàn)聯(lián)網(wǎng)登錄注冊功能(客戶端)–PhotonServer(三)
前情提要
-
單例泛型類
using System.Collections; using System.Collections.Generic; using UnityEngine; public class MyrSingletonBase<T> : MonoBehaviour where T : MonoBehaviour { private static T instance; public static T Instance { get { return instance; } } protected virtual void Awake() { instance = this as T; } protected virtual void OnDestroy() { instance = null; } }
-
ManagerBase
using System.Collections; using System.Collections.Generic; using Net; using UnityEngine; public abstract class ManagerBase : MyrSingletonBase<ManagerBase> { public List<MoonBase> Monos = new List<MoonBase>(); public void Register(MoonBase mono){ if (!Monos.Contains(mono)){ Monos.Add(mono); } } public virtual void ReceiveMessage(Message message){ if (message.Type != GetMessageType()){ return; } foreach (var mono in Monos){ mono.ReceiveMessage(message); } } public abstract byte GetMessageType(); }
-
消息中心
using System.Collections; using System.Collections.Generic; using Net; using UnityEngine; public class MessageCenter : MyrSingletonBase<MessageCenter> { public static List<ManagerBase> Managers = new List<ManagerBase>(); public void Register(ManagerBase manager){ if (!Managers.Contains(manager)){ Managers.Add(manager); } } public void SendCustomMessage(Message message){ foreach(var manager in Managers){ manager.ReceiveMessage(message); } } public static void SendMessage(Message message){ foreach(var manager in Managers){ manager.ReceiveMessage(message); } } }
-
manager下的組件基礎(chǔ)
using System.Collections; using System.Collections.Generic; using Net; using UnityEngine; public class MoonBase : MonoBehaviour { public virtual void ReceiveMessage(Message message){ } }
-
uiManager(綁在canvas上)
using System.Collections; using System.Collections.Generic; using Net; using UnityEngine; public class UiManager : ManagerBase { void Start() { MessageCenter.Instance.Register(this); } public override byte GetMessageType() { return MessageType.Type_UI; } }
-
-
-
PhotonManager
using System.Collections; using System.Collections.Generic; using UnityEngine; using ExitGames.Client.Photon; using Net; public class PhotonManager : MyrSingletonBase<PhotonManager>, IPhotonPeerListener { private PhotonPeer peer; void Awake() { base.Awake(); DontDestroyOnLoad(this); } // Start is called before the first frame update void Start() { peer = new PhotonPeer(this, ConnectionProtocol.Tcp); peer.Connect("127.0.0.1:4530", "PhotonServerFirst"); } void Update() { peer.Service(); } private void OnDestroy() { base.OnDestroy(); //斷開連接 peer.Disconnect(); } public void DebugReturn(DebugLevel level, string message) { } /// <summary> /// 接收服務(wù)器事件 /// </summary> /// <param name="eventData"></param> public void OnEvent(EventData eventData) { //拆包 Message msg = new Message(); msg.Type = (byte)eventData.Parameters[0]; msg.Command = (int)eventData. Parameters[1]; List<object> list = new List<object>(); for (byte i = 2; i < eventData.Parameters.Count; i++){ list.Add(eventData.Parameters[i]); } msg.Content = list.ToArray(); MessageCenter.SendMessage(msg); } /// <summary> /// 接收服務(wù)器響應(yīng) /// </summary> /// <param name="operationResponse"></param> public void OnOperationResponse(OperationResponse operationResponse) { if (operationResponse.OperationCode == 1){ Debug.Log(operationResponse.Parameters[1]); } } /// <summary> /// 狀態(tài)改變 /// </summary> /// <param name="statusCode"></param> public void OnStatusChanged(StatusCode statusCode) { Debug.Log(statusCode); } /// <summary> /// 發(fā)送消息 /// </summary> public void Send(byte type, int command, params object[] objs) { Dictionary<byte, object> dic = new Dictionary<byte,object>(); dic.Add(0,type); dic.Add(1,command); byte i = 2; foreach (object o in objs){ dic.Add(i++, o); } peer.OpCustom(0, dic, true); } }
客戶端部分
-
搭個頁面
-
panel上掛上腳本
using System.Collections; using System.Collections.Generic; using Net; using UnityEngine; using UnityEngine.UI; public class LoginPanel : MoonBase { //賬號和密碼輸入框 public InputField AccountField; public InputField PasswordField; // Start is called before the first frame update void Start() { UiManager.Instance.Register(this); } // Update is called once per frame void Update() { } public override void ReceiveMessage(Message message){ //判斷是否是自己該傳遞的消息 base.ReceiveMessage(message); //判斷消息命令 switch (message.Command) { case MessageType.Account_Register_Res: Debug.Log("注冊成功"); break; case MessageType.Account_Login_res: Destroy(gameObject); break; } } //注冊 public void Register(){ PhotonManager.Instance.Send(MessageType.Type_Account, MessageType.Account_Register, AccountField.text, PasswordField.text); } //登錄 public void Login() { PhotonManager.Instance.Send(MessageType.Type_Account, MessageType.Account_Login, AccountField.text, PasswordField.text); } }
-
綁定對象,綁定事件
文章來源:http://www.zghlxwxcb.cn/news/detail-660372.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-660372.html
到了這里,關(guān)于Unity進(jìn)階–通過PhotonServer實(shí)現(xiàn)聯(lián)網(wǎng)登錄注冊功能(客戶端)–PhotonServer(三)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!