English       FAQ(e.g how to update old project to hot update project.)
简体中文     常见问题解答(例如如何把旧项目升级为可热更新项目)

C#Like简介

v1.1 更新日期2023-02-27

C#Like是Unity的热更方案,使用C#语言,相比C#Light而言更加完善,以事实来验证"Like"含义是"喜爱"而非"好像".
重大功能:支持更多的C#语法,极大地完善了类的概念,可以断点调试;无需事先注册类型;直接使用Unity的协程!

C#Like免费版是C#Like的阉割版,你可以在任何地方(含Unity商店)下载它,这是一个免费资源.
无任欢迎传播C#Like免费版,对于热更的个人需求来说,C#Like免费版足以应付.
请勿盗版C#Like,写个插件也是有血有泪.有你的支持我才会做得更好.
中国人不骗中国人.

如果你不符合Unity个人版的条件,你不能将C#Like免费版用于商业用途.
对于拥有Unity个人许可的用户,可以使用C#轻松构建热更新项目;
对于其他的用户,可以通过试用C#Like免费版 来了解C#Like是否值得购买.
C#Like免费版和C#Like目录结构和使用流程是一样的,升级非常方便.

无尽感激开源项目C#Light

下面是免费版和完整版的示范导出WebGL平台的Demo网页 (欢迎导出C#免费版验证热更流程):
C#LikeFree演示      C#Like演示

功能概要对比

功能 C#Light C#Like免费版 C#Like
委托支持支持支持
Lambda支持支持支持
面向对象类仅能继承接口多了支持partial多了构造函数(支持this/base);析构函数;类继承;虚函数
运算表达式+ - * / % += -= *= /= %= > >= < <= != == && || ! ++ --(仅支持i++不支持++i) ?: is as多了完全支持++ --多了位运算 & | ~ ^ &= |= ^= << >> <<= >>=
关键字thisthis typeofthis 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免费版
JSONKissJSON同C#Like免费版
Socket/WebSocket超简洁的可热更的接口,提供KissServerFramework(最简洁易用的IOCP服务器框架,用户逻辑单线程,后台数据库多线程,面向对象,操作极简,包含WebSocket/Socket/HTTP/MySQL,你不会用到SQL的,只需定义数据库表结构,即可使用数据且自动和客户端和数据库三者间同步数据) 同C#Like免费版

C#Like快速了解

传统unity代码C#Like热更代码
传统非热更的代码.我们定义一个最简单的类,继承于MonoBehaviour,调用最常用的几个生命周期函数 这里我们写一个跟左边传统unity代码一模一样功能的热更代码,大家可以对比一下两者的区别

C#Like如何和Unity交互

在预制体中设置纯热更交互
如下图,示范如何获取各种数值类数据和绑定的组件. BindHotUpdateClassFullName为包含完整空间名的类名 这个是热更脚本跟Unity交互数据

C#Like无需事先注册类型

C#LightC#Like
必须先在非热更脚本里注册各种类型,才能在热更脚本里使用,且无法使用using来区分同类名不同命名空间的类. 无需提前注册类型,直接使用.防止项目发布了,突然发现得用某个类却无法使用修改非热更代码就嗝屁了.

IL2CPP裁剪

类型裁剪泛型处理
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#Like使用流程

文件框架目录 下面是搭建整个框架(C#Like+KissServerFramework)的过程,如果只看C#Like部分,可以只看步骤6

便捷的KissJson

可以在热更脚本和非热更脚本中完全相同地使用,JSON字符串与对象(含热更或非热更的类或结构体)互相转换,还可以用JSONData做中介,超级方便地使用JSON

C#Like里的C#特性

类的功能类的功能
这里做一个接口IAnimal,然后做一个抽象基类Animal继承于IAnimal, 然后做一个普通类Mammals继承于Animal,最后普通类Human继承于Mammals. 通过这1个接口和3个类来说明类的功能
委托和Lambda
测试界面有3个按钮'Test Delegate','Test Lambda','Test Bind'和一个Text组件
运算表达式
循环语法
自定义get/set访问器
多线程
区域和宏
枚举
参数修饰符
默认参数和函数重载
关键字

联系我: csharplike@qq.com      粤ICP备17166462号-1