unity基础1
1.unity物理系统的理解?
Unity内置了NVIDIA的Physx物理引擎,可以通过物理引擎⾼效、逼真地模拟刚体碰撞、车辆驾驶、布料、重⼒等物理效果,使游戏画⾯更加真实⽽⽣动。
2.Unity粒⼦系统的理解?
粒⼦系统在Unity通常⽤作制作烟雾,蒸汽,⽕焰和其他雾化效果,通过⼀到两个材质和不断绘画,创造⼀个混乱特效。典型的粒⼦系统在⼀个物体上包括⼀个Particle Emitter粒⼦发射器, ⼀个Particle Animator粒⼦播放器和⼀个Particle Renderer粒⼦渲染器,如果想和别的物体交互,可以添加⼀个ParticleCollider粒⼦碰撞器到物体上。
3. Unity3d中的碰撞器和触发器的区别?
碰撞器是触发器的载体,⽽触发器只是碰撞器⾝上的⼀个属性。当Is Trigger=false时,碰撞器根据物理引擎引发碰撞,产⽣碰撞的效果,可以调⽤OnCollisionEnter/Stay/Exit函数;当Is Trigger=false时,碰撞器被物理引擎所忽略,没有碰撞效果。如果既要检测到物体的接触⼜不想让碰撞检测影响物体移动或要检测⼀个物件是否经过空间中的某个区域这时就可以⽤到触发器
1. 碰撞器物体不能互相进⼊到对⽅内部,触发器可以。
2. 触发器⾓⾊控制器可以使⽤,碰撞器中不能使⽤。
3. 触发器没有物理属性了,碰撞器可以有⼒存在。
4. 碰撞器调⽤OnCollisionEnter/Stay/Exit函数,触发器调⽤OnTriggerEnter/Stay/Exit函数。
4. 物体发⽣碰撞的必要条件?
两个物体都必须带有碰撞器(Collider),其中⼀个物体还必须带有Rigidbody刚体,⽽且必须是运动的物体带有Rigidbody脚本才能检测到碰撞。
5.在物体发⽣碰撞的整个过程中,有⼏个阶段,分别列出对应的函数
三个阶段,1.OnCollisionEnter 2.OnCollisionStay 3.OnCollisionEx
6.当⼀个细⼩的⾼速物体撞向另⼀个较⼤的物体时,会出现什么情况?如何避免?
碰撞检测失败,会直接穿透
6.1使⽤射线检测,检测他们之间的距离
6.2将检测⽅式改为连续检测, llisionDetectionMode=CollisionDetectionMode.Continuous;
或者是动态连续检测(CollisionDetectionMode.ContinuousDynamic)
6.3代码限制,加⼤计算量提前计算好下⼀个位置
7.MeshCollider和其他Collider的⼀个主要不同点?
MeshCollider是⽹格碰撞器,对于复杂⽹状模型上的碰撞检测,⽐其他的碰撞检测精确的多,但是相对其他的碰撞检测计算也增多了,所以⼀般使⽤⽹格碰撞也不会在⾯数⽐较⾼的模型上添加,⽽会做出两个模型,⼀个超简模能表⽰物体的形状⽤于做碰撞检测,⼀个⽤于显⽰。
8.NavMeshObstacle组件的作⽤?
寻路⽹格动态碰撞组件,⽤于运动的物体阻碍寻路物体效果。
9.你觉得怎么防⽌UI控件被点穿(如何过滤掉点击事件)。
  使⽤⼀个可渲染的物体或者panel,绑定boxcollider组件即可。如果你单⽤⼀个不可渲染的物体(这⾥点⼀下UIwiget),即使设定了⼤⼩和boxcollider,也是⽆法屏蔽的。(坑在这⾥)。
10.Unity打射线的⽅式
//从主这相机到⿏标点发射⼀条射线
Ray ray = Camera.main.usePosition);
//接受射线返回的碰撞信息
RaycastHit hitInfo;
//如果射线碰撞到东西
//EventSystem.current.IsPointerOverGameObject()  如果当前⿏标在 ui 上返回true 否则返回false
11.射线检测碰撞物体的原理是什么?
射线是3D世界中⼀个点向另⼀个⽅向发射的⼀条⽆终点的线,在发射轨迹中与其他物体发⽣碰撞时,它将停⽌发射。
12.通过什么可以区分射线碰到的游戏对象?
通过LayerMask(层的遮罩),RaycastHit返回的碰撞的标签。
unity3d入门
13.CharacterController和Rigidbody的区别
Rigidbody具有完全真实物理的特性,Unity中物理系统最基本的⼀个组件,包含了常⽤的物理特性,⽽CharacterController可以说是受限的的Rigidbody,具有⼀定的物理效果但不是完全真实的,是Unity为了使开发者能⽅便的开发第⼀⼈称视⾓的游戏⽽封装的⼀个组件
Character Controller ⾓⾊控制器控制器不会对加在它⾃⾝上的⼒做出反应,也不会⾃动推开其他刚体。如果想让⾓⾊控制器推开其他刚体或者对象,你可以在对象附加的脚本中添加OnControllerColliderHit()函数,这样对它们施加⼒就能够产⽣碰撞。 Character Controller相当于刚体碰撞器,但是没有刚体那样的物理特性,照样会触发OnCollision和OnTrigger的函数,照样会有刚体休眠!Character Controller运动时要使⽤Move或者SimpleMove才会进⾏相应的检测。
14.什么叫做链条关节?
Hinge Joint,可以模拟两个物体间⽤⼀根链条连接在⼀起的情况,能保持两个物体在⼀个固定距离内部相互移动⽽不产⽣作⽤⼒,但是达到固定距离后就会产⽣拉⼒。
15.在场景中放置多个Camera并同时处于活动状态会发⽣什么?
游戏界⾯可以看到很多摄像机的混合。
16.Unity3d的物理引擎中,有⼏种施加⼒的⽅式,分别描述出来
rigidbody.AddForce/AddForceAtPosition
17.⼀个⾓⾊要⽤到unity中寻路系统,应该添加哪个组件?
NavMeshAgent。
18.怎么判断两个平⾯是否相交?不能⽤碰撞体,说出计算⽅法。
在两个平⾯上分别取⼀个向量,然后看是否相交。
19.请简述AnimatorController中的Has Exit Time的作⽤是什么。
  当我们勾选了此项,在动画转换时会等待当前动画播放完毕后才会才会转换到下⼀个动画,如果当前动画时循环动画会等待本次播放完毕转换,所以对需要⽴即转换动画的情况下⼀定要取消勾选此项;还有⼀种情况时,当前动画播放完毕后会⾃动转换到箭头所指的下⼀条状态(没有其它条件时),此时必须勾选此项,否则动画播放完毕后会卡在最后⼀帧,如果是循环动画,则会⼀直循环播放。
20.动画层(Animation Layers)的作⽤是什么?
动画层作为⼀个具有层级动画编辑概念的⼯具,可以⽤来制作和处理任何类型的动画
21.简述Unity3d动画中avator的⽤处并举例。
在动画中有选择性地启⽤或禁⽤特定⾝体部位。⽐如⼀个跑的动画和⼀个开动画。如果要实现跑动中设计就需要使⽤avator。实现上⾝播放开动画,下⾝播放跑步动画。
22.请描述游戏动画有哪⼏种,以及其原理。
主要有关节动画、单⼀⽹格模型动画(关键帧动画)、⾻骼动画。
关节动画把⾓⾊分成若⼲独⽴部分,⼀个部分对应⼀个⽹格模型,部分的动画连接成⼀个整体的动画,⾓⾊⽐较灵活Quake2中使⽤了这种动画。
单⼀⽹络模型动画由⼀个完整的⽹格模型构成,在动画序列的关键帧⾥记录各个顶点的原位置及其改变量,然后插值运算实现动画效果,⾓⾊动画较真实。
⾻骼动画,⼴泛应⽤的动画⽅式,集成了以上两个⽅式的优点,⾻骼按⾓⾊特点组成⼀定的层次结构,由关节相连,可做相对运动,⽪肤作为单⼀⽹格蒙在⾻骼之外,决定⾓⾊的外观。⽪肤⽹格每⼀个顶点都会受到⾻骼的影响,从⽽实现完美的动画。(⾻骼动画是由关节动画发展⽽来的,如今基本都使⽤⾻骼动画来实现⾓⾊动画)
23.写出Animation的五个⽅法
Animation.Play/CrossFade/Stop/Sample/AddClip
24.itween插件的作⽤是什么,itween作⽤于世界坐标还是局部坐标,请列举出3个其常⽤⽅法?
  iTween是⼀个动画库,作者创建它的⽬的就是最⼩的投⼊实现最⼤的产出。让你做开发更轻松,⽤它可以轻松实现各种动画,晃动,旋转,移动,褪⾊,上⾊,控制⾳频等等“   ⽅法:a、MoveTo 物体移动;b、ColorTo:随着时间改变对象的颜⾊组; c、LookTo:随时间旋转物体让其脸部朝向所提供的Vector3或Transform位置
25.Material和Physic Material区别?
  PhysicMaterial 物理材质:物理材质描述,如何处理物体碰撞(摩擦,弹性)。 Material材质(材质类)为了获得⼀个对象使⽤的材
质,可以使⽤ Renderer.materia属性:
26.MeshRender中material和sharedmaterial的区别?
  修改sharedMaterial将改变所有物体使⽤这个材质的外观,并且也改变储存在⼯程⾥的材质设置。不推荐修改由sharedMaterial返回的材质。如果你想修改渲染器的材质,使⽤material替代。
27.如何安全的在不同⼯程间安全地迁移asset数据?三种⽅法
  27.1.将Assets⽬录和Library⽬录⼀起迁移
  27.2.导出包,export Package
  27.3.⽤unity⾃带的assets Server功能
28.Unity提供了⼏种光源,分别是什么
四种。
平⾏光:Directional Light
点光源:Point Light
聚光灯:Spot Light
区域光源:Area Light
29.使⽤Unity3d实现2d游戏,有⼏种⽅式?
使⽤本⾝的GUI,在Unity4.6以后出现的UGUI
2.把摄像机的Projection(投影)值调为Orthographic(正交投影),不考虑z轴;
3.使⽤2d插件,如:2DToolKit,和NGUI
30.Unity3d提供了⼀个⽤于保存和读取数据的类(PlayerPrefs),请列出保存和读取整形数据的函数
PlayerPrefs.SetInt() PlayerPrefs.GetInt()
31.在场景中放置多个Camera并同时处于活动状态会发⽣什么?
游戏界⾯可以看到很多摄像机的混合。
32.你觉得为什么UI摄像机和场景摄像机能协同⼯作,⽽且⼯作的这么尽如⼈意呢?
答案:UI摄像机和场景摄像机分别属于两个渲染层(Layer),所以它们之间的渲染互不⼲扰。它们⼯作得尽如⼈意(没有发⽣先后错
乱,UI永远位于场景之上层)的原因就是因为摄像机深度(depth)控制的好。
33.如何销毁⼀个UnityEngine.Object及其⼦类?
使⽤Destroy()⽅法;
34.请描述为什么Unity3d中会发⽣在组件上出现数据丢失的情况
⼀般是组件上绑定的物体对象被删除了
35..Net与Mono的关系?
mono是的⼀个开源跨平台⼯具,就类似java虚拟机,java本⾝不是跨平台语⾔,但运⾏在虚拟机上就能够实现了跨平台。只能在windows下运⾏,mono可以实现跨平台跑,可以运⾏于linux,Unix,Mac OS等。
36.简述Unity3D⽀持的作为脚本的语⾔的名称
Unity的脚本语⾔基于Mono的.Net平台上运⾏,可以使⽤.NET库,这也为XML、数据库、正则表达式等问题提供了很好的解决⽅案。Unity ⾥的脚本都会经过编译,他们的运⾏速度也很快。这三种语⾔实际上的功能和运⾏速度是⼀样的,区别主要体现在语⾔特性上。JavaScript、 C#、Boo
37.Unity和Android与iOS如何交互?
Unity可以到处Android和iOS的⼯程,然后通过安卓或者iOS的类去给Unity发消息,调⽤Unity中的⽅法
[DllImport("__Internal")]
private static extern void unityToIOS (string str);
UnitySendMessage("gameobject", "Method",msg);
private AndroidJavaObject jo;
void Start ()
{
//获取Android的Java接⼝
AndroidJavaClass jc = new AndroidJavaClass ("com.unity3d.player.UnityPlayer");
jo = jc.GetStatic<AndroidJavaObject> ("currentActivity");
}
38.将Camera组件的ClearFlags选项选成Depth only是什么意思?有何⽤处?
如果把摄像机的ClearFlags勾选为Deapth Only,那么摄像机就会只渲染看得见的对象,把背景会完全透明,这种情况⼀般⽤在两个摄像机以上的场景中
29.在编辑场景时将GameObject设置为Static有何作⽤?
设置游戏对象为Static时,这些部分被静态物体挡住⽽不可见时,将会剔除(或禁⽤)⽹格对象。因此,在你的场景中的所有不会动的物体都应该标记为Static。
40. ⼀张1024*2048的图⽚内存⼤⼩
1024*2048*32/8/1024/1024=8M
41.Unity 摄像机有⼏种模式,成像原理是什么?
Unity 摄像机有两种模式⼀种是透视摄像机,⼀种是正交摄像机,透视摄像机成像的原理是利⽤相似三⾓形来成像
42.简述prefab的⽤处
在游戏运⾏时实例化,prefab相当于⼀个模板,对你已经有的素材、脚本、参数做⼀个默认的配置,以便于以后的修改,同时prefab打包的内容简化了导出的操作,便于团队的交流。
43.Render的作⽤?描述MeshRender和SkinnedMeshRender的关系与不同
  Mesh就是指模型的⽹格(同名组件是⽤于调整⽹格属性的),MeshFilter⼀般是⽤于获得模型⽹格的组件,⽽MeshRender是⽤于把⽹格渲染出来的组件,
1.为什么dynamic font在unicode环境下优于static font
Unicode是国际组织制定的可以容纳世界上所有⽂字和符号的字符编码⽅案。
使⽤动态字体时,Unity将不会预先⽣成⼀个与所有字体的字符纹理。当需要⽀持亚洲语⾔或者较⼤的字体的时候,若使⽤正常纹理,则字体的纹理将⾮常⼤。
2.将图⽚的TextureType选项分别选为““Texture”和“Sprite”有什么区别
Sprite作为UI精灵使⽤,Texture作⽤模型贴图使⽤。Sprite需要2的整次幂,打包图⽚省资源
3.简述NGUI中Grid和Table的作⽤?
对Grid和Table下的⼦物体进⾏排序和定位
4.请简述NGUI中Panel和Anchor的作⽤
只要提供⼀个half-pixel偏移量,它可以让⼀个控件的位置在Windows系统上精确的显⽰出来(只有这个Anchor的⼦控件会受到影响)
如果挂载到⼀个对象上,那么他可以将这个对象依附到屏幕的⾓落或者边缘
5.UIPanel⽤来收集和管理它下⾯所有widget的组件。通过widget的geometry创建实际的draw call。没有panel所有东西都不能够被渲染出来,你可以把UIPanel当做Renderer
6.Canvas 有⼏种模式,如何配置?
7.UGUI如何打包图集?
6.UGUI 如何实现UI物体淡⼊淡出?
13.Image与RawImage的区别?
14.Unity有哪些特定的⽂件夹名字,有什么作⽤?
15.Unity如何实现游戏截图?
3. NGUI UGUI渲染顺序
  UGUI的三层渲染① Screen Space-Overlay模式(屏幕控件-覆盖模式) Screen Space-Overlay(屏幕控件-覆盖模式)的画布会填满整个屏幕空间,并将画布下⾯的所有的UI元素置于屏幕的最上层,或者说画布的画⾯永远“覆盖”其他普通的3D画⾯,如果屏幕尺⼨被改变,画布将⾃动改变尺⼨来匹配屏幕。 Screen Space-Overlay模式的画布有Pixel Perfect和Sort Layer两个参数: u Pixel Perfect:只有RenderMode为Screen类型时才有的选项。使UI元素像素对应,效果就是边缘清晰不模糊。 u Sort Layer: Sort Layer是UGUI专⽤的设置,⽤来指⽰画布的深度。② Screen Space-Camera模式(屏幕空间-摄影机模式) Screen Space-Camera(屏幕空间-摄影机模式)和Screen Space-Overlay模式类似,画布也是填满整个屏幕空间,如果屏幕尺⼨改变,画布也会⾃动改变尺⼨来匹配屏幕。所不同的是,在该模式下,画布会被放置到摄影机前⽅。在这种渲染模式下,画布看起来绘制在⼀个与摄影机固定距离的平⾯上。所有的UI元素都由该摄影机渲染,因此摄影机的设置会影响到UI画⾯。 Screen Space-Overlay模式的画布多了下⾯⼏个参数: u Render Camera:渲染摄像机 u Plane Distance:画布距离摄像机的距离 u Sorting Layer: Sorting Layer是UGUI专⽤的设置,⽤来指⽰画布的深度。 u Order in Layer:在相同的Sort Layer下的画布显⽰先后顺序。数字越⾼,显⽰的优先级也就越⾼。③ World Space(世界控件模式) World Space即世界控件模式。在此模式下,画布被视
为与场景中其他普通游戏对象性质相同的类似于⼀张⾯⽚(Plane)的游戏物体。画布的尺⼨可以通过RectTransform设置,所有的UI元素可能位于普通3D物体的前⾯或者后⾯显⽰。
7. 怎么判断掉线
1、使⽤UGUI有哪些可以优化的地⽅?
2、Unity图⽚压缩格式的选择?
4、UGUI中Image控件的透明度为0会合批吗?scale为0时会合批吗?
5、粒⼦怎么显⽰在两个UI控件之间?
68、LayerMask.NameToLayer()这个⽅法有什么作⽤?
  LayerMask的使⽤是按位操作的,LayerMask.NameToLayer("Players") 返回该Layer的编号。
4.如果⼀个地图很⼤,怎么办?
5.游戏地图是如何切换的?
3.你对UI功能模块之间相互通信有什么好看法。(或者问成Broadcast和sendMes的看法)
答案:UI模块之间尽量解耦合,使⽤BroadCast机智或者delegate机智。由于Unity⾃⾝的BroadCast和SendMsg效率是很低的,(务必百度⼀下这俩的区别,都有,我懒得复制粘贴了。)所以推荐使⽤NGUI⾃带的那个消息机智。具体的使⽤⽅法,下载任何⼀款NGUI3.5左右的版本,都能清楚的看到。更或者⾃⼰实现⼀个msgerpool也可以,思路是使⽤泛型写法+字典+delegate,效率也很⾼。
a.SendMessage 作⽤:调⽤⼀个对象的methodName函数,这个函数可以是公有的也可以是私有的,后⾯跟⼀个可选参数(此参数作为传⼊参数),最后⾯跟⼀个可选的设置参数(它有两个选项,后⾯再讲)。
b.SendMessageUpwards 作⽤:它的作⽤和SendMessage类似,只不过它不仅会向当前对象推送⼀个消息,也会向这个对象的⽗对象推送这个消息(记住,是会遍历所有⽗对象)。
c.BroadcastMessage 作⽤:这个函数的作⽤和SendMessageUpwards的作⽤正好相反,它不是推送消息给⽗对象,⽽是推送消息给所有的⼦对象,当然,也是会遍历所有的⼦对象。
6,NGUI Button怎样接受⽤户点击并调⽤函数,具体⽅法名称是什么
OnClick()
主要是在UICamera脚本中⽤射线判断点击的物体并通过SendMessage调⽤OnClick() OnPress()等函
数,可以说NGUI的按钮是通过发消息这个⽅式调⽤的。
5.怎样能迅速到某⼀个UI控件。
答案:分情况处理,这是⼀个优化策略的题⽬。⾸先如果这个控件我在awake的时候能知道,那么我会把它存成⼀个private变量,代码中使⽤的时候直接使⽤即可。如果不⾏,这个⼦物体是动态⽣成的(他可能有或者没有),那尽量使⽤FindChild,得到之后加以判断。如果不得不全局⼀个东西(⽐如到⾓⾊物体),才会⽤Find。
答案是:直接⽤WorldToScreenPoint⽅法
public Camera mycamera;//要转化到的⽬的摄像机,通常canvas在这个摄像机下(即canvas的render mode设置为这个摄像机)
Image kongjian;//⾃⼰要获取屏幕坐标的控件,可以是image,也可以是button等等
float x=mycamera.ansform.position).x;
float y=mycamera.ansform.position).y;
/
/x,y即为控件在屏幕的坐标camera.WorldToScreenPoint()⽅法返回的是⼀个position类型是vector3类型,camera为要转化到的⽬标摄像机,传⼊的参数为控件的世界坐标
6.你对遮挡关系有什么好的策略。
答案:这种问题的诞⽣是由于Ngui2采⽤了⼀种zorder+depth⽅式处理遮挡关系造成的,已经在ngui3⾥完全屏蔽掉了。只要维护depth即

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。