Unity_IL2CPP常见问题分析

news2024/11/20 0:43:24

Unity 打包il2cpp模式时的常见问题分析

Unity 编辑器模式下是采用.net 虚拟机解释执行.net 代码,发布的时候有两种模式,一种是mono虚拟机模式,一种是il2cpp模式。由于iOS AppStore规定不允许使用虚拟机,所以发布到iOS,Unity采用了il2cpp技术,把IL(.net字节码) 的代码转成c++代码,然后再用xcode来进行编译。发布到Android的时候,可以用mono与il2cpp模式,il2cpp由于转成native code直接在硬件CPU上跑,性能要比虚拟机解释执行要高,所以发布Android的时候我们也采用il2cpp。但是开发者会遇到一些问题mono模式下能正常运行,编译il2cpp模式下会出现问题,如闪退等,本文将il2cpp 打包发布可能遇到的问题,进行分类,分析与总结,希望能给大家提供解决思路与方向。

对啦!这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的零基础小白,也有一些正在从事游戏开发的技术大佬,欢迎你来交流学习。

 

il2cpp模式编译错误

首先遇到的问题是使用il2cpp模式下编译C++代码报错。由于Android/iOS不同的版本对编译器(NDK/xcode)的版本要求也是不同的,而大多数同学下载的NDK/xcode 是网络上的一个版本,不一定匹配上unity 编译Android/iOS时对应的版本,所以如果在发布il2cpp模式过程中,当我们遇到编译错误的时候,首先先编译空项目,看看是不是NDK,SDK,xcode的版本不匹配导致的。Unity Hub 现在也集成了一个功能就是安装对应Unity版本对应的NDK与SDK。安装正确的工具链编译问题一般能很轻松的解决。(如下图所示, Unity hub中不同unity版本,安装相关编译工具时的模块化安装)

Mono模式下没问题, il2cpp模式下报类型缺失错误

 开发完打包的时候,mono模式下没有问题, il2cpp模式下编译通过,但是运行的时候报”类型缺失的错误”。这也是常见的il2cpp模式下遇到的问题。C++是属于根据依赖进行编译的模式。Il2cpp中,如果我们编写的c#代码没有使用这个类,那么编译完C++代码后,这个类的二进制代码就不会出现在c++的代码中,运行的时候就会导致类型缺失,功能不正常等相关报错。很多同学看到这里就有一个疑问,既然IL的.dll代码里面没有,为何C++的代码会调用呢?给大家举个例子你瞬间就明白了,假设有个资源预制体挂了一个组件,而这个组件只在资源上使用,代码中没有使用,编辑器模式下与mono模式下都能正常运行。而打包il2cpp的时候由于这个组件在代码中没有使用, 所以导致IL code中没有依赖,因此就不会被il2cpp打入进去,导致l2cpp模式下运行的时候类型缺失报错,功能不能正常使用。

 了解了出错的原因与原理,解决方案就非常简单在ilcode代码里面加上组件类的代码引用与依赖就可以了,让il2cpp将相关的类与组件打入进去。比如动画的timeline等。

Mono模式没有问题,IL2CPP模式下闪退

最后一类问题就是mono模式下没有问题,il2cpp模式下闪退。闪退其实就是手机app的这个进程由于运行时候的错误,OS必须要杀掉这个进程,而虚拟机解释执行式模式,不容易闪退,因为有虚拟机这一层作为保护隔绝,而对于il2cpp而言,全部已经转成了native 代码,如果运行的时候数据不对,比如除0异常,空指针等会导致OS 直接把进程删掉造成闪退。所以这样就会导致mono模式下不闪退,而il2cpp模式下却直接闪退。

引起这类问题原因有很多,比如上面的类型缺失,可能导致闪退, 还有就是某个代码与数据跑出来缺失异常了,但是mono下由于有虚拟机的保护作用,异常可能被直接忽视了,导致我们认为还在app正常运行,而il2cpp模式下由于没有虚拟机的保护,可能直接被OS 杀掉。

一般解决这类我们问题我们还是要通过隔离的手段,找出运行出错的代码与相关数据,然后分析原因来修正它。而不要老想着 “mono正常,而il2cpp模式下报错,闪退”是不是il2cpp的环境问题。其实很大一部分确实是我们的代码或我们代码跑的数据异常导致的。

今天的分享就到这里了,关注我们,可以学习更多的Unity 游戏开发程序员进阶相关的教程内容。

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

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

相关文章

推出Linux操作系统Inspur KOS,浪潮信息意欲何为?

2020年底,CentOS突然宣布CentOS7、8等系列版本停止维护的时间表,业界为之震动。 一直以来,Linux都是服务器操作系统市场的顶流支柱。CentOS发行版生命周期的突然变动, 不仅促使很多行业用户思考:“CentOS停止维护之后…

第三十三章 数论——组合数详解(2)

一、组合数——卢卡斯定理 1、问题 这道题中,a,ba,ba,b的范围都是很大的,我们就无法直接用到之前所讲解的预处理阶乘的方法。 如果大家没有看过作者写的组合数(1)的话,建议大家先去看一下,今天所讲的问题…

【小程序】微信小程序获取头像、呢称2013年最新解决方案(已解决)

一、效果 二、wxml代码 <!-- 点击头像获取头像 --> <view style"margin-bottom: 20px;text-align: center;">---- 点击头像获取logo ----</view> <view class"logo"><button style"width: 100px;height:100px;" cla…

易诚互动在创业板更新招股书:上半年出现亏损,极其依赖阿里云

12月27日&#xff0c;北京易诚互动网络技术股份有限公司&#xff08;下称“易诚互动”&#xff09;在深圳证券交易所更新招股书&#xff0c;准备在创业板上市。本次冲刺上市&#xff0c;易诚互动计划募资3.13亿元&#xff0c;将用于用于数字银行应用平台升级项目、大数据智能风…

问题解决丨对不起,小米路由器出现网络连接问题无法打开网页

之前Chrome浏览器一直用的好好的&#xff0c;不过最近出现以下问题 “对不起&#xff0c;小米路由器出现网络连接问题无法打开网页”。 奇怪的是&#xff0c;使用Edge浏览器可以正常访问网页&#xff0c;但是Chrome会不行&#xff0c;每次如果要正常访问需要关闭所有Chrome的…

迭代次数的隐约脚印

( A, B )---1*30*2---( 1, 0 )( 0, 1 ) 继续一维的实验&#xff0c;这次区别是A和B都由5个点构成。 A B 迭代次数&#xff08;7e-4&#xff09; 0 0 0 0 0 1 1 1 0 1 1b 1b 1b 0 1b 0*0*0*0*0-1*1*1*0*1 22047.98995 如A为00000&#xff0c;B为11101&#…

外贸网站优化与外贸网页优化的区别

对于大多数外贸企业和个人站长来说&#xff0c;网页优化是非常重要的&#xff0c;但是说到网站优化&#xff0c;很多人会有一个误区&#xff0c;就是经常把网站优化和搜索引擎优化混为一谈。虽然两者之间有很多重叠的地方&#xff0c;但是如果再细分的话&#xff0c;两者还是有…

JSP ssh 物流信息管理系统myeclipse开发oracle数据库MVC模式java编程计算机网页设计

一、源码特点 JSP ssh 物流信息管理系统是一套完善的web设计系统&#xff08;系统采用ssh框架进行设计开发&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用 B/S模式开发。开发环境为TOMCAT7.…

专业低代码平台应该具备什么?

编者按&#xff1a;低代码火爆的同时&#xff0c;很多低代码平台如雨后春笋般涌出&#xff0c;那么一个真正的专业低代码平台应该具备什么特性呢&#xff1f;本文将为你剖析老厂商天翎低代码平台的特点&#xff0c;一起感受低代码平台的魅力。 关键词&#xff1a;读写分析&…

[BSidesCF 2019]SVGMagic (XXE)

[BSidesCF 2019]SVGMagic 首先打开界面&#xff0c;感觉就是一个文件上传的题目 &#xff0c;然后上传了jpg/php/png/.htaccess&#xff0c;感觉不是一道简单的题目&#xff0c;但是抓包也没有什么有用的信息。 页面上的英文翻译过来就是&#xff0c;使用Magic将SVG转换为PNG&…

C#,简单易用、稳定可靠的统计学的常用算法、概要介绍与源代码

1、统计学常用算法 统计分析科学 在“政治算术”阶段出现的统计与数学的结合趋势逐渐发展形成了“统计分析科学”。 十九世纪末&#xff0c;欧洲大学开设的“国情纪要”或“政治算数”等课程名称逐渐消失&#xff0c;代之而起的是“统计分析科学”课程。当时的“统计分析科学”…

深度学习笔记:神经网络(1)

对于感知机相关内容&#xff0c;可以参考我上一篇文章&#xff1a; https://blog.csdn.net/Raine_Yang/article/details/128461600?spm1001.2014.3001.5501 在图示中&#xff0c;最左边一列为输入层&#xff0c;最右边一列为输出层&#xff0c;中间为中间层&#xff0c;也叫隐…

Android 传感器概述(一)

Android 传感器概述&#xff08;一&#xff09;Android 传感器概述&#xff08;一&#xff09;传感器简介传感器框架识别传感器和传感器特性监控传感器事件处理不同的传感器配置在运行时检测传感器使用 Google Play 过滤器定位特定的传感器配置传感器坐标系Android 传感器概述&…

Pytorch的 Dataset 的使用

此案例教我们加载并处理TorchVision的FashionMNIST Dataset。 root 目录是 train/test data 存储的地方 downloadTrue 如果root目录没有&#xff0c;则从网上下载 transform and target_transform specify the feature and label transformations import torch from torch.u…

第十五讲:神州交换机端口安全配置

知识点&#xff1a; 开启端口安全模式&#xff1b;设置端口最大安全数&#xff1b;端口绑定MAC地址&#xff1b;违规处理&#xff1b;锁定安全端口&#xff1b;MAC地址与IP的绑定&#xff1b;端口镜像。 实验拓扑如下图所示 PC机 IP地址 掩码 MAC地址 端口 PC1 192.168.…

Windows10安装ubuntu(WSL2,可直接调用Win10程序) —2022年笔记

算是wsl2的使用总结。 一。启动win10虚拟机模块 1. 打开控制面板&#xff08;或开始->运行: control&#xff09; 2. 点击最左边的 “启用或关闭windows功能”&#xff0c;会弹出模块勾选界面 3. 勾上 Hyper-V、适用于Linux的Windows子系统、虚拟机平台 4. 点击确定按钮即开…

【微服务】Nacos 注册中心的设计原理

目录 一、前言 二、数据模型 三、数据一致性 四、负载均衡 五、健康检查 六、性能与容量 七、易用性 八、集群扩展性 九、用户扩展性 十、结尾 &#x1f496; Spring家族及微服务系列文章 一、前言 服务发现是⼀个古老的话题&#xff0c;当应用开始脱离单机运行和访…

Mysql查询性能优化

Mysql查询性能优化0.前言1.为什么查询速度会慢2. 慢查询基础&#xff1a;优化数据访问2.1 是否向数据库请求了不需要的数据2.2 MYSQL是否在扫描额外的记录响应时间扫描的行数和返回的行数3. 重构查询方式3.1 一个复杂查询还是多个简单查询3.2 切分查询3.3 分解关联查询0.前言 …

DAG任务调度系统 Taier 演进之道,探究DataSourceX 模块

熟悉Taier的小伙伴们应该都知道&#xff0c;在11月7日发布的Taier1.3新版本中&#xff0c;我们融合了「DataSourceX 模块」。这是十分重要的一个变化&#xff0c;移除Taier外部插件依赖&#xff0c;新增数据源插件相关特性&#xff0c;支持后续Taier对接更多的RDBMS类型的SQL任…

小鹅通六周年:新知识服务时代,做好企业的“共享CTO”

2022年&#xff0c;产业数字化汹涌而来&#xff0c;驱动企业变革转型的同时&#xff0c;知识也以新的形式出现在各行各业。人人表达和传递知识&#xff0c;知识服务开始进入“下半场”。 如何应用数字化产品满足个人和组织的知识表达需求&#xff1f;作为知识产品与用户服务的…