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连接成功啦!!!

 

posted @   Domefy  阅读(499)  评论(0编辑  收藏  举报
编辑推荐:
· 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)
点击右上角即可分享
微信分享提示