您好,欢迎来到Unity之家!   unity.jb51.net 
  • 首 页
  • 你问我答
  • 当前位置:首页 > 学习培训 > Unity入门 >
    Unity高频问答
    时间:2015-01-30 09:28 来源:Unity之家 作者:unity.jb51.net 浏览:收藏 挑错 推荐 打印



    最先执行的方法是:

    1、(激活时的初始化代码)Awake,2、Start、3、Update【FixUpdate、LateUpdate】、4、(渲染模块)OnGUI、5、再向后,就是卸载模块(TearDown),这里主要有两个方法OnDisable与OnDestroy


    高频问答的问题:


    1.什么是渲染管道?

    是指在显示器上为了显示出图像而经过的一系列必要操作。

    渲染管道中的很多步骤,都要将几何物体从一个坐标系中变换到另一个坐标系中去。

    主要步骤有:

    本地坐标->视图坐标->背面裁剪->光照->裁剪->投影->视图变换->光栅化。


    2.如何优化内存?

    有很多种方式,例如

    A、压缩自带类库;

    B、将暂时不用的以后还需要使用的物体隐藏起来而不是直接Destroy掉;

    C、释放AssetBundle占用的资源;AssetBundle资源包

    D、降低模型的片面数,降低模型的骨骼数量,降低贴图的大小;

    E、使用光照贴图,使用多层次细节(LOD),使用着色器(Shader),使用预设(Prefab)。


    3.动态加载资源的方式?(有时候也问区别,具体请百度)

    1.通过Resources模块,调用它的load函数:可以直接load并返回某个类型的Object,前提是要把这个资源放在Resource命名的文件夹下,Unity不关有没有场景引用,都会将其全部打入到安装包中。Resources.Load();

    2.通过bundle的形式:即将资源打成 asset bundle 放在服务器或本地磁盘,然后使用WWW模块get 下来,然后从这个bundle中load某个object。AssetBundle

    3.通过AssetDatabase.loadasset :这种方式只在editor范围内有效,游戏运行时没有这个函数,它通常是在开发中调试用的【AssetDatabase 资源数据库】

    区别:Resources的方式需要把所有资源全部打入安装包,这对游戏的分包发布(微端)和版本升级(patch)是不利的,所以unity推荐的方式是不用它,都用bundle的方式替代,把资源达成几个小的bundle,用哪个就load哪个,这样还能分包发布和patch,但是在开发过程中,不可能没更新一个资源就打一次bundle,所以editor环境下可以使用AssetDatabase来模拟,这通常需要我们封装一个dynamic resource的loader模块,在不同的环境下做不同实现。

    动态资源的存放

      有时我需要存放一些自己的文件在磁盘上,例如我想把几个bundle放在初始的安装里, unity有一个streaming asset的概念,用于提供存储接口的访问。我们需要在编辑器建立一个StreamingAssets名字的文件夹,把需要我们放在客户磁盘上的动态文件放在这个文件夹下面,这样安装后,这些文件会放在用户磁盘的指定位置,这个位置可以通过Application.streamingAssetsPath来得到。


    4.什么是协同程序?

    在主线程运行时同时开启另一段逻辑处理,来协助当前程序的执行。换句话说,开启协程就是开启一个线程。可以用来控制运动、序列以及对象的行为。


    5.你用过哪些插件?

    一 界面制作 推荐:NGUI

    二 2D游戏制作 推荐:2D Toolkit   //[?tu:lk?t] 工具包,工具箱

    三 可视化编程 推荐:PlayMaker

    四 插值插件 推荐:iTween,HOTween

    五 路径搜寻 推荐:Simple Path

    六 美术及动画制作 推荐:RageSpline,Smooth Moves

    七 画面增强    推荐:Bitmap2Material,Strumpy Shader Editor

    八 摄像机管理  推荐:Security Camera

    九 资源包  推荐:Nature Pack

    十、造路插件EasyRoads3D


    6.使用unity3d实现2d游戏,有几种方式?

    1.使用本身的GUI;

    2.把摄像机的Projection(投影)值调为Orthographic(正交投影),不考虑z轴;

    //[??:θ?'ɡr?f?k] adj. 正字法的,拼字正确的;正射

    3.使用2d插件,如:2DToolKit;


    7.Unity3d中的碰撞器和触发器的区别?

    触发器只是碰撞器身上的一个属性,碰撞器是触发器的载体。

    碰撞器有碰撞的效果,IsTrigger=false,可以调用OnCollisionEnter/Stay/Exit函数;

    {[k??l??n]n. 碰撞;冲突;(意见,看法)的抵触;(政党等的)倾轧}

    触发器没有碰撞效果,IsTrigger=true,可以调用OnTriggerEnter/Stay/Exit函数。

    a.如果不想让碰撞检测影响物体移动但是又想检测到碰撞这时用到触发器(Trigger)

    b.触发器用来检测一个物件是否经过空间中的某个区域


    8.物体发生碰撞的必要条件

    两个物体都必须带有碰撞器(Collider),其中一个物体还必须带有Rigidbody刚体。


    8.1 .CharacterController和Rigidbody的区别?

    CharacterController自带胶囊碰撞器,里面包含有刚体的属性;

    Rigidbody就是刚体,使物体带有刚体的特征。

    [CharacterController:角色控制器]

    Rigidbody具有完全真实物理的特性,而CharacterController可以说是受限的Rigidbody,具有一定的物理效果但不是完全真实的


    9.在物体发生碰撞的整个过程中,有几个阶段,分别列出对应的函数

    三个阶段

    1.OnCollisionEnter(进入碰撞) 2.OnCollisionStay (逗留碰撞) 3.OnCollisionExit(当退出碰撞)


    10.Unity3d的物理引擎中,有几种施加力的方式,分别描述出来

    rigidbody.AddForce/AddForceAtPosition,都在rigidbody系列函数中。


    11.什么叫做链条关节?

    Hinge Joint,可以模拟两个物体间用一根链条连接在一起的情况,能保持两个物体在一个固定距离内部相互移动而不产生作用力,但是达到固定距离后就会产生拉力。

    { [h?nd?] n. 铰链,折叶;关键,转折点;枢要,中枢}


    12.物体自身旋转使用的函数?

    Transform.Rotate()


    13.物体围绕某点旋转使用的函数?

    Transform.RotateAround()


    14.Unity3d提供了一个用于保存和读取数据的类(PlayerPrefs),请列出保存和读取整形数据的函数

    PlayerPrefs.SetInt() PlayerPrefs.GetInt()


    15.Unity3d提供了几种光源类型,分别是哪几种?

    四种。

    平行光:Directional Light 点光源:Point Light

    聚光灯:Spot Light 区域光源:Area Light


    16.Unity3d脚本从唤醒到销毁有着一套比较完整的生命周期,请列出系统自带的几个重要的方法。

    Awake—>Start—>Update—>FixedUpdate—>LateUpdate—>OnGUI—>Reset—>OnDisable—>OnDestroy


    17.物理更新一般放在哪个系统函数里?

    FixedUpdate,每固定帧绘制时执行一次,和Update不同的是FixedUpdate是渲染帧执行,如果你的渲染效率低下的时候FixedUpdate调用次数就会跟着下降。FixedUpdate比较适用于物理引擎的计算,因为是跟每帧渲染有关。Update就比较适合做控制。


    18.移动摄像机的动作放在哪个系统函数中,为什么放在这个函数中?

    LateUpdate,在每帧执行完毕调用,它是在所有Update结束后才调,比较适合用于命令脚本的执行。官网上例子是摄像机的跟随,都是在所有Update操作完才跟进摄像机,不然就有可能出现摄像机已经推进了,但是视角里还未有角色的空帧出现。


    19.当游戏中需要频繁创建一个物体时,我们需要怎样做能够节省内存?

    使用预制物体对象Prefab,然后复制创建。


    20.在场景中放置多个Camera并同时处于活动状态会发生什么?

    游戏界面可以看到很多摄像机的混合。


    21.请描述Prefab的作用,并描述如何在移动设备的环境下恰当的使用它?

    Prefab在实例化的时候用到,主要用于经常会用到的物体,属性方便修改。

    如何销毁一个UnityEngine.Object及其子类?

    使用Destroy()方法;


    22.请简述Unity3d下如何安全的在不同工程间迁移asset数据,请列举出三种方法?

    1.可以把assets目录和Library目录一起迁移

    2.导出包

    3.用Unity带的assets Server功能


    23.请描述游戏动画有哪几种,以及其原理?

    主要有关节动画、骨骼动画、单一网格模型动画(关键帧动画)。

    a.关节动画:把角色分成若干独立部分,一个部分对应一个网格模型,部分的动画连接成一 个整体的动画,角色比较灵活,Quake2中使用这种动画;

    b.骨骼动画,广泛应用的动画方式,集成了以上两个方式的优点,骨骼按角色特点组成一定的层次结构,有关节相连,可做相对运动,皮肤作为单一网格蒙在骨骼之外,决定角色的外观;

    c.单一网格模型动画由一个完整的网格模型构成,在动画序列的关键帧里记录各个顶点的原位置及其改变量,然后插值运算实现动画效果,角色动画较真实。


    24.请描述为什么Unity3d中会发生在组件上出现数据丢失的情况

    一般是组件上绑定的物体对象被删除了


    25.alpha blend工作原理

    Alpha Blend 实现透明效果,不过只能针对某块区域进行alpha操作,透明度可设。

    {['?lf?] 透明(度); [blend] 混合;把…掺在一起}


    26.写出光照计算中的diffuse的计算公式

    计算公式为: Idiffuse = Dintensity*Dcolor*N.L ; (Dintensity表示漫反射强度, Dcolor 表示漫反射光颜色, N 为该点的法向量, L 为光源向量 其中N与L点乘,如果结果小于等于0,则漫反射为0。){[d?'fju:z] vi. 传播;四散|intensity[?n'tens?t?] n. 强烈;(感情的)强烈程度;强度;烈度}


    27.Lod是什么,优缺点是什么?

    LOD(Level of detail)多层次细节,是最常用的游戏优化技术。它按照模型的位置和重要程度决定物体渲染的资源分配,降低非重要物体的面数和细节度,从而获得高效率的渲染运算。


    28.两种阴影判断的方法、工作原理。

    A.阴影由两部分组成:本影与半影

    a.本影:景物表面上那些没有被光源直接照射的区域(全黑的轮廓分明的区域)

    b.半影:景物表面上那些被某些特定光源直接照射但并非被所有特定光源直接照射的区域(半明半暗区域)

    求阴影区域的方法:做两次消隐过程

    一次对每个光源进行消隐,求出对于光源而言不可见的区域L;

    一次对视点的位置进行消隐,求出对于视点而言可见的面S;

    shadow area= L ∩ S

    B.阴影分为两种:自身阴影和投射阴影

    自身阴影:因物体自身的遮挡而使光线照射不到它上面的某些可见面

    工作原理:利用背面剔除的方法求出,即假设视点在点光源的位置。

    投射阴影:因不透明物体遮挡光线使得场景中位于该物体后面的物体或区域受不到光照照射而形成的阴影

    工作原理:从光源处向物体的所有可见面投射光线,将这些面投影到场景中得到投影面,再将这些投影面与场景中的其他平面求交得出阴影多边形,保存这些阴影多边形信息,然后再按视点位置对场景进行相应处理得到所要求的视图(利用空间换时间,每次只需依据视点位置进行一次阴影计算即可,省去了一次消隐过程)

    若是动态光源此方法就无效了。


    29.Vertex Shader是什么,怎么计算?

    顶点着色器

    顶点着色器是一段执行在GPU上的程序,用来取代fixed pipeline中的transformation和lighting,Vertex Shader主要操作顶点。

    Vertex Shader对输入顶点完成了从local space到homogeneous space(齐次空间)的变换过程,homogeneous space即projection space的下一个space。在这其间共有world transformation, view transformation和projection transformation及lighting几个过程。


    30.MipMap是什么,作用?

    MipMapping:在三维计算机图形的贴图渲染中有常用的技术,为加快渲染进度和减少图像锯齿,贴图被处理成由一系列被预先计算和优化过的图片组成的文件,这样的贴图被称为MipMap。



    (责任编辑:脚印)
    免责声明:Unity之家部分内容来源于互联网,如有侵权,请联系我们,本站将立即进行处理。