功能 | C#Light | C#Like免费版 | C#Like |
委托 | 支持 | 支持 | 支持 |
Lambda | 支持 | 支持 | 支持 |
面向对象 | 类仅能继承接口 | 多了支持partial | 多了构造函数(支持this/base);析构函数;类继承;虚函数 |
运算表达式 | + - * / % += -= *= /= %= > >= < <= != == && || ! ++ --(仅支持i++不支持++i) ?: is as | 多了完全支持++ -- | 多了位运算 & | ~ ^ &= |= ^= << >> <<= >>= |
关键字 | this | this typeof | this base sizeof typeof unsafe $ @ #pragma #warning #error |
命名空间using | 不支持,有名无实,导致每种在热更代码里使用的所有类型必须先非热更注册,非常不便且容易遗漏 | 完整的命名空间功能,无需事先注册类型就能直接使用,使用方便;using指令/别名/static; | 多了using语句 |
异常处理 | throw | 同C#Light | 多了try-catch-finally |
类型 | var void bool float double char string byte sbyte int uint short ushort long ulong null | 同C#Light | 多了支持可空运算?及配套的合并运算?. ?? |
get/set访问器 | 仅支持自动实现的get/set | 同C#Light | 多了可以自定义实现get/set |
循环语句 | for foreach continue break if-else return while do-while | 同C#Light | 多了switch-case-default |
调试 | 能打印报错语句 | 在调试模式下可以使用Visual Studio断点/步进调试,与正常C#一模一样;热更代码模式下当脚本出错可以打印出堆栈数据(文件名/函数名/第几行) | 同C#Like免费版,但支持更多C#特性,大幅减少调试模式和热更代码模式差异 |
编译脚本 | 在运行时编译,视乎你的代码量多少可能会花费几秒甚至超过十几秒,即使已经预编译为Token了 | 所有编译过程都在编辑器里完成,保存为二进制文件,运行时加载时间几乎可以忽略,虽然编译时间也基本一样(首次编译甚至花费更多时间建立缓存数据),但加载时候给玩家极好的体验 | 同C#Like免费版 |
MonoBehaviour | 不支持 | LikeBehaviour仿照MonoBehaviour,让热更脚本直接按MonoBehaviour的方式写代码,热更脚本就像是继承MonoBehaviour一样 | 多了完美支持协程 |
多线程 | 不支持 | 支持 | 支持且多了lock语法 |
注释 | 仅// | 仅// | //和/**/ |
宏定义和区域 | 不支持 | 不支持 | #if #elif #else #endif #region #endregion |
枚举 | 不支持 | 不支持 | 支持 |
参数修饰符 | 不支持 | 不支持 | 支持ref out in params |
函数重载 | 不支持 | 不支持 | 支持 |
默认参数 | 不支持 | 不支持 | 支持 |
CSV | 不支持 | KissCSV | 同C#Like免费版 |
JSON | 无 | KissJSON | 同C#Like免费版 |
Socket/WebSocket | 无 | 超简洁的可热更的接口,提供KissServerFramework(最简洁易用的IOCP服务器框架,用户逻辑单线程,后台数据库多线程,面向对象,操作极简,包含WebSocket/Socket/HTTP/MySQL,你不会用到SQL的,只需定义数据库表结构,即可使用数据且自动和客户端和数据库三者间同步数据) | 同C#Like免费版 |
传统unity代码 | C#Like热更代码 |
传统非热更的代码.我们定义一个最简单的类,继承于MonoBehaviour,调用最常用的几个生命周期函数 | 这里我们写一个跟左边传统unity代码一模一样功能的热更代码,大家可以对比一下两者的区别 |
在预制体中设置 | 纯热更交互 |
如下图,示范如何获取各种数值类数据和绑定的组件.
BindHotUpdateClassFullName为包含完整空间名的类名
![]() |
这个是热更脚本跟Unity交互数据 |
C#Light | C#Like |
必须先在非热更脚本里注册各种类型,才能在热更脚本里使用,且无法使用using来区分同类名不同命名空间的类. | 无需提前注册类型,直接使用.防止项目发布了,突然发现得用某个类却无法使用修改非热更代码就嗝屁了. |
类型裁剪 | 泛型处理 |
IL2CPP会将所有没用到的类型裁剪掉,很遗憾我们非热更的代码刚好是被裁剪的对象, 必须把你将要使用的模块设置为排除.Managed Stripping Level设置Low或Medium(不能选High). 在Unity安装目录Editor\Data\Managed\UnityEngine\里查看一下自己想要的dll,然后自行修改Assets\C#Like\link.xml这个文件 | IL2CPP必须AOT,无法JIT来创建.所有的泛型必须在先在非热更代码使用一次才能非热更代码里使用,我们在编译代码的时候会自动把热更代码里所有需要注册的泛型自动生成Assets\C#Like\Runtime\AheadOfTime\AheadOfTime.cs,理论上你的产品上线时候,基本上可以把所有需要的泛型都注册了.下面是例子自动生成的文件(这个文件别手动修改) |
文件框架目录 下面是搭建整个框架(C#LikeFree+KissServerFramework)的过程,如果只看C#LikeFree部分,可以只看步骤6 |
可以在热更脚本和非热更脚本中完全相同地使用,JSON字符串与对象(含热更或非热更的类或结构体)互相转换,还可以用JSONData做中介,超级方便地使用JSON |
类的功能 |
这里做一个接口IAnimal,然后做一个Mammals继承于接口IAnimal, 通过这1个接口和3个类来说明类的功能 |
委托和Lambda |
测试界面有3个按钮'Test Delegate','Test Lambda','Test Bind'和一个Text组件 |
运算表达式 |
循环语法 |
自定义get/set访问器 |
多线程 |
区域和宏 |
枚举 |
参数修饰符 |
免费版的非热更代码里对应修改: |
默认参数和函数重载 |
关键字 |