http://www.maiziedu.com/course/540/ 组件教程 prefabs教程http://www.maiziedu.com/course/642-9396/
我们前面讲了很多的基础知识,最近一直很忙,很久没出基础系列的教程了。在今后的一段时间了我尽量挤出时间来将基础系列的讲解完。希望这套教程对那些初学者能起到一定的用处。同时自己也起到了温故而知新的作用。 好了,废话不多说了,下面开始介绍unity中的组件。unity3d的每一个物体的属性都是一个一个的组件组成的,除了一些基本的组件之外,大部分组件都是可以添加和删除的。我们添加了组件之后,他将会出现在inspector面板
我们可以在inspector面板中清楚的看到这个游戏物体所包含的所有组件Transfoem组件。控制物体的位置,方向和大小。sherecollider组件AI是一个脚本文件,在unity系统中也将他作为一个组件。 还有AudioSourde组件。声音组件,可以给物体添加声音。 我们看下组件是怎样添加和删除的,新建一个游戏物体,选中该物体,点击工具栏中的Component->physics->Rigidbody.
然后查看inspector面板,发现面板上多出一栏Rigidbody组件,这样我们这个物体就添加后了一个重力组件。如果我们添加好了这个组件,然后像删除掉这个组件不用了。这个操作起来非常简单,点击组件右上角的按钮,在下拉菜单中选择RemoveComponent即可删除该组件,如图:
下面我们看下unity中那些组件 点击菜单栏中的Component菜单项,得到如图的下拉菜单
Unity3D中的组件都包含在这个菜单里面我们来大致看下都有那些功能。Mesh:网格组件,3D网格是Unity中最重要的图形元素。Effects:效果组件,各种视觉效果组件。Physics:物理组件,是unity中非常重要的一组组件,里面包裹我们经常会用到的刚体和碰撞器。Navigation:导航组件,Audio:声音组件。Rendering:渲染组件,这个组包括在游戏中渲染和界面元素的所有组件。光照和特定效果也包含在这个组。Scripts:脚本组件,还有就是我们为了项目制作需要,安装的一些插件也会出现在改文件夹;在以后的章节中我们将对每一个组件进行详细的介绍。
上次对unity的组件进行了一个概括的介绍,今天就介绍一下unity3d中的一组重要的组件,物理引擎组件。物理引擎就是在游戏中模拟真实的物理效果。什么是物理效果呢,比如在游戏中我们击打一个物体,这个物体就会受到力的作用,当物体受到击打力之后产生的效果,就叫做物理效果。物理引擎就是实现这种效果的一个组件。如果没有这个组件,我们就必须用大量的代码来描述这种效果,现在加上这个组件之后,我们只需要设置一下参数,就可以将这些复杂的效果模拟出来,极大的减少了工作量。物理引擎中主要分为两大块,刚体和碰创器。我们今天先来看下刚体组件,刚体组件可以给物体添加一些常见的物理属性,比如物体的质量,摩擦力,碰创参数等等,这些属性可用来真实的模拟物体在3D游戏世界中的一切行为。新创建的物体时不具备刚体组件的,下面我们加来看第一步,怎么给一个物体添加刚体组件首先创建一个场景,其中包括一个地面,三个GUBE。三个GUBE分别设置不同的颜色。以便区分,如图:
选中红色的cube然后在菜单栏中选择Component->
hysics->Rigidbody如图:
这样一个刚体组件就添加完成了,运行游戏看看有什么变化。我们发现运行游戏后红色的物体开始自由下落,其他两个没有变化。这是因为我们给红色物体添加了Rigidbody组件后,它收到了重力的影响。
选中红色的物体,在Inspector视图中可以看到Rigidbody组件包含的属性,下面介绍一下这些属性的含义,
Mass:质量,数值越大物体下降的速度就越快,默认值是1,设置数值是尽量不要超过10,否则物理效果就不真实了。Drage:阻力,数值越大物体速度减慢的就越快。Angular Drag:角阻力,数值越大自身旋转的速度减慢的就越快,UseGravity:是否使用重力。IsKinematic:是否受物理影响。Interpolate:设置图像差值。CollisionDetection:碰创检测。Constraints:冻结,停止某个轴向感应物理引擎的效果。 Freeze Position:冻结X,Y,Z轴的位移。Freeze Rotation:冻结X,Y,Z轴的旋转。这是对单个物体的物理效果的设置,unity3d中也可以对整个项目中的所有物理效果进行设置,设置方法,选择菜单栏中Edit->
roject Settings->
hysics
此时即可在Inspector面板中打开“Physics Manager”(物理管理器)界面。
Gravity:重力,默认情况下物体受Y轴向下的重力为9.8N。Default Material:默认物理材质。BounceThreshold:反弹值,Sleep Velocity:睡眠速度。当速度低于睡眠速度是,它保持静止。Sleep Angular Velocity:睡眠角速度。当角速度低于睡眠角速度时,自身不在旋转。Max Angular Velocity:最大角速度。Min Penetration For Penalty:用于物体与物体之间碰撞后最小穿透力。Solver Iterstion Count:迭代数量,默认值是7.Raycasts Hit Trigger:是否启动命中触发。Layer Collision Matrix:图层碰撞矩阵。当这些都按照我们的项目要求设置好之后,我们就可以给我们添加了Rigidbody的物体一个力,让它在力的作用下运动了。刚体组件可以受力的作用,比如给刚体施加一个x轴方向的力,那么该刚体绑定的物体将沿着x轴方向上向前移动,这就好比用力将物体仍出去一样,该物体将依抛物线的形式移动。Unity中的力有两种:一种普通力,需要设定方向和大小; 第二种为目标位置力,需要设定目标点的位置。下面就通过一个实例看下着两个力的区别。新建一个C#脚本,命名为AddForec并输入一下代码using UnityEngine;using System.Collections; public class AddForce : MonoBehaviour { //添加力的物体 public GameObject addFroceobj; //目标位置 public GameObject cubeobj; void OnGUI() { if(GUILayout.Button("普通力",GUILayout.Height(50))) {//普通力 addFroceobj.rigidbody.AddForce(1000,0,0); } if(GUILayout.Button("位置力",GUILayout.Height(50))) { 位置力 Vector3 force=cubeobj.transform.position-addFroceobj.transform.position; addFroceobj.rigidbody.AddForceAtPosition(force,addFroceobj.transform.position,ForceMode.Impulse); } }}设置完成后,运行游戏,当点击普通力按钮是,物体将会受到x轴方向上一个大小为1000的力的作用当点击位置力是,物体将会向我们的目标物体移动,力的方式为冲击力。好了,关于刚体就介绍这么多,下一次将介绍碰撞器的用法。
今天看下unity3d物理引擎的另外一个重要组成部分,碰撞器,在unity3d中,如果一个物体想感受碰撞,就必须添加碰撞组件。 我们先通过一个小例子看下什么叫碰撞,物体添加碰撞和没有添加碰撞有什么区别。首先创建一个场景,包括两个cube一个设置为红色一个设置为黄色,创建一个地面。然后给两个物体添加Rigidbody,讲黄色的物体的BoxCollider组件去掉。然后运行游戏,我们会发现红色的小球与地面发生了碰撞,黄色小球没有感应到碰撞,直接穿过地面。
下面我们看下怎么给一个物体添加碰撞器,选中需要添加碰撞器的物体,然后选择菜单栏的Component->
kysics如图:
图中用红线框住的部分就是unity给我们提供的所有的碰撞类型。Box Collider:盒子碰撞器,适用于立方体之间的碰撞,Sphere Collider:球体碰撞器适用于球体之间的碰撞Ca
sule Collider:胶囊碰撞器适用于胶囊体之间的碰撞Mesh Collider:网格碰撞器他的碰撞方式由自定义模型的自身网格觉得,适用于自定义网格碰撞Wheel Collider:车轮碰撞器适用于车轮与地面之间或其他物体之间的碰撞Terrain collider:这个应该是地形碰撞器,新加上的,没用过。下面们点击Box Collider选项,这样我们就给物体添加了一个盒子碰撞器。在Inspector中可以看到Box Collider组件的属性如图:
Is Trigger:触发器 如激活,此碰撞器用于触发事件,并且被物理引擎忽略。Material:物理材质 引用何种物理材质决定了他和其他对象如何作用。Center 中心 碰撞器在对象本地坐标中的位置。Size 尺寸 在X、Y、Z三维上的碰撞器尺寸。中心和尺寸就不用多讲了。下面我们重点来看下Is Trigger和Material。首先看看Is Trigge,如果我们勾选了Is Trigge后面的选项,物体将不受物理引擎控制,当和一个触发器发生碰撞时会发出三个独特的触发信息。触发器用于触发你游戏中的其他事件,比如过场动画、自动门开启、显示教程信息等等。当然为了使两个触发器碰撞时发出碰撞事件,其中一个必须包含刚体。 。一个触发器和一个普通碰撞器碰撞,其中之一必须附加刚体。Material是物理材质,是用来设置物体表面材质的,不同的表面材质可影响碰撞后的物理效果。下面我们看下怎么在碰撞其中添加物理材质。Unity标准资源包中提供了一些物理材质的资源,首先要将他们添加进来。方法如下,在Project视图中单击鼠标右键,在弹出的快捷菜单中选中Import Package->
husic Materials,导入资源包
标准资源包中提供了五种物理材质:
Bouncy:弹性材质。Ice:冰材质。Metal:金属材质。Rubber:橡胶材质。Wood:木头材质。下面看添加方法,首先在Scene视图中选择需要添加物理材质的物体然后在Project视图中通过拖动将Bouncy赋值给Inspector视图中的SphereCollider即可。
除了这五个制作好的物理材质外,还可以自己制作物理材质,制作方法如下。在prject视图中点击Create->
hysic Material菜单即可。
选择我们新建的物理材质,在Inspector视图中,看到新建物理材质的所有属性。下面简要介绍一下这些属性的含义
Dynamic Friction:动态摩擦,取值0,1之间,0是最小动态摩擦,1为最大动态摩擦。Static Friiction:静态摩擦,取值同上Bounciness:碰撞反弹系数,取值0表示无反弹,1表示最大反弹。Fiction Combine:普通碰撞后的摩擦模式Bounce Combine:反弹碰撞后的摩擦模式Friction Direction:摩擦方向,方向分为x,y,z轴。Dynamic Friction2:动摩擦系数Ststic Friction2:静摩擦系数。按照需求调节完成。这样一个新的物理材质就制作完成了。也可改变不同参数,看看每个参数对物体的影响。