首页 > 其他 > 详细

【Unity 3D】学习笔记三十六:物理引擎——刚体

时间:2014-07-12 17:54:35      阅读:1004      评论:0      收藏:0      [点我收藏+]

物理引擎就是游戏中模拟真是的物理效果。如两个物体发生碰撞,物体自由落体等。在unity中使用的是NVIDIA的physX,它渲染的游戏画面非常逼真。


刚体

刚体是一个非常非常中要的组件。默认情况下,新创的物体是不具备物理效果的,而刚体组件可以给物体添加一些常见的物理属性。比如说:质量,摩擦力,碰撞等。如果对象添加了刚体组件,那么它将感应物理引擎中的一切物理效果。


简单的使用下

首先穿件一个游戏对象,接着在hierarchy视图中选择创建的游戏对象,然后在unity导航菜单栏中选择component——physics——rigidbody即可。下面将创建3个立方体,将其放置在凌空地面上。并给其中的一个立方体添加刚体,运行后发现红色的立方体感应了物理效果,掉下来了。而其他的两个依旧停留在原地。

bubuko.com,布布扣


bubuko.com,布布扣

刚体的属性:

mass:质量,数值越大物体下落越快,尽量不超过10,不然会显得不真实。

drag:阻力,数值越大物体速度减慢就越快。

angular drag:角阻力,数值越大自转速度减慢就越快。

use gravity:是否使用重力。

is kinematic:是否受物理影响。

interpolate:设置图像差值。

collision detection:碰撞监测。

constrains:冻结,停止某个轴向感应物理引擎的效果

freeze position:冻结X轴,Y轴,Z轴,方向。

freeze rotation:冻结X轴,Y轴,Z轴,旋转。


物理管理器

在物理管理器中,可以设置整个项目所有的物理效果。比如说重力,反弹力,速度等。在菜单导航栏中,选择edit——project setting——physics即可打开physics manager。如下图:

bubuko.com,布布扣

gravity:重力,默认下物体受Y轴向下的重力为9.8 N,可修改三个轴的受力方向。

default material:默认物理材质。

bounce threshold:反弹值。

sleep velocity:睡眠速度,当速度低于睡眠速度时,它保持静止状态。

sleep angular velocity:睡眠角速度,当角速度低于睡眠速度时,自身不旋转。

max angular velocity:最大角速度。

min penetration for penalty:用于物体与物体之间碰撞后最小穿透力。

solver iteration count:迭代数量,默认值为7.

raycasts hit triggers:是否启动命中触发器。

layer collision matrix:图层碰撞矩阵。


刚体组件可以受力的作用,比如给刚体一个向X轴的力,那么刚体将沿着X轴向前运动。unity中力的方式有两种:普通的力,需要设定力的方向和大小。目标位置力,需要设置目标点的位置,该物体将朝向这个目标位置施加力。

接下来做一个例子来说明。共放置两个球对象,点击普通力后,小球像被踢了一脚。点击位置力,小球将被施加一个朝向目标的力。

代码:

using UnityEngine;
using System.Collections;

public class Script_06_02 : MonoBehaviour
{
	
	//施加普通力的对象
	GameObject addFrceObj = null;
	//施加目标位置力的对象
	GameObject addPosObj = null;
	//目标对象
	GameObject cubeObj = null;
	
	// Use this for initialization
	void Start () 
	{
		//获取施加普通力的对象
		addFrceObj = GameObject.Find("Sphere0");
		//获取施加目标位置力的对象
		addPosObj = GameObject.Find("Sphere1");
		//获取目标对象
		cubeObj= GameObject.Find("Cube");
	}
	
	void OnGUI() {
		
		if(GUILayout.Button("普通力?",GUILayout.Height(50)))
		{
			//施加一个力,X轴方向力度为1000,Y轴方向力度为1000
			addFrceObj.rigidbody.AddForce (1000, 0, 1000);
		}
		
		if(GUILayout.Button("位置力",GUILayout.Height(50)))
		{
			//施加一个位置力,物体将会朝向这个位置发力移动,力的模式为冲击力。
			Vector3 force = cubeObj.transform.position - addPosObj.transform.position;
			addPosObj.rigidbody.AddForceAtPosition(force,addPosObj.transform.position,ForceMode.Impulse);
		}
	}
}

运行:

bubuko.com,布布扣

bubuko.com,布布扣

【Unity 3D】学习笔记三十六:物理引擎——刚体,布布扣,bubuko.com

【Unity 3D】学习笔记三十六:物理引擎——刚体

原文:http://blog.csdn.net/u013289188/article/details/37690633

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!