- 最后登录
- 2015-1-26
- 注册时间
- 2012-4-17
- 阅读权限
- 20
- 积分
- 358
- 纳金币
- 300
- 精华
- 0
|
上次对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的力的作用当点击位置力是,物体将会向我们的目标物体移动,力的方式为冲击力。好了,关于刚体就介绍这么多,下一次将介绍碰撞器的用法。 |
|