




已阅读5页,还剩16页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1. 游戏对象问题:游戏对象消失三种方法的区别?(enabledDestroyactive)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:UsersADMINI1AppDataLocalTempksohtmlwps3046.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资源包带有版本号,用来判断是否需要更新。问题:AssetBunlde的优点?可以动态加载资源可以将资源放在服务器上,方便版本更新。AssetBundle资源的加载和是否可以手动控制,方便资源管理。6. 组件(组件思想)是什么?Unity3D面向对象编程最大的体现就是组件化,任何一个游戏对象都是通过附加不同的组件实现。每一个游戏对象都具有一个Transform组件。问题:获取、增加、删除组件的命令分别是什么?获取:GetComponent增加:AddComponent删除:Destroy7. 物理引擎物理引擎就是在游戏中模拟真实的物理效果。Unity内置了NVIDIA的Physx物理引擎,Physx是目前使用最为广泛的物理引擎,被很多游戏大作所采用,开发者可以通过物理引擎高效、逼真地模拟刚体碰撞、车辆驾驶、布料、重力等物理效果,使游戏画面更加真实而生动。物理引擎主要包含三个核心内容:1. Collider是最基本的触发物理的条件,例如碰撞检测。基本上,没有Collider物理系统基本没有意义(除了重力);2. Rigidbody是物体的基本物理属性设置,当检测碰撞完之后,就要计算物理效果,而Rigidbody提供计算基本参数。3. PhysicMaterial则是附加的基本物理参数,是一个物理材质,UNITY3D有自带默认的物理材质的系数(在Edit/Project Settings/Physic下设置),它参与碰撞的计算例如反弹效果摩擦效果等。常见问题:对Rigidbody施加力的常用方式?AddForce 添加普通力;AddExplosionForce 添加爆炸力;AddForceAtPosition 添加位置力。两个Collider产生碰撞的必要条件?至少要有一个物体具有Rigibody刚体才会触发OnColliderEnter函数。有碰撞器Collider碰撞器和触发器的区别?最大的区别是碰撞器有碰撞效果触发器没有;触发器是一个特殊的碰撞器。Collider有几种?(三种)1、Static Collider(静态碰撞器):带有Collider没有添加Rigidbody的对象,用于静止物体如地理环境;2、Rigidbody collider:带有rigidbody的collider对象,能够根据物理引擎很好的响应外力和碰撞作用。3、Kinematic rigidbody collider:带有rigidbody的collider对象,开启Is kinematic。当物体进来OnTriggerEnter触发,出去时OnTriggerExit触发。那么物体在进来后Destory后会如何?经过测试是:不会调用OnTriggerExit。PhysicMaterial有哪些主要属性?dynamicFriction:移动摩擦力,值在0到1之间。staticFriction:静止摩擦力,值在0到1之间。Bounciness:弹力,0值没有弹力,1-没有能量损失的反弹。Character Controller(角色控制器)的特性角色本身不受Physics影响,需要接受外力作用时,使用OnCharacterColliderHit();使用角色控制器如何防止角色经常卡住?Skin Width:设置为radius的10%;Step offset:对于2meter(米)高的Character设为0.1到0.4;Min move distance设为0即可。Rigidbody常用属性?打开Is Kinematic后物体不受物理引擎影响,只受Transform控制;Freeze Position冻结位置轴向,Freeze Rotation冻结方向轴向,冻结之后的轴向只受Transform控制;使用Physics时不要使用TransformCharacterController和Rigidbody的区别?CharacterController自带胶囊碰撞器,里面包含有刚体的属性;Rigidbody就是刚体,使物体带有刚体的特征。什么是Trigger?Collider勾选Is Trigger属性,碰撞器变成触发器;在物体发生碰撞的整个过程中,有几个阶段,分别列出对应的函数?OnCollisionEnter(进入)、OnCollisionStay(保持)、OnCollisionExit(退出)什么叫做链条关节?Hinge Joint,可以模拟两个物体间用一根链条连接在一起的情况,能保持两个物体在一个固定距离内部相互移动而不产生作用力,但是达到固定距离后就会产生拉力。8. 导航网格参看PDF9. 解释下A*寻路?(AI是实时计算的,导航网格是自动计算的。AI可以自己研究算法,比导航网格更方便,导航网格被封装了。)首先,A*算法的提出是为了解决游戏中从A点到目标B点绕过障碍物 寻找最短路径的问题。其次,A*算法核心为:启发式搜索、估值函数、选取最小估值最后,A*算法有优点也有缺点,它理论上将是时间最优的,但空间增长是指数级别的10. 光照贴图(Lightmapping)Lightmapping是一种增强静态场景光照效果的技术,较少的性能消耗使静态场景看上去更真实、丰富以及更具有立体感。Unity使用Autodesk的Beast插件。使用光照贴图的优点:A:使用光照贴图比使用实时光源渲染要快 B:可以降低游戏内存消耗 C、多个物体可以使用同一张光照贴图11. 后期屏幕渲染参看PDF12. 遮挡剔除参看PDF13. 插件最喜欢的就是U3D中的插件系统,Unity3D中的插件极大得提高了开发效率。问题:常用的插件有哪些?NGUI、2D Toolkit、iTween、PlayMaker、特效插件FxMaker、NGJMinMap(小地图)等(最好多熟悉几个插件,问的时候好回答)一 界面制作 推荐:NGUI二 2D游戏制作 推荐:2D Toolkit /tu:lkt 工具包,工具箱三 可视化编程 推荐:PlayMaker四 插值插件 推荐:iTween,HOTween五 路径搜寻 推荐:Simple Path14. iTween插件是什么?iTween是一个动画库。原理?iTween的核心是数值插值,简单说就是给iTween两个数值(开始值,结束值),它会自动生成一些中间值。应用场景?对象移动、振屏效果15. 协同程序Coroutine协同程序,即在主程序运行时同时开启另一段逻辑处理,来协同当前程序的执行。换句话说,开启协同程序就是开启一个线程。问题:协同程序有几种开启方式?有两种。在Unity3D中,使用StartCoroutine(string methodName)和StartCoroutine(IEnumerator routine)都可以开启一个线程。区别在于使用字符串作为参数可以开启线程并在线程结束前终止线程,相反使用IEnumerator 作为参数只能等待线程的结束而不能随时终止(除非使用StopAllCoroutines()方法);另外使用字符串作为参数时,开启线程时最多只能传递一个参数,并且性能消耗会更大一点,而使用IEnumerator 作为参数则没有这个限制。问题:如何终止协同程序?使用StopCoroutine(string methodName)来终止一个协同程序,使用StopAllCoroutines()来终止所有可以终止的协同程序,但这两个方法都只能终止该MonoBehaviour中的协同程序。还有一种方法可以终止协同程序,即将协同程序所在gameobject的active属性设置为false。问题:协同程序和线程之间的区别?协程和线程差不多,线程的调度是由操作系统完成的,协程把这项任务交给了程序员自己实现,当然也就可以提高灵活性,另外协程的开销比线程要小,在程序里可以开更多的协程。线程与协同程序的主要区别在于,一个具有多线程的程序可以同时运行几个线程,而协同程序却需要彼此协作地运行。就是说,一个具有多个协同程序的程序在任何时刻只能运行一个协同程序,并且正在运行的协同程序只会在其显示地挂起时,它的执行才会暂停。16. 动画系统U3D中支持模型动画和骨骼动画,模型动画是模型中自包含的帧动画,使用Animation组件控制;骨骼动画使用Animator组件控制,也就是Mecanim系统,通过状态机和混合树控制动画的状态转换。骨骼动画应用最广泛。问题:写出Animation的五个方法?AddClip 添加剪辑、Blend 混合、Play 播放、Stop 停止、Sample 采样17. 如何实现游戏的暂停、加速和减速?Time.timeScale 0;即可让游戏暂停。Time.timeScale1时,Update、LateUpdate、FixedUpdate 都按正常的时间来执行。Time.timeScale2时,Update和 LateUpdate的执行速度是之前的2倍,而FixedUpdate还是按正常时间来执行。18. 如何在Unity3D中使用单例模式?先声明一个静态私有变量,如:instance;再声明一个静态公共方法,如:GetInstance,在该方法中判断instance为null时,通过GameObject.FindObjectOfType(typeof(MyClass)创建instance的实例(在C#中直接new一个新的实例),不为null则直接返回。参考代码:public class MyClass private static MyClass instance; public static MyClass GetInstance() if (!instance) instance = GameObject.FindObjectOfType(typeof(MyClass); return instance; 19. 什么是游戏AI游戏AI是游戏中的人工智能,AI中最常用到的是随机数Random和状态控制。如怪物AI:巡逻(随机目标点)-发现-追赶-攻击-返回-继续巡逻在实际项目中,AI脚本的参数往往设置成Public,供策划人员修改。如:攻击速度、技能类型、移动速度、命中率、攻击百分比形成一个闭环,保证任何时候Ai可用要能够画出逻辑图20. Unity3D中脚本的编译顺序脚本的编译过程分四步:.编译所有 ”Standard Assets”, “Pro Standard Assets” or “Plugins” 目录下的代码.编译所有“Standard Assets/Editor”, “Pro Standard Assets/Editor” or “Plugins/Editor” 目录下的代码.编译除了上面列出来的目录和Editor目录之外的所有代码.编译Editor目录下的代码问题:如何在C#脚本中调用JS脚本中的方法?如果你希望某个Javascript能被其他脚本引用,那么把它放到第一组的某个目录里,然后把要使用它的代码放在第三组的某个目录里就好了。同样,如果希望某个C#代码能被其他Javascript脚本引用,也必须把这个C#脚本放到第一组的某个目录里,Javascript代码放到第三组的某个目录里。编辑器类存放路径是什么?工程目录下的Assets/Editor文件夹下。21. U3D提供了一个用于保存读取数据的类,(playerPrefs),请列出保存读取整形数据的函数PlayerPrefs.SetInt与PlayerPrefs.GetInt22. unity3d从唤醒到销毁有一段生命周期,请列出系统自己调用的几个重要方法。AwakeOnEnable StartUpdate FixedUpdateLateUpdate OnGUI ResetOnDisable OnDestroy23. 有两个相同的方法,放在两个脚本的Awake里,将这两个脚本放在同一个游戏对象上,先执行那个?(李老师原创)跟脚本的添加顺序有关,后添加的先执行。由此可以推断游戏对象添加的组件以“栈”的数据结构保存,后进先出。24. 物理更新一般在哪个系统函数里?FixedUpdate,每固定帧绘制时执行一次,和update不同的是FixedUpdate是渲染帧执行,如果你的渲染效率低下的时候FixedUpdate调用次数就会跟着下降。FixedUpdate比较适用于物理引擎的计算,因为是跟每帧渲染有关。Update就比较适合做控制。25. 移动相机动作在哪个函数里,为什么在这个函数里。LateUpdate,,是在所有update结束后才调,比较适合用于命令脚本的执行。官网上例子是摄像机的跟随,都是在所有update操作完才跟进摄像机,不然就有可能出现摄像机已经推进了,但是视角里还未有角色的空帧出现。26. 当游戏中需要频繁创建一个物体对象时,我们需要怎么做来节省内存。对象池,做一个pool,游戏开始时预先实例化足够的数量,然后用的时候取不用的时候收回27. 一个场景放置多个camera并同时处于活动状态,会发生什么实际看到的画面由多个camera的画面组成,由depth、Clear Flag、Culling Mask都会影响最终合成效果。28. 简述prefab的用处和环境在游戏运行时实例化,prefab相当于一个模版,对你已有的素材、脚本、参数做一个默认配置,以便于以后修改,同时prefab打包的内容简化了导出的操作,便于团队的交流。29. 如何销毁一个UnityEngine.Object以及其子类Destroy30. 为什么u3d会出现组件上数据丢失的情况一般是组件上绑定的物体对象被删除了31. u3d下如何安全的在不同工程迁移asset数据方法1,可以把assets目录和ProjectSetting目录一起迁移,方法2,导出包方法3,用unity带的assets server功能32. 请描述游戏动画有哪几种,以及其原理。主要有关节动画、单一网格模型动画(关键帧动画)、骨骼动画。关节动画把角色分成若干独立部分,一个部分对应一个网格模型,部分的动画连接成一个整体的动画,角色比较灵活Quake2中使用了这种动画。单一网络模型动画由一个完整的网格模型构成,在动画序列的关键帧里记录各个顶点的原位置及其改变量,然后插值运算实现动画效果,角色动画较真实。骨骼动画,广泛应用的动画方式,集成了以上两个方式的优点,骨骼按角色特点组成一定的层次结构,由关节相连,可做相对运动,皮肤作为单一网格蒙在骨骼之外,决定角色的外观。皮肤网格每一个顶点都会受到骨骼的影响,从而实现完美的动画。(骨骼动画是由关节动画发展而来的,如今基本都使用骨骼动画来实现角色动画)问题:写出Animation的五个方法33. 如何优化内存?有很多种方式,例如1.压缩自带类库;2.将暂时不用的以后还需要使用的物体隐藏起来而不是直接Destroy掉;3.释放AssetBundle占用的资源;4.降低模型的片面数,降低模型的骨骼数量,降低贴图的大小;5.使用光照贴图,使用多层次细节(LOD),使用着色器(Shader),使用预设(Prefab)。34. 图像学底层原理(李老师原创)1.GPU计算:顶点、线、三角、像素颜色(贴图)2.(摄像机进行)可视化检测3.调用显卡的底层渲染API(OpenGL、DX11)-DrawPoint/DrawLine/DrawColor35. NGUI核心原理?(原创)UIGeomety(几何图形计算)-UIWebgit(部件)-UIPanel(容器分组)-UICamera(可视化检测)-UIDrawCall(渲染)36. 坐标系Unity3D采用左手坐标系坐标系有:世界坐标系、屏幕坐标系、GUI坐标系问题:localPosition与Position的使用区别?localPosition:自身位置,相对于父级的变换的位置。Position:在世界坐标transform的位置37. 脚本问题:怎么拿到一个对象上脚本的方法GameObject.GetComponent();38. 简述一下对象池,你觉得在FPS游戏里哪些东西适合使用对象池?对象池就存放需要被反复调用资源的一个空间,比如游戏中要常被大量复制的对象,子弹,敌人,以及任何重复出现的对象。39. 对象池的原理?(原创)作用:复用,提高对象使用效率,避免频繁的销毁、创建操作。过程:预热-在使用之前批量创建对象使用-从对象列表中获取回收-隐藏扩容-自动批量创建(使用对象达到总容量80%)40. 角色换装怎么做?思路1.模型贴图(类似人体彩绘)2.Mesh Reander(换网格)3.纸娃娃系统41. 技能释放怎么做?一般游戏中的技能都是粒子特效,结合输入控制粒子特效的播放。42. 有限状态机每个对象都维护自己的状态机,状态机的状态改变,靠状态触发器。每一个状态触发器都包含三个固定函数:Enter(进入)、Excute(执行)、Exit(退出)请给我设计一个状态机,完成一个简单的xxxx情景。答:状态机并不是单纯的switch结构,如果你是新手,你说switch我可以容忍,如果你干了好些年2Dx,然后想自废武功搞U3d了,再说switch就直接pass了。FSMFSMSystem负责状态的切换FSMState表示各个状态基类,执行Excute、进入、退出、切换条件ChangeCheck-Update可以怪物AI来使用FSM对比(伪代码)Update()If(state1) If(state is 2) /go to state2Excute();If(state2)43. Unity 连接数据库本地数据最常用的是SQLite,需要得到Mono.Data.Sqlite.dll文件与System.Data.dll文件。44. 本地数据存储方式?(原创)文本:xml、json、excel(cvs)数据库:SQLitePlayerPrefes45. 请描述MeshRender中material和shader的区别?Shader(着色器)实际上就是一小段程序,它负责将输入的Mesh(网格)以指定的方式和输入的贴图或者颜色等组合作用,然后输出。绘图单元可以依据这个输出来将图像绘制到屏幕上。输入的贴图或者颜色等,加上对应的Shader,以及对Shader的特定的参数设置,将这些内容(Shader及输入参数)打包存储在一起,得到的就是一个Material(材质)46. LayerMask.NameToLayer()这个方法有什么作用?LayerMask的使用是按位操作的,LayerMask.NameToLayer(Players)返回该Layer的编号。在射线、摄像机遮罩剔除(Culling Mask)使用47. itween插件的作用是什么,itween作用于世界坐标还是局部坐标,请列举出3个其常用方法?iTween是一个动画库,作者创建它的目的就是最小的投入实现最大的产出。让你做开发
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年催眠心理测试题及答案
- 安全管理笔试试题及答案
- 2025年四川省自贡市专业技术继续教育公需科目考试及答案
- 鄂尔多斯市人民医院姑息治疗技能考核
- 2025年国际贸易单证实务考试试题及答案
- 邢台市人民医院社区群体性健康干预项目设计考核
- 晋城市中医院宫颈环扎术专项技能考核
- 焊接专机装配工岗前可持续发展考核试卷含答案
- 特种气体生产工操作技能模拟考核试卷含答案
- 白酒贮酒工岗前合规考核试卷含答案
- lng应急预案安全培训课件
- 2025年健身运动与体能训练技术考试试题及答案解析
- 心理韧性:在困境中绽放的力量+课件-2025-2026学年高一上学期时代楷模主题班会
- 高分子材料概论橡胶课件
- 2025年学历类成考专升本-政治参考题库含答案解析(5套试卷)
- 围手术期感染预防措施
- 建设工程停工承包人费用计算标准T-YJXB-0001-2023知识解读
- 腰肌劳损知识课件
- 国内无人机物流发展现状
- 六年级上册数学第一单元测试卷(附答案)北京版
- 学堂在线 海上求生与救生 期末考试答案
评论
0/150
提交评论