HybridCLR Example

2024-01-15 19:44
文章标签 example hybridclr

本文主要是介绍HybridCLR Example,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

https://gitee.com/weifen/hybrid-clrexample

模拟器测试:

hybridclr 热更真机测试

功能:

  • 一键构建PC,Android整包
  • 一键构建AssetBundle和dll热更
  • 一键本地热更测试
  • 热更构建时检查link和aot
  • sceneTest 测试场景加载
  • AssemblyCSharpHotUpdate 测试Assembly-CSharp作为热更dll加载

热更文件结构:

热更构建的时候会把生成的文件复制到StreamingAssets目录下
如果是构建热更会根据编译目标存放到 FileServer/{buildtarget}下
在这里插入图片描述

link.cs:

	// 整个程序集都不要裁剪private static readonly HashSet<string> assemblyAlls = new HashSet<string>{"mscorlib",};// 构建不同平台时会导致link增删,这里提供额外的补充private static readonly Dictionary<string, List<string>> fixedList = new Dictionary<string, List<string>>(){};

ScriptUpdate.cs:

根据提交记录和上次构建整包对比文件变化,aot出现改动时阻断

热更dll构建:

    private static void HotUpdateDll(BuildTarget buildTarget, bool developmentBuild = false, bool isGenerateAot = false){if (!SettingsUtil.Enable){Debug.Log("HybridCLR unenable");return;}InstallerController installer = new InstallerController();if (!installer.HasInstalledHybridCLR())installer.InstallDefaultHybridCLR();Il2CppDefGeneratorCommand.GenerateIl2CppDef();CompileDllCommand.CompileDll(buildTarget, developmentBuild);// 工程导出后已经裁剪的类不能通过AOT增加?// 暂时热更的时候去除AOT生成if(isGenerateAot){StripAOTDllCommand.GenerateStripedAOTDlls(buildTarget);AOTReferenceGeneratorCommand.GenerateAOTGenericReference(buildTarget);}// 热更可能不能生成桥接函数,暂时先放着MethodBridgeGeneratorCommand.GenerateMethodBridge(buildTarget);}

构建步骤:

  1. 构建时先填充unity平台参数
  2. 根据编译参数填充宏
  3. 构建HybridCLR内容
  4. 构建AssetBundle,【可选】这里是为了用户第一次打开的时候不用再去下载,优化体验用
  5. 构建link
  6. 开始构建

预留了读取buildInfo.json文件方便使用命令行模式启动时读取编译参数,以下为编译参数

    private struct BuildInfo{public BuildTarget buildTarget;public BuildTargetGroup buildTargetGroup;public string localPathName;public UIOrientation orientation;public bool isRoationPortrait;public bool isRoationLeft;public bool isRoationRight;public bool isRoationDown;public bool isEnableHybridCLR;public string identifier;public bool isMono;public BuildType buildType;public bool buildWithDeepProfilingSupport;public bool ExportProject;public string bundleVersion;public int bundleVersionCode;public bool isAssetBundleIncrement;}

这篇关于HybridCLR Example的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/610004

相关文章

Vitis AI 综合实践(DPU example: dpu_resnet50.ipynb)

目录 1. 简介 2. 代码解析 2.1 导入库 2.2 图像预处理 2.3 读取标签 2.4 读取图像 2.5 获取IO形状 2.6 申请内存 2.7 运行推理 2.8 后处理 3. 相关类的介绍 3.1 DpuOverlay 类 3.2 Overlay 类 3.3 Bitsteam 类 3.4 Device 类 3.5 DeviceMeta 元类 3.6 ty

TEngine框架之HybridCLR代码热更

自HybridCLR热更方案出现以来,像之前的主流toLua/xLua/ILRuntime瞬间不香了,算是跨世代的产物引起业界不小的轰动。HybridCLR是一个特性完整、零成本、高性能、低内存的近乎完美的Unity全平台原生c#热更新解决方案。想要详细了解HibirdCLR原理和使用的,可以去官网看下:商业项目案例 | HybridCLR 1.检查安装HybridCLR支持的Unity版本,必

QNN:基于QNN+example重构之后的yolov8det部署

QNN是高通发布的神经网络推理引擎,是SNPE的升级版,其主要功能是: 完成从Pytorch/TensorFlow/Keras/Onnx等神经网络框架到高通计算平台的模型转换; 完成模型的低比特量化(int8),使其能够运行在高通神经网络芯片上; 提供测试工具(qnn-net-run),可以运行网络并保存输出; 提供测试工具(qnn-profile-viewer),可以进行FLOPS、参数量、每

Bluetooth: gatt server example 解读

在 core spec 中有 Example ATT Server contents,这里对此进行解读; Assigned_Numbers.pdf 需要提前准备,可以从 SIG 下载; Step-1 从这个服务看,server handle 是1, 但是第一个 characteristic clare handle是 4,所以不能预设handle 是按顺序连续的; Step-2

example-apisix-1 清空日志之后启动异常处理

异常信息 2024/08/27 11:34:33 [emerg] 1#1: bind() to unix:/usr/local/apisix/conf/config_listen.sock failed (98: Address already in use)nginx: [emerg] bind() to unix:/usr/local/apisix/conf/config_listen.s

Qt Example Callout Extention(about QChart/QGraphicsView/QGraphicsItem)

问题 Qt Example callout 展示了在平面直角坐标系中画tips。知识点涉及到QChart/QGraphicsView/QGraphicsItem。如何在平面直角坐标系中画点、折线、圆、长方形? Example路径 D:\Qt\5.15.2\Src\qtcharts\examples\charts\callout\callout.cpp 代码 main #include

MPC5 software example list

MPC5 software example list

五 Example 3: Connections to Remote Nodes using a Registry

QRemoteObjectRegistry类有什么用?可以参考下图: 在某些应用程序中,需要有多个源,而为每个副本分别连接到每个源则显得很冗余,因此QRemoteObjectRegistryHost的任务是为多个源提供一个连接点,并通过它连接每个副本。 QRemoteObjectRegistry类型的registry属性。而它有两个关键信号: void remoteObjectAdded(c

Java --- serial port communication example codes

/** public SerialBean(int PortID) 本函数构造一个指向特定串口的SerialBean,该串口由参数PortID所指定。PortID = 1 表示COM1,PortID = 2 表示COM2,由此类推。 public int Initialize() 本函数初始化所指定的串口并返回初始化结果。如果初始化成功返回1,否则返回-1。初始化的结果是该串口被Serial

RAG_Example

今天尝试基于langchain进行LLM RAG搭建,感觉使用难度没有想象中大。具体流程参考末尾链接。 主要流程包括下面几个模块,每一个模块都有很多选择,而不是唯一解。 但这里可以感受到潜在的几个问题 1. 文本转换过程中,PDF的信息可能会丢失和损坏。比如对于一个只包含很多小标题的文档,我怀疑是否能够获得足够多的有效信息。此外,一些文档中的信息,是通过图文结合的方式,这种信息是否能有效获取