WebSoket通信插件用unity自带的插件编译成WebGL后会无法使用,所以需要下载插件进行调用。

一、 WebSocketSharp安装

  • 首先需要下载WebSocketSharp
  • 打开后点击Download package下载在这里插入图片描述
  • 下载后会得到一个:在这里插入图片描述
  • 将后缀改为.zip进行解压
    在这里插入图片描述
  • 解压后会得到一个文件夹,里面有:在这里插入图片描述
  • 将复制lib目录下的websocket-sharp.dll
    在这里插入图片描述
  • 在unity工程下的Assets下创建一个文件夹,取名为Plugins,把websocket-sharp.dll复制到里面
  • 第一步大功告成

二、安装unity-websocket-webgl

  • 打开unity-websocket-webgl
  • 可以选择直接下载压缩包
    在这里插入图片描述
  • 解压后复制Plugins里的内容在这里插入图片描述
  • 同样复制到unity工程下的Assets/Plugins
  • 最终你的unity工程中应该有三个文件,如图:
    在这里插入图片描述

三、本地测试

  • unity中创建一个测试脚本:WebSocketTest,代码如下:
using System.Collections;
using System.Collections.Generic;
using System.Text;
using UnityEngine;
using System;
// Use plugin namespace
using HybridWebSocket;

public class WebSocketTest : MonoBehaviour {

    public string IP;

	// Use this for initialization
	void Start () {

        // Create WebSocket instance
        WebSocket ws = WebSocketFactory.CreateInstance(IP);

        // Add OnOpen event listener
        ws.OnOpen += () =>
        {
            Debug.Log("WS connected!");
            Debug.Log("WS state: " + ws.GetState().ToString());

            ws.Send(Encoding.UTF8.GetBytes("Hello from Unity 3D!"));
        };

        // Add OnMessage event listener
        ws.OnMessage += (byte[] msg) =>
        {
            Debug.Log("WS received message: " + Encoding.UTF8.GetString(msg));

            ws.Close();
        };

        // Add OnError event listener
        ws.OnError += (string errMsg) =>
        {
            Debug.Log("WS error: " + errMsg);
        };

        // Add OnClose event listener
        ws.OnClose += (WebSocketCloseCode code) =>
        {
            Debug.Log("WS closed with code: " + code.ToString());
        };

        // Connect to the server
        ws.Connect();

    }
	
	// Update is called once per frame
	void Update () {
		
	}
}

  • 挂载到一个游戏对象上在这里插入图片描述

  • 然后写一下服务端,我这边是用python写(需要pip install websockets ),代码如下

import asyncio
import websockets

async def echo(websocket, path):
    try:
        async for data in websocket:
            print(data)
    except websockets.exceptions.ConnectionClosed:
        print("连接已关闭")
async def main():
    async with websockets.serve(echo, "127.0.0.1", 2164):
        await asyncio.Future()
asyncio.run(main())

  • 然后将Unity中的IP改为ws://127.0.0.1:2164在这里插入图片描述
  • 先运行Python程序,再运行unity
  • unity中显示:在这里插入图片描述
  • python中显示:在这里插入图片描述
  • 说明成功通信!
  • 编译成WebGL运行后,python中同样会显示。

四、云端测试

  • 如果你有一个云服务器,可以把Python代码移动到云服务器上,然后把Python的127.0.0.1换成0:0:0:0,然后端口换成你开放的端口,正常服务器一般是开放80的,所以最终修改代码如下:
import asyncio
import websockets

async def echo(websocket):
    try:
        async for data in websocket:
            print(data)
    except websockets.exceptions.ConnectionClosed:
        print("连接已关闭")
async def main():
    async with websockets.serve(echo, "0.0.0.0", 80):
        await asyncio.Future()
asyncio.run(main())

  • 然后把unity里的IP改成你的服务器IP在这里插入图片描述

  • 即可进行通信!

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐