U3D的.Net学习

Mono:这是 Unity 最初采用的方式,它将 C# 代码编译为中间语言 (IL),然后在目标平台上使用虚拟机 (VM) 将其转换为本地机器码执行。


IL2CPP:这是一种较新的方法,它会将 C# 代码先编译为 C++ 代码,再由 C++ 编译器生成针对特定平台优化后的二进制文件。这种方法通常能带来更好的性能,并且更容易集成到不同的操作系统中。
IL2CPP 提供了一些显著的优点,比如更高的运行效率和更小的应用体积。然而,它也有一些局限性,例如无法像 Mono 那样动态生成代码,这意味着你必须提前确定所有要用到的类型。如果某些类型是在运行时才决定使用的(例如通过反射或泛型),那么你需要采取特别措施来确保它们不会被裁剪掉。
     

1、调整剥离级别                  

在Unity的设置中,有一个叫做“Managed Stripping Level”的选项,可以选择不同的级别,控制IL2CPP的裁剪程度:

2、使用Link.xml文件

你可以通过在Unity项目中(或其任何子目录中)创建一个Link.xml文件,告诉Unity哪些类型不能被删掉,确保它们在打包时不会被裁剪掉。

link.xml语法规则

<?xml version="1.0" encoding="UTF-8"?><!--保存整个程序集--><assembly fullname="UnityEngine" preserve="all"/><!--没有“preserve”属性,也没有指定类型意味着保留所有--><assembly fullname="UnityEngine"/><!--完全限定程序集名称--><assembly fullname="Assembly-CSharp, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"><type fullname="Assembly-CSharp.Foo" preserve="all"/></assembly><!--在程序集中保留类型和成员--><assembly fullname="Assembly-CSharp"><!--保留整个类型--><type fullname="MyGame.A" preserve="all"/><!--没有“保留”属性,也没有指定成员 意味着保留所有成员--><type fullname="MyGame.B"/><!--保留类型上的所有字段--><type fullname="MyGame.C" preserve="fields"/><!--保留类型上的所有方法--><type fullname="MyGame.D" preserve="methods"/><!--只保留类型--><type fullname="MyGame.E" preserve="nothing"/><!--仅保留类型的特定成员--><type fullname="MyGame.F"><!--类型和名称保留--><field signature="System.Int32 field1" /><!--按名称而不是签名保留字段--><field name="field2" /><!--方法--><method signature="System.Void Method1()" /><!--保留带有参数的方法--><method signature="System.Void Method2(System.Int32,System.String)" /><!--按名称保留方法--><method name="Method3" /><!--属性--><!--保留属性--><property signature="System.Int32 Property1" /><property signature="System.Int32 Property2" accessors="all" /><!--保留属性、其支持字段(如果存在)和getter方法--><property signature="System.Int32 Property3" accessors="get" /><!--保留属性、其支持字段(如果存在)和setter方法--><property signature="System.Int32 Property4" accessors="set" /><!--按名称保留属性--><property name="Property5" /><!--事件--><!--保存事件及其支持字段(如果存在),添加和删除方法--><event signature="System.EventHandler Event1" /><!--根据名字保留事件--><event name="Event2" /></type><!--泛型相关保留--><type fullname="MyGame.G`1"><!--保留带有泛型的字段--><field signature="System.Collections.Generic.List`1&lt;System.Int32&gt; field1" /><field signature="System.Collections.Generic.List`1&lt;T&gt; field2" /><!--保留带有泛型的方法--><method signature="System.Void Method1(System.Collections.Generic.List`1&lt;System.Int32&gt;)" /><!--保留带有泛型的事件--><event signature="System.EventHandler`1&lt;System.EventArgs&gt; Event1" /></type><!--如果使用类型,则保留该类型的所有字段。如果类型不是用过的话会被移除--><type fullname="MyGame.I" preserve="fields" required="0"/><!--如果使用某个类型,则保留该类型的所有方法。如果未使用该类型,则会将其删除--><type fullname="MyGame.J" preserve="methods" required="0"/><!--保留命名空间中的所有类型--><type fullname="MyGame.SomeNamespace*" /><!--保留名称中带有公共前缀的所有类型--><type fullname="Prefix*" /></assembly>
</linker>

学习自:【unity进阶篇】unity如何实现跨平台及unity最优最小包体打包方式(.NET、Mono和IL2CPP知识介绍)-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/67982.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java集合学习:HashMap的原理

一、HashMap里的Hash是什么&#xff1f; 首先&#xff0c;我们先要搞清楚HashMap里的的Hash是啥意思。 当我们在编程过程中&#xff0c;往往需要对线性表进行查找操作。 在顺序表中查找时&#xff0c;需要从表头开始&#xff0c;依次遍历比较a[i]与key的值是否相等&#xff…

SOAFEE 技术研讨会:汽车软件定义与自动驾驶技术探讨

在本次技术研讨会上&#xff0c;来自汽车与科技领域的专家们围绕汽车软件定义及自动驾驶技术展开了深入交流与探讨。从 SOAFEE 蓝图计划的创新性理念&#xff0c;到 Autoware 开源项目及 Open AD Kit 在实际应用中的探索&#xff0c;再到 Edge Workload Abstraction and Orches…

FastJson很快,有什么用?

FastJson 在国内的热度还是挺高的&#xff0c;受到了很多开发者的喜欢。不过&#xff0c;我自己倒没有在项目中用过。我记得刚工作那会新做的一个项目有明确规定禁止使用 FastJson。 昨天看到一篇关于 FastJson 的文章&#xff0c;这位朋友分享了自己在使用 FastJson 遇到的一…

react antd点击table单元格文字下载指定的excel路径

在使用 Ant Design (antd) 的 Table 组件时&#xff0c;如果想点击表格单元格中的文字来触发下载指定路径的 Excel 文件&#xff0c;可以通过以下步骤实现&#xff1a; 1. 确保有一个可供下载的 Excel 文件&#xff1a;需要有一个服务器端点或者一个可以直接访问的 URL&#xf…

Jetson nano 安装 PCL 指南

本指南帮助 ARM64 架构的 Jetson Nano 安装 PCL&#xff08;点云库&#xff09;。 安装步骤 第一步&#xff1a;安装依赖 在终端中运行以下命令&#xff0c;安装 PCL 所需的依赖&#xff1a; sudo apt-get update sudo apt-get install git build-essential linux-libc-dev s…

ansible自动化运维实战--软件包管理模块、服务模块、文件模块和收集模块setup(4)

文章目录 一、软件包管理模块1.1、功能1.2、常用参数1.3、示例 二、服务模块2.1、功能2.2、服务模块常用参数2.3、示例 三、文件与目录模块3.1、file功能3.2、常用参数3.3、示例 四、收集模块-setup4.1、setup功能4.2、示例 一、软件包管理模块 1.1、功能 Ansible 提供了多种…

终极的复杂,是简单

软件仿真拥有最佳的信号可见性和调试灵活性,能够高效捕获很多显而易见的常见错误,被大多数工程师熟练使用。 空间领域应用的一套数据处理系统(Data Handling System),采用抗辐FPGA作为主处理器,片上资源只包含10752个寄存器,软仿也是个挺花时间的事。 Few ms might take …

cuda的并行运算介绍

cuda是如何使用GPU并行运算的&#xff1a; 以一个函数为例&#xff1a; duplicateWithKeys << <(P 255) / 256, 256 >> > (P,geomState.means2D,geomState.depths,geomState.point_offsets,binningState.point_list_keys_unsorted,binningState.point_list_…

开关电源设计(2)–BUCK电路设计和计算过程

BUCK电路也即降压电路&#xff0c;是应用最广泛的DC-DC变换器 需求决定的参数 V i 和 V o V_{i} 和V_{o} Vi​和Vo​ f f f I o I_{o} Io​ 输出电压纹波率 效率 需要计算:电感量 r r r 占空比 C 参数计算&#xff1a; 当MOS管导通时&#xff0c;电感电压 V O N V i − …

cudatex文本编辑器

一、下载 通过网盘分享的文件&#xff1a;cudatext 链接: https://pan.baidu.com/s/1TZbGk3AM09SuKvvcQy0d6Q?pwdbbzd 提取码: bbzd 本链接分享的为2025年1月下载上传的软件&#xff0c;版本为1.220.6.1 &#xff1b;软件皆已放入中文包。 二、设置中文简体 打开 https://…

打造本地音乐库

文章目录 存储介质硬盘&#xff08;NAS&#xff09;媒体播放器&#xff08;可视MP3、MP4&#xff09;实体介质&#xff08;CD光盘、黑胶片&#xff09;注意事项为什么不使用在线音乐&#xff08;App&#xff09;和网盘打造一套HiFi系统的成本非常高 获取音乐正版音乐途径免费音…

leetcode_链表 21.合并两个有序链表

21.合并两个有序链表 将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。思路&#xff1a; 定义一个哑节点&#xff08;dummy node&#xff09;&#xff0c;哑节点是一个初始的虚拟节点&#xff0c;它不存储有效值&#xff0c;只…

`std::make_shared` 无法直接用于单例模式,因为它需要访问构造函数,而构造函数通常是私有的

std::make_shared 在创建对象时会调用构造函数&#xff0c;而在单例模式下&#xff0c;构造函数通常是私有的&#xff0c;因此不能直接通过 std::make_shared 来创建对象。 为什么 std::make_shared 不适用于单例模式&#xff1f; 在单例模式中&#xff0c;我们希望确保一个类…

Python 类和对象:详细讲解中篇

文章目录 Python 类和对象&#xff1a;详细讲解前言9. 方法重写&#xff08;Method Overriding&#xff09;9.1 为什么需要方法重写&#xff1f;9.2 方法重写的基本示例9.3 代码详解 10. 多继承&#xff08;Multiple Inheritance&#xff09;10.1 多继承的概念10.2 多继承的示例…

C语言文件操作:标准库与系统调用实践

目录 1、C语言标准库文件操作 1.1.题目要求&#xff1a; 1.2.函数讲解&#xff1a; fopen 函数原型 参数 常用的打开模式 返回值 fwrite函数 函数原型 参数 返回值 注意事项 fseek函数 函数原型 参数 返回值 fread函数 函数原型 参数 返回值 fclose 函数…

一款专业通用开源的MES生产执行管理系统

系统简介 MES系统是一款B/S结构、开源、免费的生产执行管理系统。 此系统基于本人多年离散智造行业的业务经验及J2EE项目经验开发。 主要目的是为国内离散制造业的中小企业提供一个专业化、通用性、低成本的MES系统解决方案。 系统将提供“售前”、“实施”、“用户培训”、…

SpringBoot集成Flink-CDC,实现对数据库数据的监听

一、什么是 CDC &#xff1f; CDC 是Change Data Capture&#xff08;变更数据获取&#xff09;的简称。 核心思想是&#xff0c;监测并捕获数据库的变动&#xff08;包括数据或数据表的插入、 更新以及删除等&#xff09;&#xff0c;将这些变更按发生的顺序完整记录下来&…

Three城市引擎地图插件Geo-3d

一、简介 基于Three开发&#xff0c;为Three 3D场景提供GIS能力和城市底座渲染能力。支持Web墨卡托、WGS84、GCJ02等坐标系&#xff0c;支持坐标转换&#xff0c;支持影像、地形、geojson建筑、道路&#xff0c;植被等渲染。支持自定义主题。 二、效果 三、代码 //插件初始化…

应用层协议 HTTP 讲解实战:从0实现HTTP 服务器

&#x1f308; 个人主页&#xff1a;Zfox_ &#x1f525; 系列专栏&#xff1a;Linux 目录 一&#xff1a;&#x1f525; HTTP 协议 &#x1f98b; 认识 URL&#x1f98b; urlencode 和 urldecode 二&#xff1a;&#x1f525; HTTP 协议请求与响应格式 &#x1f98b; HTTP 请求…

鸿蒙仓颉环境配置(仓颉SDK下载,仓颉VsCode开发环境配置,仓颉DevEco开发环境配置)

目录 ​1&#xff09;仓颉的SDK下载 1--进入仓颉的官网 2--点击图片中的下载按钮 3--在新跳转的页面点击即刻下载 4--下载 5--找到你们自己下载好的地方 6--解压软件 2&#xff09;仓颉编程环境配置 1--找到自己的根目录 2--进入命令行窗口 3--输入 envsetup.bat 4--验证是否安…