【Unity 3D】學習筆記三十六:物理引擎——剛體

物理引擎就是遊戲中模擬真是的物理效果。如兩個物體發生碰撞,物體自由落體等。在unity中使用的是NVIDIA的physX,它渲染的遊戲畫面很逼真。post


剛體this

剛體是一個很很中要的組件。spa

默認狀況下,新創的物體是不具有物理效果的,而剛體組件可以給物體加入一些常見的物理屬性。比方說:質量。摩擦力。碰撞等。code

假設對象加入了剛體組件。那麼它將感應物理引擎中的一切物理效果。component


簡單的使用下orm

首先穿件一個遊戲對象,接着在hierarchy視圖中選擇建立的遊戲對象。而後在unity導航菜單條中選擇component——physics——rigidbody就能夠。如下將建立3個立方體。將其放置在凌空地面上。對象

並給當中的一個立方體加入剛體。執行後發現紅色的立方體感應了物理效果,掉下來了。而其它的兩個依然停留在原地。blog




剛體的屬性:遊戲

mass:質量。數值越大物體下落越快,儘可能不超過10,否則會顯得不真實。ip

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。

例如如下圖:


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); } } }


執行:


相關文章
相關標籤/搜索