Unity云游戏模板搭建
一、nodejs新建一个工程环境的搭建
使用webstorm新建一个空工程
利用 webstorm的命令行
npm init
输入各种信息
会生成一个package.json文件,以后想修改可以修改这里里面的东西
npm install --save express
npm install --save 其他的包名
1.nodejs启动一个webserer服务
1 2 3 4 5 6 | var http = require( 'http' ); http.createServer(function (req, res) { res.writeHead(200, { 'Content-Type' : 'text/plain' }); res.end( 'Hello World\n' ); }).listen(1337, '127.0.0.1' ); console.log( 'Server running at http://127.0.0.1:1337/' ); |
保存为webserver.js文件,使用
node webserver.js
执行,然后在浏览器里面访问:
http://127.0.0.1:1337/
可以观察到hello world
二、Nodejs与Unity的链接测试
前言
最近想研究下帧同步的问题,首先先解决unity客户端和服务器的通信问题。被之前的同事一直安利nodejs,所以自己就尝试下用nodejs搭建服务器,来实现和unity的通信。
本文用的第三方插件为Socket.IO,在unity的asset store中大家可以自行去下载
NodeJS部分
首先搭建一个空的nodejs工程,然后安装我们需要的两个软件包,express和socket.io
npm install express
npm install socket.io
安装成功后新建一个main.js脚本,内容如下,这段代码的作用通俗点讲就是启动一个socket,当有客户端连接的时候就会执行connection事件中的函数体。
// 官方连接:https://socket.io/ var io = require('socket.io')(8078); console.log('server start'); io.on('connection', function (socket) { console.log('client connection'); //触发客户端注册的自定义事件 socket.emit('ClientListener', { hello: 'world' }); //注册服务器的自定义事件 socket.on('ServerListener', function (data, callback) { console.log('ServerListener email:' + data['email']); callback({ abc: 123 }); }); //断开连接会发送 socket.on('disconnect', function () { console.log('client disconnected'); }); });
然后我们在命令行下启动这个服务器即可:
Unity客户端部分:
下载好Socket.IO后,导入我们的工程当中,然后将SocketIO的prefab拖入到场景当中,修改url当中的ip地址为我们nodejs中的ip地址。
这个时候,其实我们只有启动客户端,就会发现已经能够连接上nodejs服务器了。如图
紧接着,我们可以写一下业务代码,新建一个SocketManager.cs文件,用来管理这个socket组件,绑定在SocketIO物体上,如下:
using SocketIO; using System.Collections.Generic; using UnityEngine; namespace Tool { public class SocketManager : MonoBehaviour { SocketIOComponent m_socket; void Start () { m_socket = GetComponent<SocketIOComponent>(); if(m_socket != null) { //系统的事件 m_socket.On("open", OnSocketOpen); m_socket.On("error", OnSocketError); m_socket.On("close", OnSocketClose); //自定义的事件 m_socket.On("ClientListener", OnClientListener); Invoke("SendToServer", 3); } } public void SendToServer() { Dictionary<string, string> data = new Dictionary<string, string>(); data["email"] = "some@email.com"; m_socket.Emit("ServerListener", new JSONObject(data), OnServerListenerCallback); //断开连接,会触发close事件 //socket.Close(); } #region 注册的事件 public void OnSocketOpen(SocketIOEvent ev) { Debug.Log("OnSocketOpen updated socket id " + m_socket.sid); } public void OnClientListener(SocketIOEvent e) { Debug.Log(string.Format("OnClientListener name: {0}, data: {1}", e.name, e.data)); } public void OnSocketError(SocketIOEvent e) { Debug.Log("OnSocketError: " + e.name + " " + e.data); } public void OnSocketClose(SocketIOEvent e) { Debug.Log("OnSocketClose: " + e.name + " " + e.data); } #endregion public void OnServerListenerCallback(JSONObject json) { Debug.Log(string.Format("OnServerListenerCallback data: {0}", json)); } } }
接着,我们启动客户端,就会有如下Log,说明我们socket连接成功啦!!!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)