
作用:Unity客户端
C:\Photon-OnPremise-Server-SDK_v4-0-29-11263\lib\Photon3Unity3D.dll
在Scenes同级创建文件夹Plugins(插件,不可以修改Plugins这个名字)放入Photon3Unity3D.dll
命名PhotonEngine,加上脚本
修改MyGame1
using System.Collections;using System.Collections.Generic;using UnityEngine;using ExitGames.Client.Photon;public class PhotonEngine : MonoBehaviour,IPhotonPeerListener{public static PhotonPeer Peer{get{return peer;}}private static PhotonEngine Instance;//创建一个物体private static PhotonPeer peer;//做成一个字段//Instance判断有没有这个,有的话删除,没有就赋值,PhotonEngine只需要一个就可以了void Awake(){if (Instance == null){Instance = this;}else if(Instance != this){Destroy(this.gameObject);return;}}// Start is called before the first frame updatevoid Start(){//通过Listener接收服务器端的响应peer = new PhotonPeer(this,ConnectionProtocol.Udp);//有监听器、有协议//ip地址、应用名字//ip:小托盘PhotonServer查到的第一个是本机地址,第二个是路由器局域网地址,第三个是外网//C:\Photon-OnPremise-Server-SDK_v4-0-29-11263\deploy\bin_Win64\PhotonServer.config//ip后的端口号:是选择PhotonServer.config的Udp的端口号//应用名字:选择PhotonServer.config的Application无s的Namepeer.Connect("10.211.55.5:5055", "MyGame1");}// Update is called once per framevoid Update(){//判断是否连接//if (peer.PeerState == PeerStateValue.Connected)//{peer.Service();//需要一直调用//}}//如果Unity关闭时可以断开连接void OnDestory(){if(peer != null && peer.PeerState == PeerStateValue.Connected){peer.Disconnect();}}//以下4个是IPhotonPeerListenerpublic void DebugReturn(DebugLevel level, string message){throw new System.NotImplementedException();}//服务器端直接想客户端发送event事件信息public void OnEvent(EventData eventData){throw new System.NotImplementedException();}//客户端发送到服务器端,传回来的数据类似Ajaxpublic void OnOperationResponse(OperationResponse operationResponse){switch (operationResponse.OperationCode)//通过OperationCode区分请求{case 1:Debug.Log("客户端收到了服务器端的响应OpCode1");Dictionary<byte, object> data = operationResponse.Parameters;object intValue;data.TryGetValue(1, out intValue);object stringValue;data.TryGetValue(2, out stringValue);Debug.Log("服务器收到回复:"+ intValue.ToString() + stringValue.ToString());break;case 2:break;default:break;}}//连接state发生不一样时做的5种public void OnStatusChanged(StatusCode statusCode){Debug.Log(statusCode);}}
脚本text.cs,点击鼠标OpCustom发送测试
using System.Collections;using System.Collections.Generic;using UnityEngine;public class text : MonoBehaviour{// Update is called once per framevoid Update(){if (Input.GetMouseButtonDown(0)){SendRequest();}}void SendRequest(){Dictionary<byte, object> data = new Dictionary<byte, object>();data.Add(1, 100);//加数据data.Add(2, "aaBB中文");//加数据PhotonEngine.Peer.OpCustom(1,data, true);//调用OpCustom发送:1是case码,数据,一定要发送到Debug.Log("客户端发送了一个请求");}}
PhotonEngine.cs
using System.Collections;using System.Collections.Generic;using UnityEngine;using ExitGames.Client.Photon;using Common;using Common.Tools;public class PhotonEngine : MonoBehaviour, IPhotonPeerListener{public static PhotonPeer Peer{get{return peer;}}public static PhotonEngine Instance;//创建一个物体private static PhotonPeer peer;//做成一个字段public static string username;//名字信息////Photon连接////Instance判断有没有这个,有的话删除,没有就赋值,PhotonEngine只需要一个就可以了void Awake(){if (Instance == null){Instance = this;DontDestroyOnLoad(this.gameObject);}else if (Instance != this){Destroy(this.gameObject); return;}}// 连接Photonvoid Start(){//通过Listener接收服务器端的响应peer = new PhotonPeer(this, ConnectionProtocol.Udp);//有监听器、有协议//ip地址、应用名字//ip:小托盘PhotonServer查到的第一个是本机地址,第二个是路由器局域网地址,第三个是外网//C:\Photon-OnPremise-Server-SDK_v4-0-29-11263\deploy\bin_Win64\PhotonServer.config//ip后的端口号:是选择PhotonServer.config的Udp的端口号//应用名字:选择PhotonServer.config的Application无s的Namepeer.Connect("10.211.55.5:5055", "Tetris");}// Update is called once per framevoid Update(){//判断是否连接peer.Service();//需要一直调-}//如果Unity关闭时可以断开连接void OnDestroy(){if (peer != null && peer.PeerState == PeerStateValue.Connected){peer.Disconnect();}}//以下4个是IPhotonPeerListenerpublic void DebugReturn(DebugLevel level, string message){throw new System.NotImplementedException();}//连接state发生不一样时做的5种public void OnStatusChanged(StatusCode statusCode){Debug.Log(statusCode);}////请求request//private Dictionary<OperationCode, BaseRequest> RequestDict = new Dictionary<OperationCode, BaseRequest>();//普通请求字典//请求-收-客户端发送到服务器端,传回来的数据类似Ajaxpublic void OnOperationResponse(OperationResponse operationResponse){//处理分发OperationCode opCode = (OperationCode)operationResponse.OperationCode;//获得code是谁BaseRequest request = null;bool temp = RequestDict.TryGetValue(opCode, out request);if (temp){request.OnOperationResponse(operationResponse);}else{Debug.Log("没找到对应的响应处理对象");}}//请求-request-添加移除public void AddRequest(BaseRequest request){RequestDict.Add(request.OpCode, request);}public void RemoveRequest(BaseRequest request){RequestDict.Remove(request.OpCode);}////事件Event//private Dictionary<EventCode, BaseEvent> EventDict = new Dictionary<EventCode, BaseEvent>();//事件字典//服务器端直接向客户端发送event事件信息public void OnEvent(EventData eventData){EventCode code = (EventCode)eventData.Code;BaseEvent e = DictTool.GetValue<EventCode, BaseEvent>(EventDict, code);e.OnEvent(eventData);}//事件-接收-增加事件码public void AddEvent(BaseEvent e){EventDict.Add(e.EventCode, e);//字典加}//事件-接收-取消事件码public void RemoveEvent(BaseEvent e){EventDict.Remove(e.EventCode);//字典减}}