当前位置:   article > 正文

Unity3D关于WebSocket的实现(一)_unity建立websocket

unity建立websocket

前情概要

服务端使用的是SpringBoot,详情实现方式请阅读

SpringBoot及Construct2关于WebSocket的实现(一)

为了使同个服务端不同游戏引擎都可以用,后面我会用Json插件将它们封装成Json字符串进行传输通信

一、介绍

使用Unity3D做为WebSocket客户端,主要是使用了一个插件BestHttp(你懂的)

放上下载链接: Best HTTP - Assert Store

或者:[工具]U3D BestHTTP

因为使用过程中一切顺利~参考博客

Unity中Websocket的简单使用

会有后续开发日志,这篇算作也是初学者第一步。

二、Unity3D界面

1、InputField是输入框,和上一篇一样需要先传一个id进行webSocket连接

2、connect和send是按钮

3、log是日志显示(接收信息之类)

4、websocket是一个空物体,用来绑定C#脚本

三、主程序编写

1、导入资源包

除了Example文件目录,其它都导入。

2、创建绑定脚本

这里我创建了一个WebSocketServer脚本用来管理整个WebSocket连接

引入的命名空间:

  1. using UnityEngine;
  2. using BestHTTP;
  3. using BestHTTP.WebSocket;
  4. using UnityEngine.UI;
  5. using System;
  6. using System.Text;

连接初始化和关闭方法

  1. public string url = "ws://localhost:8080//websocket/";
  2. public InputField msg;
  3. public Text log;
  4. private WebSocket webSocket;
  5. private void Init(string id)
  6. {
  7. webSocket = new WebSocket(new Uri(url+id));
  8. webSocket.OnOpen += OnOpen;
  9. webSocket.OnMessage += OnMessageReceived;
  10. webSocket.OnError += OnError;
  11. webSocket.OnClosed += OnClosed;
  12. }
  13. private void AntiInit()
  14. {
  15. webSocket.OnOpen = null;
  16. webSocket.OnMessage = null;
  17. webSocket.OnError = null;
  18. webSocket.OnClosed = null;
  19. webSocket = null;
  20. }

讲解:

OnOpen是一个方法,然后用+=形式来调用,很明显这是一个响应事件Event,使用注册事件的形式来初始化websocket连接

建立连接

  1. /// <summary>
  2. /// 连接时
  3. /// </summary>
  4. /// <param name="ws"></param>
  5. void OnOpen(WebSocket ws)
  6. {
  7. Debug.Log("connecting...");
  8. SetLog("connecting...");
  9. }

接收信息:

  1. /// <summary>
  2. /// 接收时
  3. /// </summary>
  4. /// <param name="ws"></param>
  5. /// <param name="msg"></param>
  6. void OnMessageReceived(WebSocket ws,string msg)
  7. {
  8. Debug.Log(msg);
  9. SetLog(msg);
  10. }

关闭连接:

  1. /// <summary>
  2. /// 关闭时
  3. /// </summary>
  4. /// <param name="ws"></param>
  5. /// <param name="code"></param>
  6. /// <param name="msg"></param>
  7. void OnClosed(WebSocket ws, UInt16 code, string msg)
  8. {
  9. Debug.Log(msg);
  10. SetLog(msg);
  11. AntiInit();
  12. }

响应错误:

  1. /// <summary>
  2. /// 错误时
  3. /// </summary>
  4. /// <param name="ws"></param>
  5. /// <param name="ex"></param>
  6. void OnError(WebSocket ws, Exception ex)
  7. {
  8. string errorMsg = string.Empty;
  9. #if !UNITY_WEBGL || UNITY_EDITOR
  10. if (ws.InternalRequest.Response != null)
  11. errorMsg = string.Format("Status Code from Server: {0} and Message: {1}", ws.InternalRequest.Response.StatusCode, ws.InternalRequest.Response.Message);
  12. #endif
  13. Debug.Log(errorMsg);
  14. SetLog(errorMsg);
  15. AntiInit();
  16. }

连接按钮:

  1. public void Connect()
  2. {
  3. string id = msg.text;
  4. Init(id);
  5. webSocket.Open();
  6. }

发送按钮:

  1. public void Send()
  2. {
  3. webSocket.Send(msg.text);
  4. }

3、将按钮和输入框进行事件绑定

四、实际结果

1、将Unity工程打包成.exe文件

2、启动服务器,及两次客户端程序

这里的服务器错误是因为,我没有调用关闭连接的方法,我是直接关掉程序的...(捂脸)

五、总结

1、很长时间没写C#了,手生到爆炸,好在java语法与C#语法也算是比较相似了~~

2、Unity3D为做一个联机游戏,需要达到消息同步的目的,才用一个Socket来做管理。

3、最后,说一句,待更新!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/107300
推荐阅读
相关标签
  

闽ICP备14008679号