我的unity3d il2cpp 5里,怎么没有IL2CPP选项

今天看啥 热点:
为什么Unity5打的空包有17mb?,unity5打的包有17mb
& & & & 今天在论坛上看到有人提到Unity5的诸多“罪状”,其中一条就是打出来的空包竟然有17mb,而之前的版本是9mb。我很好奇,难道是IL2Cpp搞的鬼?
& & & & 因为好奇,我特意准备了Android环境(之前的环境太老了,不得不重新弄),打了一个空包试验了下。其实原因很简单,因为考虑到兼容性Unity5默认情况下同时打了armv7a和x86的动态库。于是空包的大小就增加了几乎一倍。
如截图所示,在PlayerSetting中把Device Filter中的FAT修改为ARMv7就可以了。
& & & & 一般情况下android平台不需要编译x86的版本,因为设备太少了,需要考虑对应平台的时候可以单独打一个x86版本的包。除非不考虑apk的包大小的时候,才会选择FAT兼顾兼容性。
& & & &最后额外牢骚一下,不用心的程序员只会看到xxx不行,有xxx问题(水平差的根本连问题都看不出来),而稍微用一点心就可以“知其然而又知其所以然”。这个其实一点技术含量都没有,打个空包看看哪里比较大,很容易知道问题所在,用心而已。
暂无相关文章
相关搜索:
相关阅读:
相关频道:
Android教程最近更新关注游戏葡萄
微信扫描二维码关注
游戏葡萄公众号
的其他文章
的其他文章
的其他文章
的其他文章
的其他文章
的其他文章
TalkingData
的其他文章
的其他文章
的其他文章
All Rights Reserved
赞助Sponsor
赞助Sponsor
阅读Articles
数据库Data
数据库Data
招聘Recruitment
联系我们Contact
友情链接Links
游戏葡萄订阅号unity5 更新详细1.真实物理 Shader 系统  Unity 5 会带有全新的内建Shader系统,新Shader系统将可以制作更真实的物理Shader,任何光源之下有助於制作真实质感的物件,同时也优化了整体工作流程。Unity 5 还导入了延迟上色(Full deferred shading)和动态反射侦测(Baked reflection probes),用於制作反射真实环境的效果。2.Enlighten 即时全域光源  为了把 Geomerics 的即时全域光源技术 Enlighten 导入 Unity 5,Unity 与 Geomerics 建立进一步的合作关系。Enlighten 是目前针对跨平台最好的即时动态光源方案,不管是动态光源还是材质效果,环境光源甚至是大量即时的动态物件都处理的很棒。Enlighten 的导入也会改善工作流程,让美术和企划能够直接在 Unity 5 的编辑器直接为风格设定出逼真的视觉效果。这个技术也是现今市面上畅销游戏大量采用的光源解决方案。3.即时光照贴图预览  unity5透过与 Imagination Technologies 合作,Unity 将导入 Imagination 的 PowerVR 光源追踪技术,Unity 5 将成为其第一个编辑器即时光照贴图预览的开发平台。这为游戏带来更即时的交互光源追踪,代表未来透过编辑器的场景视图中就可以看到游戏中最後的光照贴图精确预览,这个功能所见即所得的回馈全域光源所产生的光照贴图。美术人员可以大量减少调整最终场景所需的时间。4.革命的音源系统  为了提高效率和灵活性,unity5 重写了整个音源底层。革新的一大步就是全新的混音器,用来实现复杂又即时的场景音源定位效果。音效师可以针对游戏执行中的各种音效透过混音器动态调整。5.WebGL 套件  Unity 的跨平台功能是最具价值的功能之一, Unity 和 Mozilla 合作推出相容於 Unity 的 WebGL 以及 asm.js 支援。从 Unity 5.0 起,开发者获得发布 WebGL 套件,未来将可以发布不需要安装播放器(Unity web player) 的产品,制造更棒的产品体验。6.Unity Cloud  Unity 5 发布 Unity Cloud 交互推广平台,使手机游戏开发者能够在其手机游戏中执行全萤幕盖台广告,并与其他 Unity 开发者交换广告,促进超过 5 亿Unity5灯光烘焙与Unity4 灯光烘焙中的差别首先光照烘焙技术对比, Unity4.X版本采用的是Autodesk的Beast技术 Unity5.X版本采用的是PowerVRRay Tracing和Enlighten技术Unity4.0 烘焙面板里常用的参数1、Quality 烘焙质量一般会选择高2、Bounces 反弹 这个值一般选1,如果选2,烘焙的时间会增长50%左右,所以设置这个值要谨慎。3、Sky Light Intensity 天空光强度 这个一般我也不会设置的太高4、Bounce Boost 反弹增强,同一单位面积内增大光的反射数量,相比较来说,这个值增大会直接影响渲染时间。5、Bounce Intensity 增强光的反射强度6、Contrast Threshold 对比度,这个只是偶尔会调。Unity5.0 烘焙面板里常用的参数1、Skybox:会直接影响你的环境光2、Ambient Source:环境源,这里选的skybox3、Ambient Intensity: 环境光的强度值,也就是环境光的亮度值4、Reflection Source:反射源,这是Unity4.X里没有的。烘焙后会在场景文件的同名文件夹中多出一个名为 LightmapSnapshot的文件。5、Realtime Resolution:实时分辨率,这个物体所产生的GI对其它物体的影响程度,值越大影响越大。例如 6、Realtime Resolution 参数设成比原默认的小10倍即 0.2 。7、Indirect Intensity:间接强度,这个和unity4.x里的参数有些像,可以简单的理解为光的反射强度。8、Bounce Boost:反弹强度,同一单位面积内增大光的反射数量,相比较来说,这个值增大会直接影响渲染时间。9、Default Parameters:默认参数,这里还可以自己创建自己的参数。一般情况在预烘焙时选择最低设置。10、Atlas Size:烘焙图的大小,以前4.X版本只能通过脚本来调整,现在好了。点击原文连接观看视频哦!Unity3D教程手册(unitymanual) 
 文章为作者独立观点,不代表微头条立场
的最新文章
终有一天我手中的编译器将成为我灵魂的一部分,这世界在我的眼中将被代码重构,我将看到山川无尽银河无垠都汇成二进制的数字河流,过往英雄都在我脑海眼前一一浮现,而我听到无数码农跪倒在我的程序面前呼喊。他们叫我代码之神。Quality他是个什么东西呢?本文主要讲如何实现一款小地图...11年前我和程序猿第一次见面,还是大一军训期间。我甚至不确定程序猿是否记得那是第一次见面。当时不小心装伪文艺参加了吉他社,想借一本吉他入门书,然后同在吉他社热心的海哥说他一同学有,就带着我去拿书了。于是我们第一次“见面”了.......不解风情的程序员们在情感生活中不免会遇到这样悲催的一幕:偶然遇到一位心仪的女孩,从此日思夜想,废寝忘食,开始了漫长的暗恋之旅,等到一日,在无尽的纠结中,终于鼓起勇气向女孩表白,结果女孩一句“我已经有男朋友了”如晴天霹雳,实在难以接受……UGUI的层叠顺序是按照Hierarchy中的顺序从上往下进行的,也就是越靠上的组件,就会被画在越底部。所以UI就是这样一层一层地叠上去画出来的。虚拟现实产业如火如荼,各家企业在软件、硬件、内容、服务、投资、媒体等等纷纷布局。中国人均读书0.7本,是我们人太多还是没时间?更有可能是我们做了太久的低头族。是时候放下手机拿起书,去寻找我们的颜如玉了~The Lab Renderer for 是Valve针对VR在Unity的体验渲染器,提高VR的渲染效率,而现阶段的问题,在地形并不能接受Valve渲染产生的阴影,对应地形上的树啥的也不能产生阴影。使用 Cubmap 可以模拟出环境的反射,预先将环境渲染到 Cubmap 中,从而避免在游戏运行时对环境的实Shader部分的学习案例和基础知识会陆续更新,喜欢的童鞋请记得持续关注,现在插播一条项目上遇坑填坑,遇锅背锅的小案例广告。在CJ2016索尼发布会上,索尼公布了一个重点项目--中国之星计划。被选中的开发者可以得到索尼的技术支持和协助,利用索尼的平台和资源提高国内游戏开发者作品的质量和知名度,同时还展示了首个参与中国之星计划的作品--《边境计划》。在游戏开发过程中,项目开发团队的成员,几乎每天都会和游戏策划文档打交道,但是每个团队、每个人对策划文档的重视程度却各不相同。有的把游戏策划文档奉为游戏开发过程中的圣经,有的却认为使用策划文档,是一种非常低效率的行为。八月底开始找工作,面试了9家公司,拿到5份Offer,学习Python的时间还很短,没想到还算比较容易的找到了工作,就把这些天的面试经验和大家分享一下,希望为学习Python找工作的小伙伴们提供些许帮助。关于遮罩的需求将矩形的图片做成圆角矩形、圆形常用实现方式使用UGUI自带的Mask组件实现使用网上一搜一大把本来想分析MarkUX框架的代码,但是需要购买,暂时就放下了,恰巧遇到PreGUI几乎雷同的设计思路。那就直接拿来分析吧。此文是我读此框架的笔记,外行看热闹内行看门道至于能理解多少就见仁见智了,如果我没理解的地方还请不吝指出。UE4 HTC VIVE - 房产漫游制作教程-基础篇本文主要介绍了有关镜子的制作,先把实现部分写出来,并把思路传授给大家....你知道有能力胜任和精通之间的区别是什么吗?据说,某互联网公司招了个日本人做研发,上班第一天就对部门同事说:“我在日本工作时是个加班狂,每天都很晚回家,希望大家跟上我的步伐。”一个月之后他辞职回日本了,扔下一句话:“你们这样加班,经常睡在公司是很不人道的。”如果我们都不知道高级程序员到底是个什么样子,那我又该怎么朝这个目标努力?”VR元年炒了又炒,从2014年初到2016年下半年,历时2年的时间,市场不温不火,优秀内容依然稀缺。近日游戏Gear VR游戏《Bait!》于三月份登陆Oculus Home,在不到5个月的时间里,游戏的下载量已经超过了70万份。我遇到的大多数开发人员都不怎么热衷于测试。我喜欢测试,并且比起编写新的代码,愉快地花更多的时间在测试中。我认为,正是因为专注于测试,我才可以花更少的时间来编写新的代码或修复bug,并且非常有成效本篇中,东方教主要介绍下“多卡交互”,顾名思义,同时识别多张识别图,并产生交互效果。使用HoloLens时,shell是由你周围的世界和来自系统的全息图像构成。我们将这种空间成为混合世界......涂涂乐算是比较成功的AR产品,东方教主几乎分为美术篇和程序篇和大家聊一聊涂涂乐。UGUI制作流程和优化方案...美国《赫芬顿邮报》网站刚刚登载了一名女程序员的文章。该文章讲述了她作为女程序员在职场生活中所感受到的孤独,并分析了这种孤独感产生的五大原因。好的代码,就像是好的笑话——无需解释就能让别人明白。如果你的代码能够做到不解自明,在大多数时候,你根本无需为其配备说明文档。无缝加载一般适用于地图较大的游戏,即仅加载我们看得到的地图,如果走远,这个地图就会被释放,虽然Unity优化很好,看不到的不会被渲染,但是内存仍然是有占用的,用无缝加载能大大减少场景占用的内存,这里我只讲比较简单的2D的无缝加载。项目统一构建了标准、规范,有效保证了界面的一致性,但是代码质量的提高却不是那么简单的事情。TechCrunch 上海峰会黑客马拉松的现场,我的同事提到一个比较疑惑的现象:为什么现场的“黑客”们人手一部苹果电脑?程序员都偏爱 Mac 吗?跟随我用Vuforia和Unity建立一个AR示例。并且这一切都是免费的。Unity中经常有对象或预制体,Unity虽然已经提供了Copy Component这个功能,但是想要把某个预制体或对象的组件全部都拷贝到某个新的对象上,这个就不太灵光了。有人问Unigine怎么打包加密,所以写篇Unigine快速打包成ung文件来分享给大家。我时常在想,软件开发人员在某些方面和喜鹊——一种臭名昭着地喜欢偷发亮的物品来装饰它们巢穴的鸟类非常类似。像喜鹊,从定义上说明软件开发人员是一种异常聪明,又有好奇心的动物。但是,我们非常非常容易因为闪亮的新玩具而分心。程序猿,这个字汇在近几年开始渐渐被大众所熟知。在外界看来,这一直是个特殊的群体,社会上也给程序猿贴了很多的标签,内向、屌丝、苦逼、裤衩、拖鞋等等。在他们的心中,程序猿是这样的。北京时间4月7日, 微软官方博客宣布发布Visual Studio Tools for unity 2.0 无数人追着手游的热潮来到这里,烧光了热情和积蓄,最后黯然地离开2014年上半年的成都天府软件园,汇集了大大小今天。蛮牛邀请我写点干货,注册蛮牛好些年了。还没写过技术文章呢。都是在自己博客写。今天就先写第一篇吧。这个内在编程这一行,我已经干了20多年了。至今为止,我也差不多写过六七门编程导论课程,教授时间总计超过1000小时游戏蛮牛2016虚拟现实开发者报告!最近因为项目上的需要,用到了GearVR作为开发设备。从此就开启了填坑模式,下面我就要将我在GearVR上开发所碰到的问题以及解决办法详细的做一个介绍。比盒子高级点的S6+GearVR整体来说效果确实好不少。之前只接触过GoogleCardboard SDK ,网上GearVR似乎没有比较详细的教程头一次打包整整耗掉了我一个晚上的时间。开始进入主题,手把手教您打一个GearVR包。你会怎么纪念逝去的亲友?将他的照片放在桌上,还是每天复习他的教诲?国外的游戏开发商 Crate Entertainment 为了纪念一位热爱游戏的父亲,采取极具创意的方式:让他成为游戏里的 NPC,与他心仪的游戏永远相伴。看帖子标题是否觉得有些说不出来的味道呢?但是游戏里又各种地方可以用到,大家只有按照自己理解来用吧,我暂且叫他公告列表?通告信息?满满干货哦~今天要与大家分享的是目标屏幕位置追踪显示,或许大家不太好理解,下面将提供我的一个思路。附载测试工程项目包哦~我们常用的UI都是由大堆的UI通过层级堆叠出来的。那怎么实现这种UI界面显示3D模型可以自由徐旋转运动的功能呢。RenderTexture就是一种很好用的方法。教程以Unity引擎为环境 ,重点放在Cg语言的学习和经典光照的计算上。unitymanual游戏蛮牛 ---
中国最大的手机游戏开发者技术社区! 热门文章最新文章unitymanual游戏蛮牛 ---
中国最大的手机游戏开发者技术社区!代码 | unity5.3中新增加的Attribute
闫姜昊 16条评论(代做)
PreserveAttribute 可 从删除的类、 方法、 字段或属性的字节代码中 剥离出来 。
当你创建一个build 时,Unity 会尽量从您的项目中去掉不用的代码。这是最大限度的得到最小生成 。然而,有时你想要一些代码来不被删除,即使它看起来好像没有什么用 。如果你使用反射 来调用方法 或 实例化某个类 的对象。您可以使用[Preserve] 特性应用于 类、 方法、 字段和属性。除了使用 PreserveAttribute,你也可以使用 link.xml 文件的传统方法 来告诉链接器不删除的东西。PreserveAttribute 只在 IL2CPP 平台上运行。link.xml 文件的工作于 Mono 和 IL2CPP 平台。
using UnityE
using System.C
using System.R
using UnityEngine.s
public class NewBehaviourscript : MonoBehaviour {
void Start () {
ReflectionExample.InvokeBoinkByReflection();
public class ReflectionExample
static public void InvokeBoinkByReflection()
typeof(ReflectionExample).GetMethod("Boink", BindingFlags.NonPublic | BindingFlags.Static).Invoke(null,null);
// No other code directly references the Boink method, so when when stripping is enabled,
// it will be removed unless the [Preserve] attribute is applied.
[Preserve]
static void Boink()
Debug.Log("Boink");
对于不想倚赖 UnityEngine.dll 的第三方库,它也是可以定义自己的 PreserveAttribute。代码会尊重这一点,并会考虑任何属性具有确切名称 "PreserveAtribute" 应用不删除的东西上,无论该 命名空间或程序集的 属性。
2、为类提供一个自定义的文档的URL。
[HelpURL("/docs/MyComponent.html")]
public class MyComponent
3、允许当Unity游戏 从用户加载运行时 运行时 类方法 被初始化 。
场景已被加载 (即 Awake 方法已被调用),将 调用 标记 [RuntimeInitializeOnLoadMethod] 的方法。注: 标记 [RuntimeInitializeOnLoadMethod] 的方法的执行顺序是不能保证的。
using UnityE
class MyClass
[RuntimeInitializeOnLoadMethod]
static void onRuntimeMethodLoad ()
Debug.Log("After scene is loaded and game is running");
[RuntimeInitializeOnLoadMethod]
static void onSecondRuntimeMethodLoad ()
Debug.Log("SecondMethod After scene is loaded and game is running.");
using UnityE
[SharedBetweenAnimators]
public class AttackBehaviour : StateMachineBehaviour
public void onStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
Debug.Log("OnStateEnter");
活动 FORUM
公开课 COURSE
企业 INDUSTRY
Tel:+86(029)&&&& +86
(C) COPYRIGHT 2013 ARinChina增强现实中国 | ICP 号-1
ARINCHINA通行证1123人阅读
Unity3D(27)
转自:/indieace/
Unity将来时:IL2CPP是什么?
Unity3D 想必大家都不陌生,独立游戏制作者们很多人都在用它,甚至一些大公司也用在很商业的游戏制作上。Unity3D最大的一个特点是一次制作,多平台部署,而 这一核心功能是靠Mono实现的。可以说Mono是Unity3D核心的核心,是Unity3D跨平台的根本。但是在2014年年中的时 候,Unity3D官方博客上却发了一篇“”的文章,引出了IL2CPP的概念,感觉有取代Mono之势。那什么是IL2CPP,它能为Unity3D和作为使用Unity3D的我们带来哪些好处和改变?这就是本文尝试说明的。
C#,.Net Framework
我 们先说说IL2CPP试图取代的Mono。在说Mono之前,不得不提C#语言和背后的.Net Framework。C#是微软推出的一种基于.NET框架的、面向对象的高级编程语言。C#的发音为“see sharp”,模仿音乐上的音名“C?”(C调升),是C语言的升级的意思。其正确写法应和音名一样为“C?”。C#由C语言和C++派生而来,继承了其 强大的性能,同时又以.NET框架类库作为基础,拥有类似Visual Basic的快速开发能力。C#由安德斯·海尔斯伯格主持开发,微软在2000年发布了这种语言。说到安德斯·海尔斯伯格这里要多说一句,当年和VC(注
意,是VC,那个时候还没有Visual Studio)齐名还有另外一家公司的IDE也非常流行,那就是Borland公司的Delphi,也是由安德斯·海尔斯伯格主导开发的。
他 后来被微软挖走,创建了J++,一门类似Java的语言(好吧,以我肤浅的知识认为,那基本就是照着Java做的)。后来由于和Sun公司授权的原因,微 软在2001年停止了J++的开发而推出了C# 1.0。说来要感谢和Sun的这场官司,否则微软也不会有C#,J++也可能一直会跟随Java的脚步。相反C#经过不断的进化,从1.0开始到4.0和 最新的5.0,C#已经远远甩开Java几条街了(还是以我个人的使用Java和C#感觉而言,关于两门语言的比较,无论是效率上,夸平台上,还是语言易 用性上,社区活跃度上,网上的争论随处可见,每个人都有自己的看法,这也不是本文的重点)。&
Mono,Mono VM
C#虽好,但是只能在Windows上运行,微软那时候也没有将其开源,所以总是会有人说不能跨平台,光就这点,C#和Java就不能比呀。
微 软公司已经向ECMA申请将C#作为一种标准。在2001年12月,ECMA发布了ECMA-334 C#语言规范。C#在2003年成为一个ISO标准(ISO/IEC 23270)。这意味着只要你遵守CLI(Common Language Infrastructure),第三方可以将任何一种语言实现到.Net平台之上。Mono就是在这种环境下诞生的。
Mono是一个由 Xamarin公司(先前是Novell,最早为Ximian)所主持的自由开放源代码项目。该项目的目标是创建一系列符合ECMA标准(Ecma- 334和Ecma-335)的.NET工具,包括C#编译器和通用语言架构。与微软的.NET Framework(共通语言运行平台)不同,Mono项目不仅可以运行于Windows系统上,还可以运行于 Linux,FreeBSD,Unix,OS X和Solaris,甚至一些游戏平台,例如:Playstation 3,Wii或XBox 360之上。Mono使得C#这门语言有了很好的跨平台能力。相对于微软的.Net
Framework运行时库Mono使用自己的Mono VM作为运行时库。 加上C#本身快速友好的开发能力,最终使得Unity团队在创建之初就决定将Mono,C#作为其核心。(嗯,这是我猜的)
有 人也许会说,Unity还支持JavaScript和Boo呢,不光光只有C#一门语言。首先我要纠正的是,在Unity中的JavaScript严格意 义上说并不是W3C规范中的JavaScript,它正确的名字叫做Unity Script,其实是从Boo演变过来的(这样大家就能理解为啥在3门语言中,Boo用的人最少,但是却还一直存在的原因了吧)。我认为是Unity开始 为了让更多的人能够快速的上手,特别是考虑到很多脚本程序员对JavaScript已经很熟悉了,为了照顾这部分人,发明了Unity Script,它的语法和W3C的JavaScript几乎一致,使得大家可以直接用其进行开发,降低门槛。但是Unity
Script在运行上却和JavaScript有着本质的不同。这个我会在下一节IL中进行详细的描述。从三门语言在Unity中的使用情况而言:Boo 几乎就没人用了,Unity Script和C#两者中无论是演示代码还是Unity Asset Store中的第三方代码,C#已经有85%-90%的比例(个人粗略估计,没有做详细统计)。可见C#在Unity中深受我等游戏码农的爱戴。
啰 嗦完了C#,.Net Framework和Mono,引出了我们很重要的一个概念”IL“。IL的全称是 Intermediate Language,很多时候还会看到CIL(Common Intermediate Language,特指在.Net平台下的IL标准)。在Unity博客和本文中,IL和CIL表示的是同一个东西:翻译过来就是中间语言。它是一种属于 通用语言架构和.NET框架的低阶(lowest-level)的人类可读的编程语言。目标为.NET框架的语言被编译成CIL,然后汇编成字节码。 CIL类似一个面向对象的汇编语言,并且它是完全基于堆栈的,它运行在虚拟机上(.Net
Framework, Mono VM)的语言。
具体过程是:C#或者VB这样遵循CLI规范的高级语言,被先被各自的编译器编译成中间语言:IL(CIL),等到需要真正执行的时候,这些IL会被加载到运行时库,也就是VM中,由VM动态的编译成汇编代码(JIT)然后在执行。
正是由于引入了VM,才使得很多动态代码特性得以实现。通过VM我们甚至可以由代码在运行时生成新代码并执行。这个是静态编译语言所无法做到的。回到上一
节我说的Boo和Unity Script,有了IL和VM的概念我们就不难发现,这两者并没有对应的VM虚拟机,Unity中VM只有一个:Mono VM,也就是说Boo和Unity Script是被各自的编译器编译成遵循CLI规范的IL,然后再由Mono VM解释执行的。这也是Unity Script和JavaScript的根本区别。JavaScript是最终在浏览器的JS解析器中运行的(例如大名鼎鼎的Google Chrome V8引擎),而Unity Script是在Mono VM中运行的。本质上说,到了IL这一层级,它是由哪门高级语言创建的也不是那么重要了,你可以用C#,VB,Boo,Unity
Script甚至C++,只要有相应的编译器能够将其编译成IL都行!
IL2CPP, IL2CPP VM
本 文的主角终于出来了:IL2CPP。有了上面的知识,大家很容易就理解其意义了:把IL中间语言转换成CPP文件。大家如果看明白了上面动态语言的 CLI, IL以及VM,再看到IL2CPP一定心中充满了疑惑。现在的大趋势都是把语言加上动态特性,哪怕是c++这样的静态语言,也出现了适合IL的c++编译 器,为啥Unity要反其道而行之,把IL再弄回静态的CPP呢?这不是吃饱了撑着嘛。根据本文最前面给出的Unity官方博客所解释的,原因有以下几 个:
1.Mono VM在各个平台移植,维护非常耗时,有时甚至不可能完成
Mono的跨平台是通过Mono VM实现的,有几个平台,就要实现几个VM,像Unity这样支持多平台的引擎,Mono官方的VM肯定是不能满足需求的。所以针对不同的新平 台,Unity的项目组就要把VM给移植一遍,同时解决VM里面发现的bug。这非常耗时耗力。这些能移植的平台还好说,还有比如WebGL这样基于浏览 器的平台。要让WebGL支持Mono的VM几乎是不可能的。
2.Mono版本授权受限
大家有没有意识到Mono的版本已经更新到3.X了,但是在Unity中,C#的运行时版本一直停留在2.8,这也是Unity社区开发者抱怨的最多一 条:很多C#的新特性无法使用。这是因为Mono 授权受限,导致Unity无法升级Mono。如果换做是IL2CPP,IL2CPP VM这套完全自己开发的组件,就解决了这个问题。
3.提高运行效率
根据官方的实验数据,换成IL2CPP以后,程序的运行效率有了1.5-2.0倍的提升。
使用Mono的时候,脚本的编译运行如下图所示:
简单的来说,3大脚本被编译成IL,在游戏运行的时候,IL和项目里其他第三方兼容的DLL一起,放入Mono
VM虚拟机,由虚拟机解析成机器码,并且执行
IL2CPP做的改变由下图红色部分标明:
在得到中间语言IL后,使用IL2CPP将他们重新变回C++代码,然后再由各个平台的C++编译器直接编译成能执行的原生汇编代码。
几点注意:
1.将IL变回CPP的目的除了CPP的执行效率快以外,另一个很重要的原因是可以利用现成的在各个平台的C++编译器对代码执行编译期优化,这样可以进一步减小最终游戏的尺寸并提高游戏运行速度。
2. 由于动态语言的特性,他们多半无需程序员太多关心内存管理,所有的内存分配和回收都由一个叫做GC(Garbage Collector)的组件完成。虽然通过IL2CPP以后代码变成了静态的C++,但是内存管理这块还是遵循C#的方式,这也是为什么最后还要有一个 IL2CPP VM的原因:它负责提供诸如GC管理,线程创建这类的服务性工作。但是由于去除了IL加载和动态解析的工作,使得IL2CPP VM可以做的很小,并且使得游戏载入时间缩短。
3.由于C++是一门静态语言,这就意味着我们不能使用动态语言的那些酷炫特性。运行时生 成代码并执行肯定是不可能了。这就是Unity里面提到的所谓AOT(Ahead Of Time)编译而非JIT(Just In Time)编译。其实很多平台出于安全的考虑是不允许JIT的,大家最熟悉的有iOS平台,在Console游戏机上,不管是微软的Xbox360, XboxOne,还是Sony的PS3,PS4,PSV,没有一个是允许JIT的。使用了IL2CPP,就完全是AOT方式了,如果原来使用了动态特性的 代码肯定会编译失败。这些代码在编译iOS平台的时候天生也会失败,所以如果你是为iOS开发的游戏代码,就不用担心了。因此就这点而言,我们开发上几乎
不会感到什么问题。
最后给出Unite 2014上官方给出的性能测试截图(数字越小表示运行得越快):
有了IL2CPP,程序尺寸可以相对缩小,运行速度可以提高!看了兴奋吗?其实现有的Unity版本中已经引入了IL2CPP技术。本文下篇就通过一个实际的例子,看看IL2CPP都为我们做了哪些,以及我们需要注意些什么。
参考链接:
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:392129次
积分:3501
积分:3501
排名:第6758名
原创:39篇
转载:92篇
评论:42条
(1)(1)(1)(4)(1)(1)(1)(2)(1)(13)(1)(7)(11)(1)(3)(1)(1)(2)(5)(2)(2)(1)(21)(1)(2)(1)(1)(7)(10)(8)(17)

我要回帖

更多关于 unity3d5 il2cpp.exe 的文章

 

随机推荐