文章目录
- Unity进阶–通过PhotonServer实现联网登录注册功能(客户端)–PhotonServer(三)
- 前情提要
- 客户端部分
Unity进阶–通过PhotonServer实现联网登录注册功能(客户端)–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下的组件基础
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 updatevoid 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>/// 接收服务器事件/// </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>/// 接收服务器响应/// </summary>/// <param name="operationResponse"></param>public void OnOperationResponse(OperationResponse operationResponse){if (operationResponse.OperationCode == 1){Debug.Log(operationResponse.Parameters[1]);}}/// <summary>/// 状态改变/// </summary>/// <param name="statusCode"></param>public void OnStatusChanged(StatusCode statusCode){Debug.Log(statusCode);}/// <summary>/// 发送消息/// </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 updatevoid Start(){UiManager.Instance.Register(this);}// Update is called once per framevoid 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);} }
-
绑定对象,绑定事件