unity在编译环境下要怎么写unity自制代码编译器来退出游戏

Unity3d资源反编译(DisUnity)下载 v0.3.3 官方版_最火软件站
您的位置: >
> Unity3d资源反编译(DisUnity) v0.3.3 官方版下载
Unity3d资源反编译(DisUnity) v0.3.3 官方版
运行环境:Windows
更新时间: 17:30:01
论坛转帖:
有无插件:无插件,请您放心使用!
分&享&到:
DisUnity是一款非常强大的Unity3d资源反编译工具,主要功能为可以帮助您对untiy游戏资源进行解析,非常的便捷实用,需要的朋友来下载吧。
安装方法:
下载解压后随便放在一个没有中文路径的地方:
然后Windows系统:windows + R键 再输入cmd 点确定。
Mac OS:直接打开终端即可;
然后输入以下(win mac输入的语句都一样),然后回车:
java &jar (disunity.jar的路径) (Data文件夹下的.assets或.unity文件路径)
E:\Disunity3d\disunity.jar& 是我的DisUnity3d解析工具中disunity.jar的路径(大家自己放的地方可能不一样,找到disunity文件夹下的jisunity.jar这个文件的路径替换这句就行)
F:\lushi\Data\*.assets (备份的游戏文件夹中Data文件夹下的.assets的路径+ .assets)
(要是没有Data文件下没有.assets文件,只有.unity文件就替换成备份的游戏文件夹中Data文件夹下的.unity的路径 +*.*)
例如:我备份的游戏文件夹F:\lushi下的Data文件夹下只有.unity文件
就写为:F:\lushi\Data\*.*
回车后,disunity工具就会解析Data文件夹下的所有的.assets 或.unity文件;
4.然后Disunity工具会在.assets所在的同级文件夹下创建一个相同名字的文件,里边包含了以下文件夹。
点击链接开始下载Unity3D中脚本的执行顺序和编译顺序
投稿:hebedich
字体:[ ] 类型:转载 时间:
在Unity中可以同时创建很多脚本,并且可以分别绑定到不同的游戏对象上,它们各自都在自己的生命周期中运行。与脚本有关的也就是编译和执行啦,本文就来研究一下Unity中脚本的编译和执行顺序的问题。
事件函数的执行顺序
先说一下执行顺序吧。
官方给出的脚本中事件函数的执行顺序如下图:
我们可以做一个小实验来测试一下:
在Hierarchy视图中创建三个游戏对象,在Project视图中创建三条脚本,如下图所示,然后按照顺序将脚本绑定到对应的游戏对象上:
三条脚本的代码完全一样,只是做了一点名称上的区分:
using UnityEusing System.Cpublic class Scring0 : MonoBehaviour{&&& void Awake()&&& {&&&&&&& Debug.Log("Script0 ======= Awake");&&& }&&& bool isUpdate =&&& void Update()&&& {&&&&&&& if(!isUpdate)&&&&&&& {&&&&&&&&&&& Debug.Log("Script0 ======= Update");&&&&&&&&&&& isUpdate =&&&&&&& }&&& }&&& bool isLateUpdate =&&& void LateUpdate()&&& {&&&&&&& if(!isLateUpdate)&&&&&&& {&&&&&&&&&&& Debug.Log("Script0 ======= LateUpdate");&&&&&&&&&&& isLateUpdate =&&&&&&& }&&& }}
播放游戏,看看它们的执行顺序。如下图所示,Awake、Update、LateUpdate,无论运行游戏多少次,它们的执行顺序是完全一样的。
接着我们再做一个测试,把Script0的Update方法注释掉!!
using UnityEusing System.Cpublic class Script0 : MonoBehaviour {&&& void Awake () &&& {&&&&&&& Debug.Log("Script0 ========= Awake");&&& }//& bool isUpdate =//& void Update () //& {//&&&&& if(!isUpdate)//&&&&& {//&&&&&&&&& Debug.Log("Script0 ========= Update");//&&&&&&&&& isUpdate =//&&&&& }//& }&&& bool isLateUpdate =&&& void LateUpdate()&&& {&&&&&&& if(!isLateUpdate)&&&&&&& {&&&&&&&&&&& Debug.Log("Script0 ========= LateUpdate");&&&&&&&&&&& isLateUpdate =&&&&&&& }&&& }}
再次运行游戏,看看它的结果。脚本的执行顺序和以前完全一样,Script0即便删除掉了Update方法,但是它也不会直接执行LateUpdate方法,而是等待Script1和Script2中的Update方法都执行完毕以后,再去执行所有的LateUpdate方法。
通过这两个例子,我们就可以很清楚地断定,Unity后台是如何执行脚本的了。每个脚本的Awake、Start、Update、LateUpdate、FixedUpdate等等,所有的方法在后台都会被汇总到一起:
后台的Awake(){&&& // 这里暂时按照上图中的脚本执行顺序,后面会谈到其实可以自定义该顺序的&&& 脚本2中的Awake();&&& 脚本1中的Awake();&&& 脚本0中的Awake();}
后台的方法Awake、Update、LateUpdate等等,都是按照顺序,等所有游戏对象上脚本中的Awake执行完毕之后,再去执行Start、Update、LateUpdate等方法的。
后台的Update(){&&& // 这里暂时按照上图中的脚本执行顺序,后面会谈到其实可以自定义该顺序的&&& 脚本2中的Update();&&& 脚本1中的Update();&&& 脚本0中的Update();}
脚本的执行顺序然后我们来看看这样一种情况:在脚本0的Awake方法中创建一个立方体对象,然后在脚本2的Awake方法中去获取这个立方体对象。代码如下:
// Script0.csusing UnityEusing System.Cpublic class Script0 : MonoBehaviour {&&& void Awake ()&&& {&&&&&&& GameObject.CreatePrimitive(PrimitiveType.Cube);&&& }}// Script2.csusing UnityEusing System.Cpublic class Script2 : MonoBehaviour {&&& void Awake () &&& {&&&&&&& GameObject go = GameObject.Find("Cube");&&&&&&& Debug.Log(go.name);&&& }}
如果脚本的执行顺序是先执行Script0,然后再执行Script2,那么Script2中的Awake就可以正确地获取到该立方体对象;可是如果脚本的执行顺序是先执行Script2,然后是Script0,那么Script2肯定会报空指针错误的。
那么实际项目中的脚本会非常多,它们的先后执行顺序我们谁也不知道(有人说是按照栈结构来执行的,即后绑定到游戏对象上的脚本先执行。这一点可以从上面的例子中得到,但官方并没有这么说,还得进一步深入研究)。但一般的,建议在Awake方法中创建游戏对象或Resources.Load(Prefab)对象,然后在Start方法中去获取游戏对象或者组件,因为事件函数的执行顺序是固定的,这样就可以确保万无一失了。
另外,Unity也提供了一个方法来设置脚本的执行顺序,在Edit -& Project Settings -& Script Execution Order菜单项中,可以在Inspector面板中看到如下图所示:
点击右下角的"+"将弹出下拉窗口,包括游戏中的所有脚本。脚本添加完毕后,可以用鼠标拖动脚本来为脚本排序,脚本名后面的数字也越小,脚本越靠上,也就越先执行。其中的Default Time表示没有设置脚本的执行顺序的那些脚本的执行顺序。
按照上面这张图的设置,我们再来看一下控制台的输出结果,来确认一下我们的设置是否起作用(注意:把Script0脚本中的Update方法取消注释):
脚本的编译顺序
关于脚本的编译顺序很是头疼,官方的说法有点模糊,请看官方的解释:
由于脚本的编译顺序会涉及到特殊文件夹,比如上面提到的Plugins、Editor还有Standard Assets等标准的资源文件夹,所以脚本的放置位置就非常重要了。下面用一个例子来说明不同文件夹中的脚本的编译顺序:
实际上,如果你细心的话会发现,如果在你的项目中建立如上图所示的文件夹层次结构时,编译项目之后会在项目文件夹中生成一些文件名中包含Editor、firstpass这些字样的项目文件。比如按照上图的文件夹结构,我们打开项目文件夹来看一下产生的项目文件是什么样的?
下面就来详细探讨一下这些个字样是什么意思?它们与脚本的编译顺序有着怎样的联系?
1、首先从脚本语言类型来看,Unity3d支持3种脚本语言,都会被编译成CLI的DLL
如果项目中包含有C#脚本,那么Unity3d会产生以Assembly-CSharp为前缀的工程,名字中包含”vs”的是产生给Vistual Studio使用的,不包含”vs”的是产生给MonoDevelop使用的。
项目中的脚本语言 工程前缀 工程后缀 C# Assembly-CSharp csproj UnityScript Assembly-UnityScript unityproj Boo Assembly-Boo booproj
如果项目中这三种脚本都存在,那么Unity将会生成3种前缀类型的工程。
2、对于每一种脚本语言,根据脚本放置的位置(其实也部分根据脚本的作用,比如编辑器扩展脚本,就必须放在Editor文件夹下),Unity会生成4中后缀的工程。其中的firstpass表示先编译,Editor表示放在Editor文件夹下的脚本。
在上面的示例中,我们得到了两套项目工程文件:分别被Virtual Studio和MonoDevelop使用(后缀包不包含vs),为简单起见,我们只分析vs项目。得到的文件列表如下:
Assembly-CSharp-filepass-vs.csproj
Assembly-CSharp-Editor-filepass-vs.csproj
Assembly-CSharp-vs.csproj
Assembly-CSharp-Editor-vs.csproj
根据官方的解释,它们的编译顺序如下:
(1)所有在Standard Assets、Pro Standard Assets或者Plugins文件夹中的脚本会产生一个Assembly-CSharp-filepass-vs.csproj文件,并且先编译;
(2)所有在Standard Assets/Editor、Pro Standard Assets/Editor或者Plugins/Editor文件夹中的脚本产生Assembly-CSharp-Editor-filepass-vs.csproj工程文件,接着编译;
(3)所有在Assets/Editor外面的,并且不在(1),(2)中的脚本文件(一般这些脚本就是我们自己写的非编辑器扩展脚本)会产生Assembly-CSharp-vs.csproj工程文件,被编译;
(4)所有在Assets/Editor中的脚本产生一个Assembly-CSharp-Editor-vs.csproj工程文件,被编译。
之所以按照这样建立工程并按此顺序编译,也是因为DLL间存在的依赖关系所决定的。
好了,到此为止,我们可以很容易地判断出上面举的实例中,脚本的编译顺序(实际上,我已经把顺序写在了脚本的文件名中了)
一个Unity3d的工程中,最多可以产生多少个工程文件呢?
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具Unity3D开发技巧:如何避开unity编辑器的那些坑
招聘信息:
文/瀚阳以下总结一部分来自经验之谈,一部分来自其他人的分享。总的来讲,Unity开发原型和效果、验证想法,确实是无比便利。可能一个月就把核心玩法做得差不多。强大的编辑器功能让我们也有很大的可扩展空间来协助我们开发工具。可是编辑器是把双刃剑。如果提前看清楚有什么坑在前面,或者其他人踩过什么坑。我想这会对项目风险的把控会有很大帮助。避开unity的坑1.制作抽象的prefab来做关卡编辑尽可能制作抽象的prefab来做关卡编辑,该prefab应该足够抽象简单(只有一个GameObject,然后通过Gizmo来绘制是个不错的手段),否则以后变化的时候(常见的就是改美术资源),所有关卡都lost prefab,那么对策划来说是一场灾难。可以考虑通过数据表+编辑器的方式来提供策划操作同时也不再需要担心lost prefab的问题。prefab越简单抽象越不容易丢失,prefab之间嵌套的正确方式是通过链接而不是挂在节点下面。2.尽可能避免修改Scene,方法有几种:使用xml之类的数据组织场景尽量多让scene由prefab组成,这样变动都在prefab上使用工具做场景Merge3.不要过度依赖Component特性来开发,考虑数据驱动。4.逻辑容易散落在编辑器各处,可以做一个中心管理。利用Unity的特性组织好hierarchy,不管是编辑的时候还是运行的时候,编辑的时候可以通过工具来简化组织层级的工作。让每个场景自己能跑。利用基于组件的架构,尽可能少的使用继承(用C#的话),多通过组合来完成开发。遇到需要数据访问的通用接口,我们可以通过组合的方式来完成,而不是提供一个公共基类接口来继承,只要大家都认识这个公共组件就可以取到数据了。遇到通用的事件派发,我们可以用字符串拼接的方式派发到指定的对象或者更参数组合派发事件到对象身上。框架采用星型架构+事件机制,由于Unity3D没有一个所谓的入口函数,不利于代码跟踪,这样的基础架构能带来很多便利。unity界面扩展能力很强,而且借助CLR(commom language runtime)的反射能力,C#里面开发界面非常容易。做好tag、layer规划,要考虑业务中哪类物体之间需要交互。在代码里面get某个prefab或者GameObject,可以考虑利用界面拖目标过来,这样更加直观,而且也能对抗变化,比如目标名字变了也不怕,而且还能节省代码量。代码这里针对C#,静态强类型面向对象本身就是一个坑,继承带着两个职责,一个是复用代码,一个是接口继承。虽然性能比lua高那么一丢丢,因为性能瓶颈不在业务本身,设计上的问题要严重得多。我认为像lua这种动态语言的元编程才能够贯彻单点真理,通过元编程把真理推导到系统的每一处。让代码始终保持语义,而我认为写业务代码最重要的是保持语义。保持语义的简单有效评判方法就是看这个类中的某个函数,单独看它能否看懂;多个接口能否组成完备的解决方案。静态强类型面向对象语言比较适合需求稳定的严谨的系统开发,而不是游戏开发。容易经过多次的策划需求冲刷,语义很容易扭曲,各种抽象泄露、各种hack。好吧,跑题了。Unity3D容易被破解,因为发布版本的IL是非常容易被反编译的,要做好混淆的考虑。在Unity3D中混淆要考虑对编辑器的影响。复杂类型尽量使用引用类型,值类型反射麻烦,不方便序列化以及做成编辑器。值类型要小心赋值对象是否只是临时对象。引用类型释放之后,引用它的指针会置为null,可以放心使用。foreach、linq、协程慎用,反射只在编辑器中使用。考虑封装Time,方便做暂停。考虑使用调度器来完成功能,而不是在Update自己维护状态,这样做暂停也很容易,代码更清晰,功能更内聚。增量更新要一开始就想清楚。美术Unity3D可以通过扩展编辑器让非技术人员编辑界面来工作,组织好美术资源规格、路径,并且自动生成prefab。游戏场景物件也要规划好逻辑节点,这个也应该通过编辑器扩展好。复杂功能也应该通过编辑器开发给策划微调,特别是可视化比较重要的模块,比如动作调整。制作原型美术,让开发提升开发效率。有统一的约定,比如模型总是中心对齐,角色总是脚部对齐,统一的缩放、统一的动画骨骼命名,资源有统一的路径。支持换装(avatar)要一开始就想清楚。资源加载和优化尽可能早地给出雏形(只是雏形,帮助你对需求的把握,因为这时候你还不知道热点在哪),因为一旦没有规划好异步和资源释放,那么阻塞卡顿和内存飙升那是意料之内的。因为有雏形,那么代码会间接一点,也为改变提供了空间。
微信扫一扫
订阅每日移动开发及APP推广热点资讯公众号:CocoaChina
您还没有登录!请或
点击量6646点击量5944点击量4816点击量4543点击量3285点击量3068点击量2796点击量2552点击量2519
&2016 Chukong Technologies,Inc.
京公网安备89学游戏开发的培训机构&&
对于很多想从事Unity3D游戏开发的人来说,都非常想知道学习Unity3D的心得,有一部分人是担心自己学不会,而有些人则是想知道学习过程的难点,不管是哪种想法,其实学习Unity3D并不难,下面把Unity3D培训学习过程分为以下几个阶段。
1、刚入门的初学者,先从Unity*的视频开始看起,跟着视频做出你的第一个游戏吧,所有的资源,代码在Asset Store都可以下载到。
2、学过一段时间的熟练者,关注Unity圣典和Unity User Manual,在这一阶段,要把在第一阶段所忽略的内容进行选择性的补充学习。
3、想升级成高手的进阶者,关注Unity社区,Unity Answers,Unity Wiki,在这一阶段,要对Unity的各种细节问题,优化,底层原理和新的技术方案都要进行思考和学习。
在进阶者这一阶段,你才可以对一些中间件进行学习,具体学习什么样的Asset,还要由你的项目需求决定,不过无论如何还是推荐学习这几个Asset:Behavior Designer(AI), DoTween(Tween动画), PlayMaker(可视化编程),Shader Forge(可视化的Shader编写)和Elementals(粒子特效)。
当你将进阶者的学习内容完成之后,你就已经是一个合格的Unity3D工程师了,开发一个游戏对你来说不再是一个问题,各种工作也是手到擒来。如果你还觉得不过瘾的话,就可以尝试反编译一些市面上流行的Unity3D游戏来获取代码,毕竟真实生产环境中的代码才是最值得深入研究的。
学完了这些,要怎么发展你就应该有数了,之后碰到难题要在学习,最好的学习是参加专业的Unity3D培训机构,好玩科技讲练学相结合,以知识亲授与实战实训相结合,紧贴当前前沿实用技术和企业实际需求,让每一位奇酷开发培训学员都从中受益。报名咨询电话:(王老师) QQ:
推荐阅读:
游戏程序开发需要学习什么内容
好玩学院Unity游戏开发班火爆开班!
好玩科技游戏开发培训,让梦想破茧成蝶
被转藏 : 0次
被转藏 : 0次网站配置未生效 |
| 百度云加速
请打开cookies.
你访问的网站() 使用了
网络。 百度云加速目前无法解析此域名 ().
主要因为: 网站主刚刚在百度云加速添加了这个域名,百度云加速需要几十秒的时间同步到全球网络中。稍等片刻刷新页面即可解决。
也有可能: 网站配置出错.

我要回帖

更多关于 unity3d 代码反编译 的文章

 

随机推荐