关于TouchSocket Unity学习笔记
前言
真的感谢 若汝棋茗
大佬的开源分享
解决了我一名前端开发人员 写关于后端服务器相关的困扰!!!
大佬的开源项目配套及其齐全,清晰的文档+ 视频教程+ Example 示例
小白上手学习完全没有问题,拿来即用,哈哈哈。
我看全部关于 TouchSocket Unity部分的视频学习. 写篇笔记, 留后续开发备忘
笔记
-
Unity3d Socket网络通信、RPC登录
TouchSocket是基于Net45和.netstandard2.0的,且没有任何其他运行时,是 100%基于C#开发的,所以可以直接用于unity。
但是由于TouchSocket全系都是基于Socket构建的,所以目前无法用于 WebGL。除此之外,支持window、android、ios、linux等平台。目前实测支持Il2cpp编译,支持HybridCLR热更新。
-
在Unity3d里面引用TouchSocket
操作不多废话,教程非常清晰!
【注意】
初始导入示例package文件后,可能会报错
会遇到插件tocken 过期失效的issue
解决办法:重启Unity就好可能
若汝棋茗
大佬仓库中关于Unity Package的文件存在时效性问题
解决办法: 根据视频中的教程需要在Nuget的官网重新替换.dll文件 -
在Unity3d中创建Tcp客户端与C# .Net6控制台通信
关于Tcp 的示例演示
//服务端
private static void StartTcpService(int port)
{
var service = new TcpService();
service.Setup(new TouchSocketConfig()//载入配置
.SetListenIPHosts(new IPHost[] {
new IPHost(port) })
.SetTcpDataHandlingAdapter(() => new FixedHeaderPackageAdapter())
.ConfigurePlugins(a =>
{
a.Add<MyPlguin>();//此处可以添加插件
})
.ConfigureContainer(a =>
{
a.AddConsoleLogger();//添加一个日志注入
}));
service.Start();//启动
service.Logger.Info($"Tcp服务器已启动,端口{
port}");
}
// 客户端
public void Connect()
{
try
{
m_tcpClient.SafeDispose();
m_tcpClient = new TcpClient();
//声明配置
TouchSocketConfig config = new TouchSocketConfig();
config.ConfigureContainer(a =>
{
a.AddLogger(UnityLog.Logger);
})
.ConfigurePlugins(a =>
{
a.Add<MyTcpPlugin>();
})
.SetRemoteIPHost(new IPHost(inputField_Iphost.text))
.SetTcpDataHandlingAdapter(() => new FixedHeaderPackageAdapter());
//载入配置
m_tcpClient.Setup(config);
m_tcpClient.Connect();
}
catch (Exception ex)
{
UnityLog.Logger.Exception(ex);
}
}
tcp的稳定可靠的连接特性
我觉得这个部分可以适用于游戏聊天及消息机制!
- 解决Tcp客户端在Unity里面粘分包的问题
推荐引入FixedHeaderPackageAdapter
.SetTcpDataHandlingAdapter(() => new FixedHeaderPackageAdapter())
- 在Unity3d里面使用Rpc做游戏登录
文件传输
消息机制
友好的代理机制
我觉得可以用于游戏的热更新、ab包加载、服务端Api设计及其他方法响应
扩展学习视频地址 - 优化Unity3d使用Rpc的体验、生成代理调用
后期更新原因更名TouchRpc
为Dmtp
,使用方式大差不差,但功能更为强大
//方式一:客户端代理配置
string codes = service.RpcStore.GetProxyCodes("命名空间");
File.WriteAllText("文件路径",codes);
//方式二:加入Rpc代理插件
//服务端
.ConfigurePlugins(a =>
{
a.UseDmtpRpc();
a.Add<MyTcpRpcPlguin>();
})
//客户端Plugins 窗口配置
代理获取的多种方式:
本地配置
远程配置
url链接下载
Rpc代理插件
- 优化Unity3d的Rpc调用配置
InvokeOption invokeOption =new InvokeOption();
设置消息的反馈类型
重置ID
相关已经被优化了
[DmtpRpc(true)]
-
Unity3d Udp通信、UdpRpc登录
类似Tcp使用,非可靠通信,适用于广播机制及视频流等TouchSocket 加入了允许超过64k的udp消息通信算法
设置其适配器为UdpPackageAdapter
类型即可
最近在花时间,测试Demo及跑通文档教程中的各个 通讯方法功能点
为后期实际搭建项目做准备
目前遇到的问题
Dmtp 在Unity中连接通讯时跑不通
询问大佬本人回复:需要注意Dll版本
解决办法:跟着这个思路,去到nuget 官网 搜到 dll文件,手动替换掉就好了
后期具体花时间测试Dmtp的
- 远程方法api调用
- 大文件传输
- 数据库连接访问
- xml及Json等
测试完后,我再将我的测试Demo 放github上去