unity常见面试题目教案.docx

  1. 1、本文档共21页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
1. 游戏对象问题:游戏对象消失三种方法的区别?(enabled/Destroy/active)gameObject.renderer.enabled=fasle是控制一个物体是否在屏幕上渲染或显示??而物体实际还是存在的只是想当于隐身而物体本身的碰撞体还依然存在的GameObject.Destroy()表示移除物体或物体上的组件代表销毁该物体??实际上该物体的内存并没有立即释放而是在你下下个场景中槽释放内存资源,就是你a场景中Destroy了一般是在c场景中才真正释放该物体的内存资源(这是我的体会不知道理解错误没)gameObject.active=false是否在场景中停用该物体? ?在你gameObject.active =false中则你在场景中用find找不到该物体??如果该物体有子物体你要用SetActiveRecursively(false) 来控制是否在场景中停用该物体(递归的)副作用:通过GameObject.Find方法查找不到2. 协同程序(Coroutine)协同程序,即在主程序运行时同时开启另一段逻辑处理,来协同当前程序的执行。换句话说,开启协同程序就是开启一个线程。原理:协同程序被开启后作为一个线程在运行,而MonoBehaviour也是一个线程,他们成为互不干扰的模块,除非代码中用调用,他们共同作用于同一个对象,只有当对象不可见才能同时终止这两个线程。使用MonoBehaviour.StartCoroutine方法即可开启一个协同程序。使用StopCoroutine(string methodName)来终止一个协同程序,使用StopAllCoroutines()来终止所有可以终止的协同程序,但这两个方法都只能终止该MonoBehaviour中的协同程序。还有一种方法可以终止协同程序,即将协同程序所在GameObject的Active属性设置为false,当再次设置active为ture时,协同程序并不会再开启。协同程序和多线程的区别?3. 动态加载资源的方式?(有时候也问区别,具体请百度)Resources.Load();Resources.LoadAll()AssetBundleResources.Load资源必须放在Resources文件夹,只能加载本地文件。AssetBundle和WWW一起使用,可以实现从服务器上下载资源,并动态加载。4. 使用unity3d实现2D游戏,有几种方式?1.使用本身的GUI;2.把摄像机的Projection(投影)值调为Orthographic(正交投影),不考虑z轴;3.使用2d插件,如:2DToolKit、Uni2D;4.Unity 4.3版本新增的Native 2D(原生)5. AssetBundleAssetBundle的管理总共分为三部分:1、AssetBundle文件2、AssetBundle内存镜像3、AssetBundle内存对象实例一张图读懂AssetBundle内存管理机制file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps3046.tmp.png常见问题:举一个例子说明AssetBundle如何进行内存释放?一个常见的错误:你从某个AssetBundle里Load了一个prefab并克隆之:obj=Instantiate(AssetBundle1.Load(MyPrefab”);这个prefab比如是个npc。然后你不需要他的时候你用了:Destroy(obj);你以为就释放干净了。其实这时候只是释放了Clone对象,通过Load加载的所有引用、非引用Assets对象全都静静静的躺在内存里。这种情况应该在Destroy以后用:AssetBundle1.Unload(true),彻底释放干净。如果这个AssetBundle1是要反复读取的不方便Unload,那可以在Destroy以后用:Resources.UnloadUnusedAssets()把所有和这个npc有关的Asset都销毁。当然如果这个NPC也是要频繁创建销毁的那就应该让那些Assets呆在内存里以加速游戏体验。由此可以解释另一个之前有人提过的话题:为什么第一次Instantiate一个Prefab的时候都会卡一下,因为在你第一次Instantiate之前,相应的Asset对象还没有被创建,要加载系统内置的AssetBundle并创建Assets,第一次以后你虽然Destroy了,但Prefab的Assets对象都还在内存里,所以就很快了。问题:unity3d中如何实现动态资源加载?使用AssetBundle技术,通过WWW类从服务器下载AssetBundle资源包,将需要的资源加载到项目中。AssetBundle

您可能关注的文档

文档评论(0)

502992 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档