赞
踩
服务端使用的是SpringBoot,详情实现方式请阅读
SpringBoot及Construct2关于WebSocket的实现(一)
为了使同个服务端不同游戏引擎都可以用,后面我会用Json插件将它们封装成Json字符串进行传输通信
使用Unity3D做为WebSocket客户端,主要是使用了一个插件BestHttp(你懂的)
放上下载链接: Best HTTP - Assert Store
因为使用过程中一切顺利~参考博客
会有后续开发日志,这篇算作也是初学者第一步。
1、InputField是输入框,和上一篇一样需要先传一个id进行webSocket连接
2、connect和send是按钮
3、log是日志显示(接收信息之类)
4、websocket是一个空物体,用来绑定C#脚本
除了Example文件目录,其它都导入。
这里我创建了一个WebSocketServer脚本用来管理整个WebSocket连接
引入的命名空间:
- using UnityEngine;
- using BestHTTP;
- using BestHTTP.WebSocket;
- using UnityEngine.UI;
- using System;
- using System.Text;
连接初始化和关闭方法
- public string url = "ws://localhost:8080//websocket/";
-
- public InputField msg;
-
- public Text log;
-
- private WebSocket webSocket;
-
- private void Init(string id)
- {
- webSocket = new WebSocket(new Uri(url+id));
- webSocket.OnOpen += OnOpen;
- webSocket.OnMessage += OnMessageReceived;
- webSocket.OnError += OnError;
- webSocket.OnClosed += OnClosed;
- }
-
- private void AntiInit()
- {
- webSocket.OnOpen = null;
- webSocket.OnMessage = null;
- webSocket.OnError = null;
- webSocket.OnClosed = null;
- webSocket = null;
- }
讲解:
OnOpen是一个方法,然后用+=形式来调用,很明显这是一个响应事件Event,使用注册事件的形式来初始化websocket连接
建立连接:
- /// <summary>
- /// 连接时
- /// </summary>
- /// <param name="ws"></param>
- void OnOpen(WebSocket ws)
- {
- Debug.Log("connecting...");
- SetLog("connecting...");
- }
接收信息:
- /// <summary>
- /// 接收时
- /// </summary>
- /// <param name="ws"></param>
- /// <param name="msg"></param>
- void OnMessageReceived(WebSocket ws,string msg)
- {
- Debug.Log(msg);
- SetLog(msg);
- }
关闭连接:
- /// <summary>
- /// 关闭时
- /// </summary>
- /// <param name="ws"></param>
- /// <param name="code"></param>
- /// <param name="msg"></param>
- void OnClosed(WebSocket ws, UInt16 code, string msg)
- {
- Debug.Log(msg);
- SetLog(msg);
- AntiInit();
- }
响应错误:
- /// <summary>
- /// 错误时
- /// </summary>
- /// <param name="ws"></param>
- /// <param name="ex"></param>
- void OnError(WebSocket ws, Exception ex)
- {
- string errorMsg = string.Empty;
- #if !UNITY_WEBGL || UNITY_EDITOR
- if (ws.InternalRequest.Response != null)
- errorMsg = string.Format("Status Code from Server: {0} and Message: {1}", ws.InternalRequest.Response.StatusCode, ws.InternalRequest.Response.Message);
- #endif
- Debug.Log(errorMsg);
- SetLog(errorMsg);
- AntiInit();
- }
连接按钮:
- public void Connect()
- {
- string id = msg.text;
- Init(id);
- webSocket.Open();
- }
发送按钮:
- public void Send()
- {
- webSocket.Send(msg.text);
- }
这里的服务器错误是因为,我没有调用关闭连接的方法,我是直接关掉程序的...(捂脸)
1、很长时间没写C#了,手生到爆炸,好在java语法与C#语法也算是比较相似了~~
2、Unity3D为做一个联机游戏,需要达到消息同步的目的,才用一个Socket来做管理。
3、最后,说一句,待更新!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。