Unity3D WebGL平台使用WebSocket通信的方法和示例

这篇具有很好参考价值的文章主要介绍了Unity3D WebGL平台使用WebSocket通信的方法和示例。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

      之前在WebGL平台和服务端交互的时候使用的是UnityWebRequest,通过WebAPI的方式进行交互,后来发现可以用WebSocket交互后就果断换了WebSocket。

一、Unity3D客户端

我在Unity端使用的是NativeWebSocket

NativeWebSocket下载地址

直接导入Unity即可,

下面是适配的代码,直接挂载在GameObject。

 文章来源地址https://www.toymoban.com/news/detail-680320.html

unitywebsocket,webgl,unity3d,unity,websocket,网络协议

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using NativeWebSocket;
using LitJson;

public class Connection : MonoBehaviour
{
    WebSocket websocket;

    public Text textLog;


    async void Start()
    {
        websocket = new WebSocket("ws://127.0.0.1:7181");

        websocket.OnOpen += () =>
        {
            Debug.Log("Connection open!");
            // textLog.text = $"Connection open! {Time.realtimeSinceStartup} \n {textLog.text}";
        };

        websocket.OnError += (e) =>
        {
            Debug.Log("Error! " + e);
            // textLog.text = $"Error:{e} {Time.realtimeSinceStartup} \n {textLog.text}";
        };

        websocket.OnClose += (e) =>
        {
            Debug.Log("Connection closed!");
            // textLog.text = $"Connection closed! {Time.realtimeSinceStartup} \n {textLog.text}";
        };

        websocket.OnMessage += (bytes) =>
        {
            // Debug.Log("OnMessage!");
             //textLog.text = $"OnMessage! {Time.realtimeSinceStartup} \n {textLog.text}";
            //  Debug.Log(bytes);

            // getting the message as a string
            var message = System.Text.Encoding.Default.GetString(bytes);
            textLog.text = $"消息内容:{message} ";
            Debug.Log("OnMessage! " + message);

            //SocketData Sdata= JsonMapper.ToObject<SocketData>(message);
            var Sdata=JsonMapper.ToObject< Dictionary<string, string>>(message);
            Debug.Log(Sdata["data"]);
            string b = Sdata["data"];
           byte[] bs= Convert.FromBase64String(b);
            var m = System.Text.Encoding.Default.GetString(bs);
            Debug.Log(m);
        };

        // Keep sending messages at every 0.3s
       // InvokeRepeating("SendWebSocketMessage", 0.0f, 2f);

        // waiting for messages
        await websocket.Connect();
    }

    void Update()
    {
#if !UNITY_WEBGL || UNITY_EDITOR
        websocket.DispatchMessageQueue();
#endif
    }

    async void SendWebSocketMessage()
    {
        if (websocket.State == WebSocketState.Open)
        {
            // Sending bytes
            await websocket.Send(new byte[] { 10, 20, 30 });

            // Sending plain text
            await websocket.SendText("plain text message");
        }
    }
    
    private async void OnApplicationQuit()
    {
        await websocket.Close();
    }




}


二、服务端

运行后可与客户端交互

下载地址

unitywebsocket,webgl,unity3d,unity,websocket,网络协议

 

到了这里,关于Unity3D WebGL平台使用WebSocket通信的方法和示例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity3D中打包WEBGL后读取本地文件数据+网络请求

    首先上一编博主运行html之后报的错误:提示内存不足!!!! 1.首先排查一下webgl包的大小,不能超过2G。 2.F12查看具体错误,在这里博主的是:        a:本地读取StreamingAssets里的配置文件,序列化失败。        b:网络请求方法不能使用JsonConvert.SerializeObject将对象重新序列

    2024年02月08日
    浏览(41)
  • Unity3d使用Netcode实现Hololens、Android和Pc端通信

    在Unity3d中使用现有的Netcode/Mirror组件实现Hololens、Android和Pc端的三方通信,可以指定一平台为服务器端,其他的两平台多为客户端,不过通常是进行两个平台的通信即可。在这片文章中,可以实现平移、缩放以及旋转的同步 具体步骤如下: 版本:unity2020.3LTS、VS2019 一、配置

    2024年02月09日
    浏览(36)
  • Unity3d(webGL)构建数字孪生小案例(包含完整的数据交互体系)附赠完整代码

    B站视频演示 点击获取合视频对应的完整版代码 项目文档 数字孪生demo项目,打通了,模型-硬件终端-webGL-web端-服务端的数据交互,属于较为完整的项目练习。 包含文件:unity工程文件;webGL文件;前后端代码文件;硬件代码; 先来看看概念吧: 数字孪生体是现有或将有的物

    2024年02月09日
    浏览(33)
  • 【Unity3d】Unity与iOS之间通信

    在Unity开发或者SDK开发经常遇到Unity与移动端原生层之间进行通信,这里把它们之间通信做一个整理。 关于Unity与Android之间通信,参考【Unity3d】Unity与Android之间通信 Unity调用Objective-C 主要分三个步骤: (一)、在xcode中定义要被unity调用的函数 新建一个类,名字可以任意,比如

    2024年02月01日
    浏览(39)
  • Unity3D开发之unity和js通信交互

    官方 方法分享:Unity - 手动:与浏览器脚本的交互 (unity3d.com) 首先需要写一个JS的脚本,主要是调用mergeInto();方法,第一个参数不用变,第二个参数就是JS的方法集合。写完之后将这个文件的后缀改为.jslib,放到Plugins文件夹中  Test  内容: 2.C#(挂在场景 任意物体上) 3.Uni

    2024年02月12日
    浏览(30)
  • vue项目接入unity3D模块并进行数据通信

    unity工程师会提供一个前端可使用的包,将其放在vue项目的 public 下,我这里以 unity 文件夹命名

    2024年02月01日
    浏览(31)
  • Unity3D PC、Android、iOS平台打包流程

    在Unity窗口中,按下Ctrl+Shift+B快捷键,或者在菜单栏选择File-BuildSettings...,打开设置窗口。“Platform”下的选择项默认选择“Windows,Mac,Linux”。单击左下方的“Player Settings...”继续后续设置(应用名、应用分辨率、图标等),如图1-1所示。 图1-1 PC平台选择 接着,点击Add Op

    2023年04月20日
    浏览(45)
  • 【Unity3D日常开发】Unity3D中协程的使用

    推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 大家好,我是佛系工程师 ☆恬静的小魔龙☆ ,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 最近有小伙伴问协程怎么用、怎么写,我也是会用会写,但是原理不是很明白。 学习了一下,总结出

    2024年02月12日
    浏览(43)
  • 【Unity3d】 教会你如何做一个简单的电梯系统(升降平台)

           博主第一次写博客,语言略俗,有不足之处还请指正!        由于自己还处在unity小白阶段,受2d升降平台的影响(后续我也会上传关于2d升降平台的文章),突发奇想如何用3d做一个电梯系统,查阅网上资料后,发现网上对这方面的讲解少之又少,或者说其他博主提

    2024年02月11日
    浏览(67)
  • 使用Unity生成UI预制体 (Unity3D)

    在Unity中,预制体(Prefab)是一种非常有用的工具,用于生成可重复使用的UI元素。预制体使得UI的创建和管理变得更加简单和高效。在本文中,我们将详细介绍如何使用Unity生成UI预制体,并提供相应的源代码示例。 步骤1:创建UI元素 首先,我们需要创建UI元素,例如按钮、

    2024年02月05日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包