Unity中Websocket的简单使用

首先我们需要一个websocket服务器,之前的博文中有做
Tomcat架设简单Websocket服务器
用的时候打开就行了,先不管它

Unity中新建场景
建UI(UGUI)
有一个连接按钮Button
一个信息输入框InputField
一个发送按钮Button
一个断开按钮Button
一个消息显示框Text

场景中建一个GameObject,在上面加个脚本,就叫WSMgr好了
用到了BestHTTP这个插件

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using BestHTTP;
using BestHTTP.WebSocket;
using System;
using BestHTTP.Examples;
using UnityEngine.UI;
using System.Text;

public class WSMgr : MonoBehaviour {

    //public string url = "ws://localhost:8080/web1/websocket";
    public string url = "ws://localhost:8080/web1/ws";
    public InputField msg;
    public Text console;

    private WebSocket webSocket;

    private void Start()
    {
        init();
    }

    private void init()
    {
        webSocket = new WebSocket(new Uri(url));
        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;
    }

    private void setConsoleMsg(string msg)
    {
        console.text = "Message: " + msg;
    }

    public void Connect()
    {
        webSocket.Open();
    }

    private byte[] getBytes(string message)
    {

        byte[] buffer = Encoding.Default.GetBytes(message);
        return buffer;
    }

    public void Send()
    {
        webSocket.Send(msg.text);
    }

    public void Send(string str)
    {
        webSocket.Send(str);
    }

    public void Close()
    {
        webSocket.Close();
    }

    #region WebSocket Event Handlers

    /// <summary>
    /// Called when the web socket is open, and we are ready to send and receive data
    /// </summary>
    void OnOpen(WebSocket ws)
    {
        Debug.Log("connected");
        setConsoleMsg("Connected");
    }

    /// <summary>
    /// Called when we received a text message from the server
    /// </summary>
    void OnMessageReceived(WebSocket ws, string message)
    {
        Debug.Log(message);
        setConsoleMsg(message);
    }

    /// <summary>
    /// Called when the web socket closed
    /// </summary>
    void OnClosed(WebSocket ws, UInt16 code, string message)
    {
        Debug.Log(message);
        setConsoleMsg(message);
        antiInit();
        init();
    }

    private void OnDestroy()
    {
        if(webSocket!=null && webSocket.IsOpen)
        {
            webSocket.Close();
            antiInit();
        }
    }

    /// <summary>
    /// Called when an error occured on client side
    /// </summary>
    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);
        setConsoleMsg(errorMsg);
        antiInit();
        init();
    }

    #endregion
}

Connect Send Close 三个方法对应的就是三个按钮的功能
OnOpen OnMessage OnError OnClose这四个一看就是Websocket的四个事件对应的方法

首先在Start方法中init()
点击Connect,连接

在输入框中输入,点击Send就发送

点击Close断开连接

底部的Text中会显示消息

同样,Tomcat服务端也有显示

发布WebGL测试可用

原文地址:http://blog.51cto.com/shuxiayeshou/2133714

时间: 2024-10-09 20:13:35

Unity中Websocket的简单使用的相关文章

关于用暴风SDK在unity中加入VR效果和利用暴风手柄进行操作

首先在暴风魔镜开发平台下载SDK.地址:http://open.mojing.cn/sdk/download?pid=2  下载unity的工具 MojingSDK., 然后我用的是unity5.42的版本然后将SDK导入unity中.文件夹中包含 接口说明文档说的也比较清楚. 在unity中搭建一个简单的场景需要放入Prefab的MojingMain.并将场景摄像机放入其中并挂上MojingEye脚本 Eye枚举选项为Center 并且添加prefab Overlay. 如果要进行手柄UI交互

基于SuperSocket实现的WebSocket服务器 和Unity中使用Websocket

孙广东  2016.10.15 http://blog.csdn.NET/u010019717 说一下 Unity客户端的库: 1.websocket-sharp  AS中已经下架了,  https://github.com/sta/websocket-sharp  但是Unity的官方插件 :  Simple Web Sockets for Unity WebGL   就是使用的它 2.Simple Web Sockets for Unity WebGL(推荐)  Unity官方退出的插件 3

unity中简单的血条自作

unity中制作血条有很多方法,多数用NGUI:这里我就说说一个简单的血条制作方法吧: 这个血条制作不像NGUI一样,它是靠一段代码就可以实现的,但看起来比较效果比较差,还是看代码吧:  public Texture2D bg;     //血条的背景,需要在外面进行拖拽赋值:  public Texture2D blood;   //血条  float Life=100;            //总的生命值:    public Transform m_Transform;  //绑定血条的

【Unity Shaders】Reflecting Your World —— 在Unity3D中创建一个简单的动态Cubemap系统

本系列主要参考<Unity Shaders and Effects Cookbook>一书(感谢原书作者),同时会加上一点个人理解或拓展. 这里是本书所有的插图.这里是本书所需的代码和资源(当然你也可以从官网下载). ========================================== 分割线 ========================================== 写在前面 我们已经学了很多关于反射的内容,但是我们现在的反射并不能实时反射,即当反射物体移动时它们不

在Unity中实现简单的伪时间同步

在Unity中实现简单的伪时间同步,只是读取数据库所在电脑的当前时间 代码如下: using UnityEngine; using System.Collections; using System.Runtime.InteropServices; using System.Data; using System.Data.SqlClient; public class ChangeTime { //Kernel32.dll在32位系统和64位系统有区别,64位系统中需要设置为以管理员身份运行 [D

sapi语音朗读的简单用法(Unity中)

运行环境:win10, Unity5.6.2f1/Unity2018.2.6f1(两个版本都试了,可以) using SpeechLib; //... SpVoice voice = new SpVoice(); 书接上文Unity中使用Windows的sapi进行语音朗读上文例子中的代码只是最最简单的使用方法,实际用时是有问题的.这样直接 voice.Speak(str); 如上简单粗暴的使用,会卡住当前Unity程序的主线程,在朗读完毕之前会一直卡,包括关闭Unity程序,也还是会一直读完内

Unity中使用协程进行服务端数据验证手段

近期在做项目中的个人中心的一些事情,用户头像上传,下载,本地缓存,二级缓存,压缩,这些都要做,麻雀虽小五脏俱全啊,也是写的浑浑噩噩的, 当我们在上传用户头像的时候,向服务端发送上传头像请求之前,一般都会做一次验证,向服务端获取token验证信息,来确保非法上传,如果不做这个那么会有非法用户上传非法图像,使你的服务器 带来未知的灾难. 而验证的逻辑很好写,并没有什么难度,比如: Server.SendMessage("获取token"); Client.Receive(string to

【Unity技巧】Unity中的优化技术

写在前面 这一篇是在Digital Tutors的一个系列教程的基础上总结扩展而得的~Digital Tutors是一个非常棒的教程网站,包含了多媒体领域很多方面的资料,非常酷!除此之外,还参考了Unity Cookie中的一个教程.还有很多其他参考在下面的链接中. 这篇文章旨在简要地说明一下常见的各种优化策略.不过对每个基础有非常深入地讲解,需要的童鞋可以自行去相关资料. 还有一些我认为非常好的参考文章: Performance Optimization for Mobile Devices

在Unity中定义统一的对象搜索接口

我们经常要在Unity中以各种方式搜索对象.比如按名字搜索.按tag.layer或者是查找名字为xxx开头的对象. 本文是介绍以一种统一的接口来搜索对象. 1.定义统一的搜索接口 /// <summary> /// 游戏对象搜索接口 /// </summary> public interface IGameObjectFinder { /// <summary> /// 搜索 /// </summary> /// <param name="r