unity创建一个简单对象的开销_Unity常见面试题(二)

本文详细介绍了Unity引擎中的动画系统和碰撞处理,涵盖Mecanim的优势、关键帧动画、碰撞器与触发器的区别、线程与协程的使用以及动画层、权重和Shader相关知识点,旨在帮助读者深入理解Unity开发中的核心概念和技术。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

111.

[动画系统]如何将其他类型的动画转换成关键帧动画?

动画->点缓存->关键帧

112.

[动画]Unity引擎Mecanim动画系统功能优点?

答:

l  简单化对类人角色动画设计与功能实现的工作流程。

l  Mecanim动画系统使用一个可视化编程工具来管理动画之间复杂的交互。

l  对完成绑定骨骼的类人角色,能够对身体不同的地方使用不同的逻辑进行动画控制。

l  可以在角色动画播放过程中添加动画事件。

l  人形动画骨骼动画可重复使用。

113.

[UI]请简述NGUI中Panel和Anchor的作用 。

答:Panel是一个容器,它将包含所有UI小部件,并负责将所包含的部件组合。

Anchor是NGUI中屏幕分辨率的自适应性,来适应不同的分辨率的屏幕显示。

注:

114.

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

答:以平面任意两点,取两平面法向量,链接两点线段,线段是否与法向量的夹角来判断是否平行。

法向量如果平行,看线段与法向量的夹角,如果平行则两平面重合,判断边界是否相交。

如果平行,且有夹角,说明不重合两平面平行,一定不相交。

如果法向量不平行,将该线段的在两平面投影方向上的射线判断与平面的边界条件,如果两条射线的交点都在边界内,则相交,否则不相交。

注:

115.

[碰撞]MeshCollider和其他Collider的一个主要不同点?

答:MeshCollider是网格碰撞器,对于复杂网状模型上的碰撞检测,比其他的碰撞检测精确的多,但是相对其他的碰撞检测计算也增多了,所以一般使用网格碰撞也不会在面数比较高的模型上添加,而会做出两个模型,一个超简模能表示物体的形状用于做碰撞检测,一个用于显示。

MeshCollider有Mesh属性

116.

[碰撞]Unity3d中的碰撞器和触发器的区别?

答:

碰撞器物体不能互相进入到对方内部,触发器可以。

触发器角色控制器可以使用,碰撞器中不能使用。

触发器没有物理属性了,碰撞器可以有力存在。

碰撞器调用OnCollisionEnter/Stay/Exit函数,触发器调用OnTriggerEnter/Stay/Exit函数。

117.

[碰撞]物体发生碰撞的必要条件。

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

注:动的物体,你希望发生碰撞效果的物体要带能接受物理引擎的操作,最常见的就是挂载Rigidbody组件。

118.

[碰撞]CharacterController和Rigidbody的区别?

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

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

注:

119.

[碰撞]当一个细小的高速物体撞向另一个较大的物体时,会出现什么情况?如何避免?

答:穿透(碰撞检测失败)。将物体移动放在FixedUpdate中,尽量使用物理引擎自己的移动方法。

避免的方法:把刚体的实时碰撞检测打开Collision

Detection修改为Continuous

Dynamic

注:

120.

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

答:

主要是三个阶段:

1.Collider.OnCollisionEnter 进入碰撞,当collider/rigidbody开始触动另一个rigidbody/collider时OnCollisionEnter被调用。

2.Collider.OnCollisionStay

逗留碰撞,每个collider/rigidbody触动rigidbody/collider,将在每帧调用OnCollisionStay。通俗的说,一个碰撞器或刚体触动另一个刚体或碰撞器,在每帧都会调用OnCollisionStay,直到它们之间离开不接触。

3.Collider.OnCollisionExit 退出碰撞,当 collider/rigidbody停止触动另一个

rigidbody/collider时,OnCollisionExit被调用。

121.

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

答:

122.

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

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

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

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

3.骨骼动画,广泛应用的动画方式,集成了以上两个方式的优点,骨骼按角色特点组成一定的层次结构,有关节相连,可做相对运动,皮肤作为单一网格蒙在骨骼之外,决定角色的外观,皮肤网格每一个顶点都会受到骨骼的影响,从而实现完美的动画。

123.

[动画]反向旋转动画的方法是什么?

答:反转动画,将动画的播放速度调到-1。

124.

[动画]写出Animation的五个方法。

答:AddClip 添加剪辑、Blend 混合、Play 播放、Stop 停止、Sample 采样 、CrossFade淡入淡出切换动画、IsPlaying是否正在播放某个动画

125.

[动画]动画层(AnimationState Layers)的作用是什么?

答:动画层作为一个具有层级动画编辑概念的工具,可以用来制作和处理任何类型的动画。202,203题

126.

[动画]Itween插件的作用是什么,Itween作用于世界坐标还是局部坐标,请列举出3个其常用方法?

答:ITween是补间动画的一个插件,主要作用就是给出开始、结束的值、时间,此插件实现各种动画,晃动,旋转,移动,褪色,上色,音量控制等等。

方法:    1.MoveTo  物体移动

2.ColorTo:随着时间改变对象的颜色组

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

127.

[动画]什么是法线贴图 、CG动画 ?

答:

法线贴图:是一种特殊的纹理,可以应用在3D表面,让低模呈现出更明显的凹凸效果。一

般应用在CG动画、美术效果要求较高的单机游戏

CG动画:游戏中的CG动画其实是用3D模拟引擎制作的游戏短片,一般画面效果比较真实。

128.

[线程和协程]Unity3D是否支持写成多线程程序?如果支持的话需要注意什么?(?)

答:Unity支持多线程,如果同时要处理很多事情或者与Unity的对象互动小可以用thread,否则使用coroutine。

注意:1.虽然支持多线程,但是仅能从主线程中访问Unity3D的组件,对象和Unity3D系统调用,所以如果使用的话需要把组件中的数值传到开启的新线程中。

2.C#中有lock这个关键字,以确保只有一个线程可以在特定时间内访问特定的对象

129.

[线程和协程]Unity3D的协程和C#线程之间的区别是什么?

答:多线程程序同时运行多个线程,除主线程之外的线程无法访问Unity3D的对象、组件、方法,而在任一指定时刻只有一个协程在运行。

130.

[线程和协程]什么是协同程序?

答:在主线程运行时同时开启另一段逻辑处理,来协助当前程序的执行。使用户可以编写更灵活的程序来控制运动、序列以及对象的行为。

131.

[3D数学]四元数是什么?主要作用什么?对欧拉角的优点是什么?

答:所谓四元数,就是把4个实数组合起来的东西。4个元素中,一个是实部,其余3个是虚部

作用:四元数用于表示旋转

优点:

1)能进行增量旋转

2)避免万向锁

3)给定方位的表达方式有两种,互为负(欧拉角有无数种表达方式)

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

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

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

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

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

132.

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

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

133.

[摄像机]Unity摄像机有几种工作方式,分别是什么?

答:正交和透视。

正交无法看到一个物体距离自己有多远,或者远近的变化,物体也不会随着距离而收缩,所以一般做2D游戏或者是UI时会使用正交摄像机。

透视一般看物体会随着距离有大小的变化,一般3D游戏里经常使用这种摄像机。

134.

[预制件]Prefab的作用?如何在移动环境的设备下恰当地使用它?

答:Prefab是预制件(预制物),一般当游戏中需要频繁创建一个物体时,使用预制物可以节省内存,方便创建,方便对游戏物体进行操作,方便对属性进行修改。

135.

[预制件]unity当需要频繁创建一个物体对象时,怎样减少内存?

答:动态加载再实例化,如果自己不主动清理内存的话,再次加载不会增加内存的,会自动去取之前已经加载好的assets,如果这一个assets你都嫌多的话,那你只能减资源了,比如,模型面数,纹理尺寸等

136.

[ Shader]写出光照计算中的diffuse的计算公式

答:实际光照强度l=环境光(lambient)+漫反射光(Idiffuse)+镜面高光(lspecular)

环境光:lambient=环境光强度(Aintensity)*环境光颜色(Acolor)

漫反射光:ldiffuse=镜面光照强度(Dintensity)*镜面光颜色(Scolor)*(光的反射向量(R).观察者向量(V))^镜面光指数(n)

137.

[ Shader]MeshRender中material和shader的区别?

答:MeshRender是模型渲染的组件,有此组件物体才能显示出来

Material是材质球,实际就是shader的实例,并进行赋值,贴图、纹理、颜色等。

Shader是着色器,实际上是一段程序,还可以用来实现一些仅靠贴图不容易实现的效果,如玻璃。

Shader大致分为:1.表面着色器

2.顶点和片元着色器

3.固定功能着色器

138.

[ Shader]alpha blend工作原理

答:Alpha Blend是 实现透明效果,Color = 原颜色*alpha/255+目标色*(255-alpha)/255

139.

[ Shader]光照贴图 的优势是什么&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值