您的位置:首页 > 移动开发 > Unity3D

和小伙伴们一起学Unity3D(五)让角色更鲜活——刚体

2013-08-26 18:00 357 查看
         在现实生活中,我们无时无刻都在受着力的作用,小伙伴们推一下,我们会往前走一小段;想不开跳楼的时候我们会被重力摔的妈都不认识;脸被拳头打中的时候,身体会旋转180°然后倒地……因为我们生活在物理世界,会受力的作用做出相应的反映,那么在游戏世界里,为了实现这些现实的物理效果呢,Unity引入了刚体。

         刚体是物体能够在物理控制下运动,通过接受力和扭曲,使物体能像现实世界一样运动,任何物体,想要受重力影响,受脚本施加的外力作用,或者与其他物体进行碰撞交互,都必须为它添加刚体组件。

        下面博主以篮球在地面来回弹跳为例带大家认识刚体。

         第一步:新建工程,创建一个Cube,拍扁拉长做个地面,再创建一个Sphere,摆一个帅气pose


          第二步:选中小球,菜单栏Component——>Physics——>Rigidbody,这样就为小球添加了刚体组件



Mass:物体的质量,以卵击石基本就描述了这个参数的作用,在碰撞的时候,小质量的物体想撞飞大质量的物体,简直做梦

Drag:物体收到的阻力。对于接受过9年义务教育的人,不多说,你懂的。

Angular Drag:物体旋转的时候受到的阻力

Use Gravity:是否受到重力

Is Kinematic:是否使用动力学,打上勾以后,物体将不再受力、碰撞的影响,任何力作用在物体上,简直就是纹丝不动,包括重力。

Iterpolate:插值,当你发现刚体运动抖动时,可以尝试下面的选项

Collistion Detection:碰撞检测模式,用于避免高速运动的物体穿过其他物体时,却未发生碰撞,比如射击游戏的子弹常常需要它

Constraints:约束。

其中Freeze Position:冻结选中的轴(X,Y,Z轴),冻结了以后,在相应轴的移动将无效

其中Freeze Rotation:冻结选中的轴(X,Y,Z轴),冻结了以后,在相应轴的旋转将无效

        第三步:新建C#脚本,将脚本添加到Sphere上

using UnityEngine;
using System.Collections;

public class RigidTest : MonoBehaviour {

// Use this for initialization
void Start () {

}

// Update is called once per frame
void Update () {

}

void OnCollisionEnter(Collision collisionInfo)
{
//print(collisionInfo.gameObject.name);
        //为刚体添加力,方向向上,大小为200
        rigidbody.AddForce(Vector3.up * 200);
}
}


运行游戏,小球会像篮球一样上下弹

这里还需要说明的是,OnCollistionEnter函数是物体在发生碰撞的一瞬间调用,相应的还有OnCollistionStay是物体在碰撞后与物体接触时调用,OnCollistionExit是物体理考碰撞物时调用,大家可以分别测试一下,体会一下。参数Collistion是被碰撞的物体信息,球落下时,地板被碰撞,那么从collistionInfo便存贮着底板的相关信息,打印collistionInfo.gameObject.name为"Cube"

刚体还有许多常用的方法,这里博主就不一一举例了,希望大家查文档自己尝试一下。关于刚体的应用,我们会在后边的一个小游戏中巩固学习。

最后,献上本节短小的源码:http://download.csdn.net/detail/yy8245075/6014711
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: