Unity面试题 下载本文

内容发布更新时间 : 2024/5/22 14:52:03星期一 下面是文章的全部内容请认真阅读。

物体A必须带有(collider+rigidbody)或者CharacterController,另一个物体也必须至少带有collider

10.CharacterController和Rigidbody的区别

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

11.物体发生碰撞时,有几个阶段,分别对应的函数

三个阶段,OnCollisionEnter/Stay/Exit函数

12.u3d中,几种施加力的方式,描述出来

rigidbody.AddForce/AddForceAtPosition,都是rigidbody的成员函数

13.什么叫做链条关节

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

14.物体自旋转使用的函数叫什么

?????transform.Rotate

15.物体绕某点旋转使用函数叫什么

?????transform.RotateAround

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

?????PlayerPrefs.SetInt?与?PlayerPrefs.GetInt

17.unity3d提供了几种光源,分别是什么

平行光:Directional Light 聚光灯:Spot Light 点光源:Point Light

区域光源:Area Light(只用于烘培)

18.unity3d从唤醒到销毁有一段生命周期,请列出系统自己调用的几个重要方法。

Awake –>OnEnable –> Start??–> Update –> FixedUpdate –> LateUpdate –> OnGUI –> Reset –> OnDisable –> OnDestroy

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

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

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

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

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

做一个pool,游戏开始时预先实例化足够的数量,然后用的时候取不用的时候收回

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

实际看到的画面由多个camera的画面组成,由depth、Clear Flag、Culling Mask都会影响最终合成效果。

23.简述prefab的用处和环境

在游戏运行时实例化,prefab相当于一个模版,对你已有的素材、脚本、参数做一个默认配置,以便于以后修改,同时prefab打包的内容简化了导出的操作,便于团队的交流。

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

Destroy

25.为什么u3d会出现组件上数据丢失的情况

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

26.u3d下如何安全的在不同工程迁移asset数据

方法1,可以把assets目录和Library目录一起迁移, 方法2,导出包

方法3,用unity带的assets server功能

第三部分

1.什么是渲染管道?

是指在显示器上为了显示出图像而经过的一系列必要操作。 渲染管道中的很多步骤,都要将几何物体从一个坐标系中变换到另一个坐标系中去。 主要步骤有:

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

2.如何优化内存?

有很多种方式,例如 1.压缩自带类库;

2.将暂时不用的以后还需要使用的物体隐藏起来而不是直接Destroy掉; 3.释放AssetBundle占用的资源;

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

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

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

2.AssetBundle

4、什么是协同程序?

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

5、你用过哪些插件?

(最好多熟悉几个插件,问的时候好回答)

第四部分

1.反向旋转动画的方法是什么? 2.碰撞检测需要物体具备什么属性?

3.用代码实现第三角色控制器 4.实现吊机吊物体的功能

5.获取、增加、删除组件的命令分别是什么?

获取:GetComponent 增加:AddComponent 删除:Destroy

A.动画放大?B.动画转换?C.动画的淡入为其他动画 A.加载关卡?B.异步加载关卡?C.加载动作

8.调试记录到控制台的命令是什么?

Debug.Log();

9.编辑器类存放路径是什么?

工程目录下的Assets/Editor文件夹下。

10.使用原生GUI创建一个可以拖动的窗口命令是什么?

?GUI.DragWindow();

11.localPosition与Position的使用区别?

localPosition:自身位置,相对于父级的变换的位置。?Position:在世界坐标transform的位置

12.意义连线

Mathf.Round??四舍五入 Mathf.Clamp??限制 Mathf.Lerp???插值

13.写一个计时器工具,从整点开始计时,格式为:00:00:00 14.写出Animation的五个方法 15.怎么拿到一个对象上脚本的方法

GameObject.GetComponent<>();

16.上机题:用鼠标实现在场景中拖动物体,用鼠标滚轮实现缩放(用一个Cube即可)。 17.请简述向量的点乘,向量的叉乘以及向量归一化的几何意义?

?点乘的几何意义是:计算两个向量之间的夹角,以及在某一方向上的投影;

第五部分

1,在类的构造函数前加上static会报什么错?为什么?

构造函数格式为?public+类名如果加上static会报错(静态构造函数不能有访问修饰符) 原因:静态构造函数不允许访问修饰符,也不接受任何参数;? 无论创建多少类型的对象,静态构造函数只执行一次;?

运行库创建类实例或者首次访问静态成员之前,运行库调用静态构造函数;? 静态构造函数执行先于任何实例级别的构造函数;?

显然也就无法使用this和base来调用构造函数。

2,C# String类型比stringBuilder类型的优势是什么?

如果是处理字符串的话,用string中的方法每次都需要创建一个新的字符串对象并且分配新的内存地址,而stringBuilder是在原来的内存里对字符串进行修改,所以在字符串处理方面还是建议用stringBuilder这样比较节约内存。但是string?类的方法和功能仍然还是比stringBuilder类要强。

string类由于具有不可变性(即对一个string对象进行任何更改时,其实都是创建另外一个string类的对象),所以当需要频繁的对一个string类对象进行更改的时候,建议使用StringBuilder类,StringBuilder类的原理是首先在内存中开辟一定大小的内存空间,当对此StringBuilder类对象进行更改时,如果内存空间大小不够,会对此内存空间进行扩充,而不是重新创建一个对象,这样如果对一个字符串对象进行频繁操作的时候,不会造成过多的内存浪费,其实本质上并没有很大区别,都是用来存储和操作字符串的,唯一的区别就在于性能上。

String主要用于公共API,通用性好、用途广泛、读取性能高、占用内存小。 StringBuilder主要用于拼接String,修改性能好。

不过现在的编译器已经把?String?的?+?操作优化成?StringBuilder?了,所以一般用String就可以了 String是不可变的,所以天然线程同步。 StringBuilder可变,非线程同步。

3,C#?函数Func(string a, string b)用Lambda表达式怎么写?

4,数列1,1,2,3,5,8,13...第n位数是多少?用C#递归算法实现 Int fax(n) { }

通项公式应该是an = a(n-1) + a(n-2) a3=2=1+1 a4=3=1+1+1 a5=1+1+1+2 a6=1+1+1+2+3 .........

an=1+1+1+2+3+...+(n-2)+(n-3)

If(n == 1)

Return 1;

=2+(n-2)(n-3)/2 (n>=3)?这是通项公式,至于递归?…

5,一个简单的游戏,怪物会走动\\攻击\\死亡,游戏角色会走动,跳跃\\攻击\\格挡\\死亡,还会接受玩家从输入端输入的指令,NPC会走动,他们彼此之间可以互相通信.请画出以上三种角色的UML图示.

答:

6,NGUI Button怎样接受用户点击并调用函数,具体方法名称是什么

OnClick()

主要是在UICamera脚本中用射线判断点击的物体并通过SendMessage调用OnClick() OnPress()等函数,可以说NGUI的按钮是通过发消息这个方式调用的。

7,怎么判断两个平面是否相交?不能用碰撞体,说出计算方法

答:

8, <愤怒的小鸟>给予初速度以后,怎么让小鸟受到重力和空气阻力的影响而绘制抛物线轨迹,说出具体的计算方法.

?Vector3 v代表初速度v'代表现在的速度,假设小鸟是沿的z轴也就是transform.forward方向运动的质量为1,那么v‘=v-new Vector3(0,g*t,f*t),transform.Translate(v')做的就是抛物线运动(g为重力加速度不要用现实中的需要自己调试,f为阻力也要自己调试设置,t为时间)