Unit --面试常问题一

来源:互联网 发布:iphone7p淘宝店铺 编辑:程序博客网 时间:2024/05/23 18:32
1、游戏对象消失三种方法的区别?(active、destroy、enabled)
gameObject.renderer.enabled=false;---这个是对象不再屏幕上渲染,但是它
还是实实在在存在的,只是相当于隐身,而物体本身的碰撞还是存在的

Destroy(gameObject);----这个是将对象直接摧毁,实际上该对象的内存并没有释放,

一般会在下个场景加载后才真正释放

gameObject.SetActive(false);---这个是停用该物体,在Find找该物体时  你是找不到的。


2、动态加载资源 的方式? 区别?
Resource.Load()---这个要求资源必须放到
Resource文件夹下,只能加载本地文件
Resource.LoadAll();
AssetBundle---它和www一起使用,可以实现从服务器上下载资源并动态加载

3、AssetBundle

AssetBundle的管理共分为三个部分:1)--AssetBundle文件2)--AssetBundle内存镜像 3)--AssetBundle内存对象实例

*****举一个例子说明AssetBundle如何进行内存释放?  Destroy ----AssetBundle.UnLoadUnusedAssets();

例如:GameObject go=Instantiate(AssetBundle.Load("MyPrefab"))as GameObject;  这个prefab比如是个npc。

1)当你不需要它的时候,你使用Destroy(go);你以为释放干净了,其实只是释放了Clone对象

通过AssetBundle.Load加载的所有引用、非引用的assets对象全部都静躺在内存里。这是使用AssetBundle1.UnLoad(true);

2)如果这个资源需要反复的读取,不方便UnLodad。可以使用Destroy以后,Resource.UnLoadUnusedAssets();

把所有与这个NPC相关的asset数据都销毁

3)当然如果这个NPC需要频繁的创建和销毁,就让那些Assets呆在内存中加速游戏体验

*****当第一次实例化 一个预制物体时,会出现卡一下?

这是因为第一次实例化之后相应的asset对象还没有创建,要加载系统内置的assetBundle并创建Assets,第一次以后,

虽然Destroy了,但是prefab的assets对象还在内存中,所有就快了。


       *****AssetBundle 的优点

可以动态加载资源

可以将资源放到服务器上,方便资源管理

4、对Rigidbody添加力的常用方式

AddForce---添加普通力

AddExplosionForce---添加爆炸力

AddForceAtPosition--添加位置力

5、碰撞器和触发器

碰撞器有碰撞效果,触发器没有,触发器是另一个特殊的碰撞器

6、光照贴图

它是一种增强静态场景光照效果的技术,较少的性能消耗使静态场景看上去更真实、丰富以及更有立体感

使用光照贴图的优点?

a--它比实时渲染要快

b--他可以降低游戏内存消耗

c--多个物体可以使用同一张光照贴图

7、协同程序

在主程序开始运行时,同时开启另一段逻辑处理,来协同当前程序的执行。换句话来说,开启一段协同程序就是开启一个线程

开启协同程序有几种方式?

StartCoroutine(string methName)

StartCoroutine(IEnumerator routine);

区别:1 前者可以再线程结束前终止线程,后者只能等待线程结束,除非使用StopAllCoroutine()方法

2 前者开启线程时 最多传递一个参数,并且性能消耗会更大一点,而后者没有参数现在;

后者使用实例:
private IEnumerator coroutine;

void Start()
{
coroutine = WaitAndPrint(2.0f);
StartCoroutine(coroutine);
}

private IEnumerator WaitAndPrint(float waitTime)
{
while (true)
{
yield return new WaitForSeconds(waitTime);
print("WaitAndPrint " + Time.time);
}
}

另一个阻止线程的方法,就是设置该物体为false状态

协同和线程之间的区别?

7、动画系统

模型动画--模型中自包含的帧动画,使用Animation控制

骨骼动画--使用Animator组件控控制,通过状态机和混合树控制动画的状态转换

写出Animation的五个方法?

AddClip添加剪辑 Blend混合  Play播放Stop停止 Sample采样


8、如何实现游戏的暂停、加速和减速?

Time.timeScale=0----暂停

Time.timeScale=1--Update,FixedUpdate,LateUpdate按正常的时间来执行

Time.timeScale=2---Update,LateUpdate的执行速度是之前的2倍,而FixedUpdate还是按正常的时间来执行的

9. U3D提供了一个用于保存读取数据的类,(playerPrefs),请列出保存读取整形数据的函数

PlayerPrefs.SetInt 与 PlayerPrefs.GetInt

10. 有两个相同的方法,放在两个脚本的Awake里,将这两个脚本放在同一个游戏对象上,先执行那个?

跟脚本的添加顺序有关,后添加的先执行。由此可以推断游戏对象添加的组件以“栈”的数据结构保存,后进先出。

11. 移动相机动作在哪个函数里,为什么在这个函数里。

LateUpdate,,是在所有update结束后才调,比较适合摄像机的跟随,在所有update操作完才跟进摄像机,不然就有可能出现摄像机已经推进了,但是视角里还未有角色的空帧出现。


12. 当游戏中需要频繁创建一个物体对象时,我们需要怎么做来节省内存

使用对象池,在一个pool,游戏开始时,实例化足够的数量,当需要时从里面获取,不需要时,收回即可

13.一个场景放置多个camera并同时处于活动状态,会发生什么

会看到多个摄像机的叠加效果,它是由Clear Flag,Depth,Culling Mask共同影响的。

14. 简述prefab的用处和环境

在游戏实例化时,prefab就相当于一个模板,对你已经有的素材、脚步、参数做了一个默认的配置

以便于修改,同时Prefab打包的内容简化了导出的操作,便于团队交流


15、如何优化内存?

压缩自带类库 将暂时不适用的对象隐藏起来,而不是直接Destroy

释放AssetBundle占用的资源

降低模型的面数 、骨骼数、贴图大小

使用光照贴图,lod,shader,prefab


16 unity 链接数据库

本地数据最常用的时SQLite,需要得到Mono.Data.Sqlite.dll文件和System.Data.dll文件

17 本地数据存储的方式?


文件:xml,json,excel

数据库:SQLite

PlayerPrefes

18 请描述MeshRender中的Matterial和Shader的区别?

Shader(着色器)实际上就是一小段程序,它负责将输入的Mesh(网格)以指定的方式和输入的贴图或者颜色等组合作用,然后输出。绘图单元可以依据这个输出来将图像绘制到屏幕上。输入的贴图或者颜色等,加上对应的Shader,以及对Shader的特定的参数设置,将这些内容(Shader及输入参数)打包存储在一起,得到的就是一个Material(材质)

19  LayerMask.NameToLayer()这个方法有什么作用?

LayerMask的使用是按位操作的,LayerMask.NameToLayer("Players") 返回该Layer的编号。在射线、摄像机遮罩剔除(Culling Mask)使用

20. itween插件的作用是什么,itween作用于世界坐标还是局部坐标,请列举出3个其常用方法?

iTween是一个动画库,作者创建它的目的就是最小的投入实现最大的产出。让你做开发更轻松,用它可以轻松实现各种动画,晃动,旋转,移动,褪色,上色,控制音频等等

方法:
a、MoveTo  物体移动 ;b、ColorTo:随着时间改变对象的颜色组;

c、LookTo:随时间旋转物体让其脸部朝向所提供的Vector3或Transform位置。

21. 什么是局部坐标,什么是世界坐标?

世界坐标是不会变的,一直以世界坐标轴的XYZ为标准。

局部坐标其实就是自身的坐标,会随着物体的旋转而变化的。

22 哪个函数在游戏进入新场景后会被马上调用?

  MonoBehaviour.OnLevelWasLoaded

23. 请简述四元数的作用以及四元数相对于欧拉角的优点

作用:表示旋转

优点:

a.四元数不会有欧拉角存在的 gimbal lock 问题[万向节死锁

b.四元数由4个数组成,旋转矩阵需要9个数

c.两个四元数之间更容易插值

d.四元数、矩阵在多次运算后会积攒误差,需要分别对其做规范化(normalize)和正交化        (orthogonalize),对四元数规范化更容易

e.与旋转矩阵类似,两个四元组相乘可表示两次旋转


24、说一下您在U3D游戏中用到的设计模式?

单例
MVC(NGUI的MVC架构:

1. 一个UI Panel(比如背包界面)打成一个预制件-View 封装

2. 背包数据放在Model里面

3. 行为控制对应一个Controler脚本
0 0
原创粉丝点击