unity基础1

  • 格式:pdf
  • 大小:268.66 KB
  • 文档页数:6

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.OnCollisionEx6.当⼀个细⼩的⾼速物体撞向另⼀个较⼤的物体时,会出现什么情况?如何避免?

碰撞检测失败,会直接穿透6.1使⽤射线检测,检测他们之间的距离6.2将检测⽅式改为连续检测, rigifdbody.collisionDetectionMode=CollisionDetectionMode.Continuous;或者是动态连续检测(CollisionDetectionMode.ContinuousDynamic)6.3代码限制,加⼤计算量 提前计算好下⼀个位置

7.MeshCollider和其他Collider的⼀个主要不同点?MeshCollider是⽹格碰撞器,对于复杂⽹状模型上的碰撞检测,⽐其他的碰撞检测精确的多,但是相对其他的碰撞检测计算也增多了,所以⼀般使⽤⽹格碰撞也不会在⾯数⽐较⾼的模型上添加,⽽会做出两个模型,⼀个超简模能表⽰物体的形状⽤于做碰撞检测,⼀个⽤于显⽰。8.NavMeshObstacle组件的作⽤?

寻路⽹格动态碰撞组件,⽤于运动的物体阻碍寻路物体效果。9.你觉得怎么防⽌UI控件被点穿(如何过滤掉点击事件)。

使⽤⼀个可渲染的物体或者panel,绑定boxcollider组件即可。如果你单⽤⼀个不可渲染的物体(这⾥点⼀下UIwiget),即使设定了⼤⼩和boxcollider,也是⽆法屏蔽的。(坑在这⾥)。10.Unity打射线的⽅式

//从主这相机到⿏标点发射⼀条射线

Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

//接受射线返回的碰撞信息

RaycastHit hitInfo;

//如果射线碰撞到东西

//EventSystem.current.IsPointerOverGameObject() 如果当前⿏标在 ui 上返回true 否则返回false

11.射线检测碰撞物体的原理是什么?

射线是3D世界中⼀个点向另⼀个⽅向发射的⼀条⽆终点的线,在发射轨迹中与其他物体发⽣碰撞时,它将停⽌发射。12.通过什么可以区分射线碰到的游戏对象?通过LayerMask(层的遮罩),RaycastHit返回的碰撞的标签。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 Light29.使⽤Unity3d实现2d游戏,有⼏种⽅式?

使⽤本⾝的GUI,在Unity4.6以后出现的UGUI2.把摄像机的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是.net的⼀个开源跨平台⼯具,就类似java虚拟机,java本⾝不是跨平台语⾔,但运⾏在虚拟机上就能够实现了跨平台。.net只能在windows下运⾏,mono可以实现跨平台跑,可以运⾏于linux,Unix,Mac OS等。