当前位置: 首页 > news >正文

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博客

相关文章:

U3D的.Net学习

Mono&#xff1a;这是 Unity 最初采用的方式&#xff0c;它将 C# 代码编译为中间语言 (IL)&#xff0c;然后在目标平台上使用虚拟机 (VM) 将其转换为本地机器码执行。 IL2CPP&#xff1a;这是一种较新的方法&#xff0c;它会将 C# 代码先编译为 C 代码&#xff0c;再由 C 编译器…...

Tomcat下载配置

目录 Win下载安装 Mac下载安装配置 Win 下载 直接从官网下载https://tomcat.apache.org/download-10.cgi 在圈住的位置点击下载自己想要的版本 根据自己电脑下载64位或32位zip版本 安装 Tomcat是绿色版,直接解压到自己想放的位置即可 Mac 下载 官网 https://tomcat.ap…...

adb常用指令(完整版)

1、adb devices 查看是否连接到设备 2、adb install [-r] [-s] 安装app&#xff0c;-r强制&#xff0c;-s安装sd卡上 3、adb uninstall [-k] 卸载app&#xff0c;-k保留配置和参数 4、adb push 把本地文件上传设备 5、adb pull 下载文件到本地 6、cd D:\sdk\platform-tool…...

大数据学习(36)- Hive和YARN

&&大数据学习&& &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 承认自己的无知&#xff0c;乃是开启智慧的大门 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4dd;支持一下博主哦&#x1f91…...

C# ASP.NET MVC项目内使用ApiController

1.在App_Start文件夹新建WebApiConfig.cs文件&#xff0c;建立webApi路由的注册方法。 using System.Web.Http;namespace PrivilegeManager {public class WebApiConfig{public static void Register(HttpConfiguration config){config.MapHttpAttributeRoutes();config.Route…...

Kafka 入门与应用实战:吞吐量优化与与 RabbitMQ、RocketMQ 的对比

前言 在现代微服务架构和分布式系统中&#xff0c;消息队列作为解耦组件&#xff0c;承担着重要的职责。它不仅提供了异步处理的能力&#xff0c;还能确保系统的高可用性、容错性和扩展性。常见的消息队列包括 Kafka、RabbitMQ 和 RocketMQ&#xff0c;其中 Kafka 因其高吞吐量…...

“推理”(Inference)在深度学习和机器学习的语境

“推理”&#xff08;Inference&#xff09;在深度学习和机器学习的语境中&#xff0c;是指使用经过训练的模型对新数据进行预测的过程。将其简单地理解为“模型的应用阶段”。在这一阶段&#xff0c;我们不再进行模型训练&#xff0c;而是利用已训练好且保存下来的模型来获取对…...

字节腾讯阿里大厂面经汇总:Java集合(容器)大厂面试题及参考答案

ArrayList 的扩容机制以及删除操作的时间复杂度 ArrayList 是 Java 中非常常用的一个集合类,它是基于数组实现的动态数组。当我们创建一个 ArrayList 时,如果不指定初始容量,它会有一个默认的初始容量(通常是 10)。当我们向 ArrayList 中添加元素时,如果元素的数量达到了…...

数据结构(初阶)(一)----算法复杂度

算法复杂度 算法复杂度数据结构算法算法效率复杂度的概念 数据结构 数据结构(Data Structure)是计算机存储、组织数据的⽅式&#xff0c;指相互之间存在⼀种或多种特定关系的数据元素的集合。没有⼀种单⼀的数据结构对所有⽤途都有⽤&#xff0c;所以我们要学各式各样的数据结…...

构建高效稳定的网络环境

概述 网络技术是当今IT行业的重要组成部分&#xff0c;构建高效稳定的网络环境对于企业、个人和互联网发展至关重要。本文将探讨网络技术中的关键要素&#xff0c;包括网络协议、网络架构、网络安全和网络优化&#xff0c;并提供实用的技巧和最佳实践&#xff0c;以帮助您构建…...

使用Edge打开visio文件

使用Edge打开visio文件 打开Edge浏览器搜索‘vsdx edge’ 打开第一个搜索结果 Microsoft Support 根据上述打开的页面进行操作 第一步&#xff1a;安装Visio Viewer 第二步&#xff1a;添加注册表 桌面新增文本文件&#xff0c;将下面的内容放入新建文本中&#xff0c;修…...

ChatGPT Prompt 编写指南

一、第一原则&#xff1a;明确的意图​ 你需要明确地表达你的意图和要求&#xff0c;尽可能具体、描述性、详细地描述所需的上下文、你期望的结果等。你的要求越明确&#xff0c;越有希望获得你想要的答案。​ 糟糕的案例 ❌​ ​ 写一首关于 OpenAI 的诗。​ ​ 更好的案…...

蚁群算法 (Ant Colony Optimization) 算法详解及案例分析

蚁群算法 (Ant Colony Optimization) 算法详解及案例分析 目录 蚁群算法 (Ant Colony Optimization) 算法详解及案例分析1. 引言2. 蚁群算法 (ACO) 算法原理2.1 蚂蚁觅食行为2.2 算法步骤2.3 数学公式3. 蚁群算法的优势与局限性3.1 优势3.2 局限性4. 案例分析4.1 案例1: 旅行商…...

安卓动态设置Unity图形API

命令行方式 Unity图像api设置为自动,安卓动态设置Vulkan、OpenGLES Unity设置 安卓设置 创建自定义活动并将其设置为应用程序入口点。 在自定义活动中,覆盖字符串UnityPlayerActivity。updateunitycommandlineararguments (String cmdLine)方法。 在该方法中,将cmdLine…...

通信协议—WebSocket

一、WebSocket编程概念 1.1 什么是WebSocket WebSocket 是一种全双工通信协议&#xff0c;允许在客户端&#xff08;通常是浏览器&#xff09;和服务器之间建立持久连接&#xff0c;以实现实时的双向通信。它是 HTML5 标准的一部分&#xff0c;相比传统的 HTTP 请求&#xff…...

helm推送到harbor私有库--http: server gave HTTP response to HTTPS client

harbor私有库访问的是http模式 harbor 2.8版本以上可以存储helm镜像 docker镜像推送的时候需要docker端配置insecure-registries 发现helm推送只能在harbor部署的本机使用localhost才能推送成功&#xff0c;即 helm push xxx.tgz oci://localhost:80/library 使用helm pus…...

数据结构——实验一·线性表

海~~欢迎来到Tubishu的博客&#x1f338;如果你也是一名在校大学生&#xff0c;正在寻找各种变成资源&#xff0c;那么你就来对地方啦&#x1f31f; Tubishu是一名计算机本科生&#xff0c;会不定期整理和分享学习中的优质资源&#xff0c;希望能为你的编程之路添砖加瓦⭐&…...

快速搭建深度学习环境(Linux:miniconda+pytorch+jupyter notebook)

本文基于服务器端环境展开&#xff0c;使用的虚拟终端为Xshell。 miniconda miniconda是Anaconda的轻量版&#xff0c;仅包含Conda和Python&#xff0c;如果只做深度学习&#xff0c;可使用miniconda。 [注]&#xff1a;Anaconda、Conda与Miniconda Conda&#xff1a;创建和管…...

OpenCV相机标定与3D重建(66)对立体匹配生成的视差图(disparity map)进行验证的函数validateDisparity()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 使用左右检查来验证视差。矩阵 “cost” 应该由立体对应算法计算。 cv::validateDisparity 函数是 OpenCV 库中用于对立体匹配生成的视差图&…...

2025年新开局!谁在引领汽车AI风潮?

汽车AI革命已来。 在2025年伊始开幕的CES展上&#xff0c;AI汽车、AI座舱无疑成为了今年汽车行业的最大热点。其中不少车企在2025年CES上展示了其新一代AI座舱&#xff0c;为下一代智能汽车的人机交互、场景创新率先打样。 其中&#xff0c;东软集团也携带AI驱动、大数据支撑…...

Spring自定义BeanPostProcessor实现bean的代理Java动态代理知识

上文&#xff1a;https://blog.csdn.net/qq_26437925/article/details/145241149 中大致了解了spring aop的代理的实现&#xff0c;其实就是有个BeanPostProcessor代理了bean对象。顺便复习下java代理相关知识 目录 自定义BeanPostProcessor实现aopJava动态代理知识动态代理的几…...

三篇物联网漏洞挖掘综述

由于物联网设备存在硬件资源受限、硬件复杂异构&#xff0c; 代码、文档未公开的问题&#xff0c; 物联网设备的漏洞挖掘存在较大的挑战&#xff1a; 硬件资源受限性: 通用动态二进分析技术需要在运行程序外围实施监控分析。由于物联网设备存储资源(存储)的受限性&#xff0c;…...

Pytorch深度学习指南 卷I --编程基础(A Beginner‘s Guide) 第1章 一个简单的回归

本章正式开始使用pytorch的接口来实现对应的numpy的学习的过程&#xff0c;来学习模型的实现&#xff0c;我们会介绍numpy是如何学习的&#xff0c;以及我们如何一步步的通过torch的接口来实现简单化的过程&#xff0c;优雅的展示我们的代码&#xff0c;已经我们的代码完成的事…...

【EXCEL_VBA_实战】多工作薄合并深入理解

工作背景&#xff1a;多个工作薄存在冲突的名称&#xff0c;需快速合并 困难点&#xff1a;工作表移动复制时&#xff0c;若有冲突的名称&#xff0c;会不断弹出对话框待人工确认 思路&#xff1a;利用代码确认弹出的对话框 关键代码&#xff1a;Application.DisplayAlerts …...

mysql之表的外键约束

MySQL表的外键约束详细介绍及代码示例 外键约束是数据库中用于维护数据完整性和一致性的重要机制。它确保一个表中的数据与另一个表中的数据相关联&#xff0c;防止无效的数据引用。本文将详细介绍了外键约束的各个方面&#xff0c;并通过具体的代码示例进行演示。 1. 外键约束…...

Tuning the Go HTTP Client Settings

记录一次Go HTTP Client TIME_WAIT的优化 业务流程 分析 通过容器监控发现服务到事件总线的负载均衡之间有大量的短链接&#xff0c;回看一下代码 发送请求的代码 func SendToKEvent(ev *KEvent) error {data, err : json.Marshal(ev.Data)if err ! nil {return err}log.Pri…...

第二十四课 Vue中子组件调用父组件数据

Vue中子组件调用父组件数据 Vue是不建议在不同的组件直接传递值的&#xff0c;我们需要使用props方法来进行组件间的值传递 子组件调用父组件数据 父模板的数据&#xff0c;子组件是无法直接调用的 无法直接调用 1&#xff09;组件调用顶级对象中的data <div class&quo…...

Jenkins-pipeline语法说明

一. 简述&#xff1a; Jenkins Pipeline 是一种持续集成和持续交付&#xff08;CI/CD&#xff09;工具&#xff0c;它允许用户通过代码定义构建、测试和部署流程。 二. 关于jenkinsfile&#xff1a; 1. Sections部分&#xff1a; Pipeline里的Sections通常包含一个或多个Direc…...

小米Vela操作系统开源:AIoT时代的全新引擎

小米近日正式开源了其物联网嵌入式软件平台——Vela操作系统&#xff0c;并将其命名为OpenVela。这一举动在AIoT&#xff08;人工智能物联网&#xff09;领域掀起了不小的波澜&#xff0c;也为开发者们提供了一个强大的AI代码生成器和开发平台。OpenVela项目源代码已托管至GitH…...

NodeJs如何做API接口单元测试? --【elpis全栈项目】

NodeJs API接口单元测试 api单元测试需要用到的 assert&#xff1a;断言库 (还要一些断言库比如:Chai)supertest&#xff1a; 模拟http请求 简单的例子&#xff1a; const express require(express); const supertest require(supertest); const assert require(assert);…...