UH4L12——协同程序和异步函数
UH4L12——协同程序和异步函数 协同程序和异步函数 之所以需要注册跨域继承适配器,是因为在ILRuntime中的协同程序和异步函数 编译后本质上是通过状态机利用对象的状态来达到的异步,这里面的对象就用到了跨域继承 所以我们需要注册他们的跨域继承适配器来让热更新工程正常使用他们 在ILRuntime热更工程中使用协同程序 如果不注册就直接在热更工程内开启协程,会报错 12345678910111213141516171819public class ILRuntimeMain{ public static void Main() { Lesson16 lesson16 = Camera.main.GetComponent<Lesson16>(); lesson16.StartCoroutine(Lesson16Test()); } public static IEnumerator Lesson16Test() { Debug.Log(0); ...
UH4L11——热更新工程使用MonoBehaviour
UH4L11——热更新工程使用MonoBehaviour 热更新工程使用MonoBehaviour ILRuntime中虽然支持跨域继承MonoBehaviour,但是作者并不建议大家这样做 我们可以通过类似Lua热更中那样,在主工程中实现用于派发生命周期函数的的公共脚本 通过委托或事件达到生命周期函数的调用 ILRuntime不推荐直接使用MonoBehaviour ILRuntime中支持在热更工程中跨域继承MonoBehaviour 注册跨域继承适配器 对泛型方法AddComponent进行重定向(较为复杂) 但是,ILRuntime并不推荐通过跨域继承直接使用MonoBehaviour 推荐大家类似Lua中一样使用MonoBehaviour 在主工程中通过委托或事件的形式派发生命周期函数 到...
UH4L10——值类型绑定
UH4L10——值类型绑定 本章代码关键字 1appDomain.RegisterValueTypeBinder() ...
UH4L9——CLR重定向和CLR绑定
UH4L9——CLR重定向和CLR绑定 CLR是什么 关于CLR是什么,详见:CLR —— 让应用程序在操作系统上运行 CLR(Common Language Runtime)公共语言运行时,它是.Net Framework的基础, 所有的.Net技术都是建立在此之上的,它帮助我们实现了跨语言和跨平台 它是一个在执行时管理代码的代码,提供内存管理、线程管理等等核心服务, 就好像一个小型的操作系统一样,所以形象的把它称为“.Net虚拟机”。 如果想要应用程序在目标操作系统上能够运行,就必须依靠.Net提供的CLR环境来支持 本章代码关键字 1appDomain.RegisterCLRMethodRedirection() //对反射出来的方法消息进行重定向,重定向到另外一个方法上,使得反射调用变为直接调用 CLR重定向和CLR绑定 CLR重定向主要是用于对热更工程中的一些方法进行"挟持",就是将原本的方法"挟持"了,重新实现方法里面的逻辑,达到...
UH4L8——跨域继承Unity中的类
UH4L8——跨域继承Unity中的类 本章代码关键字 1appDomain.RegisterCrossBindingAdaptor() //注册一个生成出来的适配器类,传入适配器对象 代码生成模板: 123456//ILRuntimeCrossBinding.GenerateCrossbindAdapter方法内using (System.IO.StreamWriter sw = new System.IO.StreamWriter("脚本生成路径和文件名")){ sw.WriteLine(ILRuntime.Runtime.Enviorment.CrossBindingCodeGenerator.GenerateCrossBindingAdapterCode(typeof(要跨域继承的类),...
UH4L7——委托调用
UH4L7——委托调用 本章代码关键字 123appDomain.DelegateManager.RegisterFunctionDelegate<>() //注册一种有参数的Action<>委托,以便于IL2CPP打包裁剪后还可以调用appDomain.DelegateManager.RegisterMethodDelegate<>() //注册一种Func<>委托,以便于IL2CPP打包裁剪后还可以调用appDomain.DelegateManager.RegisterDelegateConvertor<>() ...
UFL12-4——大数据数值转字符串方法
UFL12-4——大数据数值转字符串方法 大数据数值转字符串 的方法 我们在游戏开发时,为了避免在界面中显示过长的数值,往往需要把过长数值进行转换 比如:1198678978 转换为 11亿9千万、5328987 转换为 532万8千 因为如果直接在界面上显示过长的数值可能会影响UI布局,而过大的数也可以直接粗略显示可以直接省略后面的内容,显示一个大概数值 因此我们可以将其封装为一个常用方法 需求:以 亿 和 万 作为转换临界点,超过亿,则显示为 n亿n千万,超过万,则显示为 n万n千 这种形式 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647/// <summary>/// 把大数值转换为精简了位数的字符串,大于一亿的转换为n亿n千万,大于一万的转换为n万n千/// </summary>/// <param name="num">要转换的数值</param>///...
UFL12-3——秒转时间字符串相关
UFL12-3——秒转时间字符串相关 秒转时分秒 的方法 我们在游戏开发中界面显示时,经常可能会有这样的需求,要在界面中显示 n时n分n秒 的倒计时, 而一般都是根据倒计时剩余秒数进行转换的,因此我们可以将其封装为一个常用方法 需求: 函数有两个参数:秒数 和 是否忽略0(若为 0时0分53秒 前面的0应该不拼接 直接显示53秒) 可以传入用于拼接的 时分秒 字符 当忽略0时,如果存在时,分和秒也必须显示;如果存在分,秒也必须显示(避免出现 1时53秒、1时5分 这种显示) 由于常常会拼接字符串,为了节约性能,我们在这里可以使用StringBuilder,返回时再转为字符串传递出去 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253private static StringBuilder resultStr = new StringBuilder("");/// <summary>///...
UFL12-2——数字转字符串相关
UFL12-2——数字转字符串相关 转字符串数字前补0 的方法 我们在游戏开发中界面显示时,经常可能会有这样的需求,要在界面中显示: 123000101010 举例: 也就是说想要让某个数字在转换为字符串时,可以指定转换的字符串长度,并且能够在数字前自动的添加0 123456789101112/// <summary>/// 将数值转换为字符串,可以指定长度,长度不足时自动在前面补充0/// </summary>/// <param name="value">要转换的数值</param>/// <param name="len">最短长度,传入的数值长度不足时会补充0</param>/// <returns>转换出来的字符串</returns>public static string GetNumStr(int value, int len){ ...
UFL12-1——字符串拆分方法
UFL12-1——字符串拆分方法 前置知识点:string 中 Split 相关知识点(C#四部曲中) 实现文本工具类中的 字符串拆分方法 我们在配置表中,经常会配置如下格式的字符串数据,例如: 1,10;2,4;32,1 2,11|3,12|4,55 遇到这种数据时,我们往往会使用string中的Split方法进行拆分 我们想要通过封装满足以下的需求 避免符号填写错误,英文字符填写成中文字符 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556/// <summary>/// 拆分字符串,返回字符串数组/// </summary>/// <param name="str">想要被拆分的字符串</param>/// <param name="type">拆分字符类型:1-; 2-, 3-% 4-:...