我和我的小伙伴们一起学Unity3D(五)让角色更鲜活——刚体
2013-08-27 11:01
309 查看
在现实生活中,我们无时无刻都在受着力的作用,小伙伴们推一下,我们会往前走一小段;想不开跳楼的时候我们会被重力摔的妈都不认识;脸被拳头打中的时候,身体会旋转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上
[csharp]
view plaincopyprint?
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
刚体是物体能够在物理控制下运动,通过接受力和扭曲,使物体能像现实世界一样运动,任何物体,想要受重力影响,受脚本施加的外力作用,或者与其他物体进行碰撞交互,都必须为它添加刚体组件。
下面博主以篮球在地面来回弹跳为例带大家认识刚体。
第一步:新建工程,创建一个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上
[csharp]
view plaincopyprint?
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);
}
}
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
相关文章推荐
- 和小伙伴们一起学Unity3D(五)让角色更鲜活——刚体
- 我和我的小伙伴们一起学Unity3D(一)
- 我和我的小伙伴们一起学Unity3D(二)
- 我和我的小伙伴们一起学Unity3D(四)角色移动之Transform
- unity3d 给模型添加刚体后、或者角色控制器后下坠
- 和小伙伴们一起学Unity3D(四)角色移动之Transform
- unity3d实现鼠标左键点击地形使角色移动到指定地点
- (转) [教程] Unity3D中角色的动画脚本的编写(一)
- Unity3D Player角色移动控制脚本
- 【Unity3d】3d角色换装实现原理及步骤
- unity3d easytouch计算摇杆旋转角度以及摇杆八方向控制角色
- Unity3d 实现鼠标左键点击地形使角色移动到指定地点[脚本]
- 【Unity3D】3D角色换装++ Advance
- unity3d-小案例之角色简单漫游
- Unity3D入门:给刚体添加作用力让它运动起来
- Unity3D开发——LeRunning的人物角色信息的显示
- cocos2d(CCSprite绑定不规则刚体与精灵一起移动)
- Unity3D 关于刚体(RigitBody)与碰撞体(Collider)的探索
- Unity3d 刚体属性!!实用
- Unity3D入门 第零章:给物体增加刚体属性