unity面试题——引擎(二)

脚本生命周期

Awake() 无论脚本是否处于激活状态都调用一次;
OnEnable() 当脚本被设置为激活状态时掉用一次;
Start() 当脚本被激活时调用一次;
FixedUpdate() 每隔固定时间间隔调用一次(默认0.02s),在0s时也会执行一次;
Update() 脚本处于激活状态时每帧调用一次;
LateUpdate() 在Update()之后调用一次;
OnGUI() 脚本处于激活状态时每帧调用两次(曾被用来渲染UI,推出UGUI之后几乎弃用);
OnDisable() 当脚本组件被设置为不可用时调用一次;
OnDestroy() 当脚本组件被销毁时掉用一次;

OnEnable、Awake、Start运行时的发生顺序?哪些可能在同一个对象周期中反复的发生?
答:Awake–>OnEnable->Start
OnEnable在同一周期中可以反复地发生!

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

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

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

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

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

使用Destroy()方法;

如何让已经存在的GameObject在LoadLevel后不被卸载掉?

DontDestroyOnLoad(ganeobject);

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

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

Addcomponent后哪个生命周期函数会被调用

对于AddComponent添加的脚本,其Awake,Start,OnEnable是在Add的当前帧被调用的
其中Awake,OnEnable与AddComponent处于同一调用链上
Start会在当前帧稍晚一些的时候被调用,Update则是根据Add调用时机决定何时调用:如果Add是在当前帧的Update前调用,那么新脚本的Update也会在当前帧被调用,否则会被延迟到下一帧调用。

调式记录到控制台的命令是什么?

Debug.Log();

U3D中用于记录节点空间几何信息的组件名称,及其父类名称

Transform 父类是 Component

Unity3D中的碰撞器和触发器的区别?

答:碰撞器是触发器的载体,而触发器只是碰撞器身上的一个属性。
当Is Trigger=false时,碰撞器根据物理引擎引发碰撞,产生碰撞的效果,可以调用OnCollisionEnter/Stay/Exit函数;
当Is Trigger=true时,碰撞器被物理引擎所忽略,没有碰撞效果,可以调用OnTriggerEnter/Stay/Exit函数。
如果既要检测到物体的接触又不想让碰撞检测影响物体移动或要检测一个物件是否经过空间中的某个区域这时就可以用到触发器。

物体发生碰撞的必要条件?

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

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

答:OnCollisionEnter、 OnCollisionStay、 OnCollisionExit

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

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

当一个细小的高速物体撞向另一个较大的物体时,会出现什么情况?如何避免?
穿透(碰撞检测失败)(例如CS射击游戏,可以使用开枪时发射射线,射线碰撞到则掉血击中)

CharacterController和Rigidbody的区别?

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

射线检测碰撞物的原理是?

答:射线是3D世界中一个点向一个方向发射的一条无终点的线,在发射轨迹中与其他物体发生碰撞时,它将停止发射 。

射线Raycast原理
从一个起点向一个方向发射一条物理射线,返回碰撞到的物体的碰撞信息

什么叫做链条关节?

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

<愤怒的小鸟>给予初速度以后,怎么让小鸟受到重力和空气阻力的影响而绘制抛物线轨迹,说出具体的计算方法
Vector3 v 代表初速度 v’代表现在的速度, 假设小鸟是沿的 z 轴也就是transform.forward 方向,运动的质量为 m,那么 v‘=v-new Vector3(0,mgt,ft),transform.Translate(v’)做的就是抛物线运动(g 为重力加速度不要用现实中的需要自己调试,f 为阻力也要自己调试
设置,t 为时间)

简述四元数Quaternion的作用,四元数对欧拉角的优点?

答:四元数用于表示旋转
相对欧拉角的优点:能进行增量旋转、避免万向锁、给定方位的表达方式有两种,互为负(欧拉角有无数种表达方式)

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

Transform.Rotate()
transform.RotateAround()

localPosition 与 Position 的使用区别?

localPosition :自身坐标系,相对于父级的位置
Position :世界坐标系中的位置

Image和RawImage的区别

Imgae比RawImage更消耗性能
Image只能使用Sprite属性的图片,但是RawImage什么样的都可以使用
Image适合放一些有操作的图片,裁剪平铺旋转什么的,针对Image Type属性
RawImage就放单独展示的图片就可以,性能会比Image好很多

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

GUI.DragWindow

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

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

用鼠标实现在场景中拖动物体,用鼠标滚轮实现缩放(用一个 Cube 即可)

在场景中添加一个Plan,Camera,Directional Light,Cube。添加两个脚本一个挂在Camera上,另一个挂在Cube上。
鼠标滚轮实现缩放:将摄像机的镜头拉近或者拉远,调整摄像机的视角就可以实现2.鼠标实现在场景中拖动物体:解决思路就是将世界坐标转换成屏幕坐标,然后计算物体与鼠标之间移动量,循环鼠标被按下操作,得到鼠标的当前位置,加上计算好的移动量,将新的坐标赋值给物理就行了。

画布的三种模式.缩放模式

屏幕空间-覆盖模

你可能感兴趣的:(unity,游戏引擎)