简介

在热更工程中使用Json序列化和反序列化和在Unity中差不多,只是需要在Unity中进行热更新Json注册就行。

使用流程

  1. 和之前文章一样初始化appdomain
 //大家在正式项目中请全局只创建一个AppDomainAppDomain appdomain;System.IO.MemoryStream fs;System.IO.MemoryStream p;void Start(){StartCoroutine(LoadHotFixAssembly());}IEnumerator LoadHotFixAssembly(){//首先实例化ILRuntime的AppDomain,AppDomain是一个应用程序域,每个AppDomain都是一个独立的沙盒appdomain = new ILRuntime.Runtime.Enviorment.AppDomain();//正常项目中应该是自行从其他地方下载dll,或者打包在AssetBundle中读取,平时开发以及为了演示方便直接从StreammingAssets中读取,//正式发布的时候需要大家自行从其他地方读取dll//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//这个DLL文件是直接编译HotFix_Project.sln生成的,已经在项目中设置好输出目录为StreamingAssets,在VS里直接编译即可生成到对应目录,无需手动拷贝
#if UNITY_ANDROIDWWW www = new WWW(Application.streamingAssetsPath + "/HotFix_Project.dll");
#elseWWW www = new WWW("file:///" + Application.streamingAssetsPath + "/HotFix_Project.dll");
#endifwhile (!www.isDone)yield return null;if (!string.IsNullOrEmpty(www.error))UnityEngine.Debug.LogError(www.error);byte[] dll = www.bytes;www.Dispose();//PDB文件是调试数据库,如需要在日志中显示报错的行号,则必须提供PDB文件,不过由于会额外耗用内存,正式发布时请将PDB去掉,下面LoadAssembly的时候pdb传null即可
#if UNITY_ANDROIDwww = new WWW(Application.streamingAssetsPath + "/HotFix_Project.pdb");
#elsewww = new WWW("file:///" + Application.streamingAssetsPath + "/HotFix_Project.pdb");
#endifwhile (!www.isDone)yield return null;if (!string.IsNullOrEmpty(www.error))UnityEngine.Debug.LogError(www.error);byte[] pdb = www.bytes;fs = new MemoryStream(dll);p = new MemoryStream(pdb);try{appdomain.LoadAssembly(fs, p, new ILRuntime.Mono.Cecil.Pdb.PdbReaderProvider());}catch{Debug.LogError("加载热更DLL失败,请确保已经通过VS打开Assets/Samples/ILRuntime/1.6/Demo/HotFix_Project/HotFix_Project.sln编译过热更DLL");}#if DEBUG && (UNITY_EDITOR || UNITY_ANDROID || UNITY_IPHONE)//由于Unity的Profiler接口只允许在主线程使用,为了避免出异常,需要告诉ILRuntime主线程的线程ID才能正确将函数运行耗时报告给Profilerappdomain.UnityMainThreadID = System.Threading.Thread.CurrentThread.ManagedThreadId;
#endifInitializeILRuntime();OnHotFixLoaded();}
  1. Unity项目InitializeILRuntime方法中注册LitJson
    void InitializeILRuntime(){//这里做一些ILRuntime的注册,这里我们对LitJson进行注册LitJson.JsonMapper.RegisterILRuntimeCLRRedirection(appdomain);}
  1. Unity项目中调用热更工程中Json序列化方法,类中和常规C#工程基本一样,没有特殊做法
    void OnHotFixLoaded(){//调用无参数静态方法,appdomain.Invoke("类名", "方法名", 对象引用, 参数列表);appdomain.Invoke("HotFix_Project.TestJson", "RunTest", null, null);}
  1. 热更工程中的Json序列化测试类
 public class TestJson{enum JsonTestEnum{Test1,Test2,Test3,}class JsonTestClass{public int IntProp { get; set; }public string StringProp { get; set; }public JsonTestEnum EnumProp { get; set; }public JsonTestSubClass SubClassProp { get; set; }public Dictionary<string, JsonTestSubClass> DicTest { get; set; }public Dictionary<string, int> DicTest2 { get; set; }}class JsonTestSubClass{public long LongProp { get; set; }public List<JsonTestSubClass> SubClassList { get; set; }public JsonTestSubClass[] ArrayProp { get; set; }}public static void RunTest(){JsonTestClass cls = new JsonTestClass();cls.IntProp = 1;cls.StringProp = "2";cls.EnumProp = JsonTestEnum.Test3;var sub = new JsonTestSubClass();sub.LongProp = 4;var sub2 = new JsonTestSubClass();sub2.LongProp = 5;var sub3 = new JsonTestSubClass();sub3.LongProp = 6;cls.SubClassProp = sub;sub.ArrayProp = new JsonTestSubClass[2];sub.ArrayProp[0] = sub2;sub.ArrayProp[1] = sub3;sub.SubClassList = new List<JsonTestSubClass>();sub.SubClassList.Add(sub2);sub.SubClassList.Add(sub3);cls.DicTest = new Dictionary<string, JsonTestSubClass>();cls.DicTest["11111"] = sub;cls.DicTest2 = new Dictionary<string, int>();cls.DicTest2["111222"] = 333444;var str = JsonMapper.ToJson(cls);Debug.Log("---------------");Debug.Log(str);Debug.Log("---------------");var cls2 = JsonMapper.ToObject<JsonTestClass>(str);Debug.Log(cls2.SubClassProp.ArrayProp[0].LongProp);Debug.Log(cls2.SubClassProp.ArrayProp[1].LongProp);Debug.Log(cls2.SubClassProp.SubClassList[0].LongProp);Debug.Log(cls2.SubClassProp.SubClassList[1].LongProp);Debug.Log(cls2.DicTest["11111"].LongProp);Debug.Log(cls2.DicTest2["111222"]);}}

ILRuntime入门11 LitJson相关推荐

  1. Cesium入门11 - Interactivity - 交互性

    Cesium入门11 - Interactivity - 交互性 Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com/ ...

  2. Wayland入门11:shell unstable协议

    上一篇介绍的是stable版的协议,本文介绍unstable版的协议. 窗口部分是一样的. 我们使用新协议的对象 struct zxdg_shell_v6 *xdg_shell; struct zxd ...

  3. Kotlin入门(11)江湖绝技之特殊函数

    上一篇文章介绍了Kotlin对函数的输入参数所做的增强之处,其实函数这块Kotlin还有好些重大改进,集中体现在几类特殊函数,比如泛型函数.内联函数.扩展函数.尾递归函数.高阶函数等等,因此本篇文章就 ...

  4. 【个人笔记】OpenCV4 C++ 快速入门 11课

    个人资料,仅供学习使用 修改时间--2022年2月13日 10:24:45 学习课程:OpenCV4 C++ 快速入门视频30讲 视频老师:贾志刚 11 通道分离与合并 opencv知识点: 通道分离 ...

  5. 嵌入式Linux入门11:应用层编程应用和分类

    本文针对Linux系统环境应用层的编程应用做一个概述. 有的人把Linux底层和应用层严格区分对待,在一定程度上是没有错误的.但很多时候需要进行交叉学习.比如,编写了底层驱动程序,如何验证这个驱动能正 ...

  6. Home Assistant入门1-1:在树莓派上安装官方系统

    Home Assistant OS在树莓派上安装的教程 写在前面 因为做毕业设计设计到智能家居,想用Home Assistant去做一个只能家居的整合,同时也可以把家里的智能家居的整合一下,方便家里人 ...

  7. ILRuntime入门05 类继承

    使用流程 我们可能需要热更工程去继承Unity工程中的类,那么我们就需要为其写一个适配器,具体流程如下: 新建Unity工程父类 public abstract class TestClassBase ...

  8. ILRuntime入门12 类型绑定

    简介 在ILRuntime中,如果不对Unity特定数据类型进行绑定,也是可以使用的,但是会产生较多额外的CPU开销和GC.我们只需要在热更使用前,对需要用的Unity特殊数据类型进行绑定后就能高性能 ...

  9. PS入门(1-1) RGB色彩模式

    1-1 RGB色彩模式 我们用放大镜就近观电脑显示器或电视机的屏幕,会看到数量极多的分为红色绿色蓝色三种颜色的小点.如下左图,下右图是左图的局部放大.屏幕上的所有颜色,也就是我们看到的所有图像内容,都 ...

  10. 复杂的数据类型5 - C++快速入门11

    复杂的数据类型5 让编程改变世界 Change the world by program 对象的基础 -- 结构 C语言和C++有许多共同的优美之处.其中之一便是程序员不必受限于这两种语言自带的数据类 ...

最新文章

  1. linux程序计数器,如何在C中打印程序计数器的确切值
  2. 95后程序员业余帮人鉴定毒蘑菇,竟成百万粉丝的网络大V!
  3. 为什么`[`比`子集更好?
  4. 图像的七个不变矩 可用于图像的匹配
  5. 红管2不显示服务器,红色管弦乐队2怎么建立服务器 | 手游网游页游攻略大全
  6. 业务分析之--权限管理
  7. 2×3卡方检验prism_分类变量的相关性:五分钟掌握卡方检验「从理论到Python实战」...
  8. java vector_Java Vector elements()方法与示例
  9. 『电子书』分享一波码农必备编程开发类书籍[转]
  10. 计算机软考笔记之《数据库基础》
  11. Vue列表搜索和排序---vue工作笔记0010
  12. [VSCode] 设置 pylint 以解决 Module ‘torch‘ has no ‘xxx‘ member
  13. SQL查询语句精华 笔记
  14. CE6870 添加ipv6 策略路由失败问题解决
  15. 『动态规划』最大子段和
  16. Android端公司通讯录开发与实现(一)
  17. 计算机IP名词解释,IP地址的名词解释
  18. ITIL 4 Foundation-指导原则
  19. 浅谈中国现货市场环境对期货市场发展的影响
  20. 抖音短视频吃鸡戏精野生脆脆如何上的热门

热门文章

  1. Windows界面UI自绘编程(上)之下部
  2. 17计算机病毒,计算机病毒的病毒的分类川大《计算机文化基础0008》17秋在
  3. 推荐5款精挑细选的软件,大幅提升工作效率,用一次就会爱上
  4. 单片机---HLK-W801图形框架LVGL下开发(四)
  5. 百度知道,每天电影资源轻松引流赚钱小项目!
  6. Maven学习—Nexus3私服搭建
  7. 软件测试---------兼容性 / 安装卸载 / 易用性测试点(超详细)
  8. 魔兽争霸3 冰封王座 w3g文件如何打开
  9. Java环境变量配置(详细操作)
  10. 数字图像处理 冈萨雷斯 (内含算法链接)