Unity常用類—Rigidbody類

Rigidbody類峰伙,這個常用類是用于Unity模擬物理碰撞的浸卦,經(jīng)常使用,比較重要所有如失,下面詳細的描述Rigidbody的組件绊诲,以及該類的屬性和方法!


一.Rigidbody Compents:

Mass: 用于設(shè)置游戲?qū)ο笾械馁|(zhì)量褪贵,單位為千克掂之,默認為1kg

Drag:? 游戲?qū)ο笫芰\動時所受到的空氣的阻力,當為0時,表示沒有空氣助力板惑。

? ? ? ? ? ?設(shè)置的值越大橄镜,空氣阻力越大偎快,當值大到一個臨界值冯乘,物體將停止運動

Angular Drag: 游戲?qū)ο笫芘ぞ亓πD(zhuǎn)時受到的控制阻力猫缭。當為0時濒蒋,代表沒有空氣阻力

? ? ? ? ? ? ? ? ? ? ? ?阻力極大時游戲?qū)ο髸⒓赐V剐D(zhuǎn)。

Use Gravity:? 是否使用重力凡桥,勾選后該物體將會受到重力影響

Is Kinematic: 如果勾選丐怯,則該游戲?qū)ο蟛粫芪锢硪娴挠螒蚺绾茫荒芡ㄟ^Transform組件進行操作

? ? ? ? ? ? ? ? ? ? ?這對于移動平臺或者如果要為附加了HingeJoint(鉸鏈關(guān)節(jié))的Rigidbody設(shè)置動畫非常有用

Interpolate: 該選項是一個枚舉類型,作用是插值,

? ? ? ? ? ? ? ? ? ?None: 不使用插值? ? ? ? ?

? ? ? ? ? ? ? ? ? ?Interpolate:根據(jù)上一幀的Transform進行平滑插值

? ? ? ? ? ? ? ? ? ?Extrapolate:根據(jù)估算的下一幀的Transform進行平滑插值

Collision Detection:? 該屬性用于防止快速移動的對象在沒有檢測到碰撞下穿過其他對象而未發(fā)生碰撞读跷。

? ? ? ? ? ? ? ? ?Discrete:離散碰撞檢測梗搅,默認值,會對場景中所有的碰撞器使用離散碰撞檢測

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 但是在離散式的碰撞檢測中效览,當物體高速連續(xù)的運動時无切,該選項便

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 檢測到物體碰撞,因為速度太快丐枉,采用的是離散碰撞檢測哆键,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 一般用于檢測低速移動或者靜態(tài)物體的碰撞,較銷毀性能


? ? ? ? ? ? ? ?Continuous:?連續(xù)碰撞檢測瘦锹,該模式用于動態(tài)碰撞器(帶有Rigidbody)使用連續(xù)碰撞模式

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?來檢測與帶有Collidr的物體進行碰撞籍嘹,如果其他剛體設(shè)置為了ContinuousDynamic,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?會使用連續(xù)檢測和這個剛體進行碰撞檢測弯院,該選項用于需要采用連續(xù)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?碰撞檢測快速運動的物體辱士,該模式很銷毀性能,


? ? ? ? ? ? ? ? Continuous Dynamic: 連續(xù)動態(tài)碰撞檢測,該模式采用了連續(xù)且動態(tài)的碰撞模式听绳,如果與之碰撞的游戲物體

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?是Continuous或者Continuous Dynamic模式颂碘,與這個物體碰撞則會和這個剛體進行

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?連續(xù)碰撞檢測,當然也會和靜態(tài)的Collider使用連續(xù)檢測辫红,但是對于其他的Collider

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 例如模式為(Discrete的剛體)就會采用離散檢測凭涂。一般用于檢測快速動態(tài)的游戲物體


? ? ? ? ? ? ? ?Continuous Speculative: 使用推測式連續(xù)碰撞檢測,這是唯一的CDD模式贴妻,CDD模式能夠確鼻杏停快速的移動

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?的物體與物體進行碰撞,而不是穿過這樣物體名惩,Unity提供了兩種CCD方法澎胡。?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?具體的CDD模式本節(jié)不具體的闡述,留著下一節(jié)專門討論一下這個CDD模式


Constraints:? 剛體運動的約束,包括位置約束和旋轉(zhuǎn)約束攻谁,勾選表示在該坐標上不允許進行此類操作

? ? ? ? ? ? ? ? ? ? ? ?Freeze Position: 停止剛體在X軸稚伍、Y軸和Z軸上的運動

? ? ? ? ?? ? ? ? ? ? ? Freeze Rotation:停止剛體繞局部X軸、Y軸和Z軸選擇性旋轉(zhuǎn)戚宦。


二.Rigidbody Properities:


inertiaTensor:??此屬性用于設(shè)置剛體的慣性張量个曙,在距離重心同等的條件下,剛體會向張量值小的一邊切斜

? ? ? ? ? ? ? ? ? ? ? ? ?例如m_Rigidbody.inertiaTensor = new Vector3(15.0f,10.0f,1.0f);

? ? ? ? ? ? ? ? ? ? ? ? ?則剛體會向y軸傾斜,反之亦然受楼,當張量相同的時候垦搬,那就是隨機在各軸方向傾斜

public class RigidbodyInertiaTensor : MonoBehaviour

{

? ? private Rigidbody m_Rigidbody;

? ? void Start()

? ? {

? ? ? ? m_Rigidbody = gameObject.GetComponent<Rigidbody>();

? ? }

? ? private void OnGUI()

? ? {

? ? ? ? if (GUI.Button(new Rect(10, 10, 200, 45), "y軸的慣性張量小于x軸"))

? ? ? ? {

? ? ? ? ? ? transform.position = new Vector3(0,4,0);

? ? ? ? ? ? //讓自身繞z軸旋轉(zhuǎn)45度

? ? ? ? ? ? transform.rotation = Quaternion.Euler(0,0,45);

? ? ? ? ? ? //設(shè)置Rigidbody的慣性張量

? ? ? ? ? ? m_Rigidbody.inertiaTensor = new Vector3(15.0f,10.0f,1.0f);

? ? ? ? }

? ? ? ? if (GUI.Button(new Rect(10, 60, 200, 45), "x軸的慣性張量小于y軸"))

? ? ? ? {

? ? ? ? ? ? transform.position = new Vector3(0,4,0);

? ? ? ? ? ? //讓自身繞z軸旋轉(zhuǎn)45度

? ? ? ? ? ? transform.rotation = Quaternion.Euler(0,0,45);

? ? ? ? ? ? //設(shè)置Rigidbody的慣性張量

? ? ? ? ? ? m_Rigidbody.inertiaTensor = new Vector3(5.0f,10.0f,1.0f);

? ? ? ? }

? ? ? ? if (GUI.Button(new Rect(10, 110, 200, 45), "y軸的慣性張量與x軸相同"))

? ? ? ? {

? ? ? ? ? ? transform.position = new Vector3(0,4,0);

? ? ? ? ? ? //讓自身繞z軸旋轉(zhuǎn)45度

? ? ? ? ? ? transform.rotation = Quaternion.Euler(0,0,45);

? ? ? ? ? ? //設(shè)置Rigidbody的慣性張量

? ? ? ? ? ? m_Rigidbody.inertiaTensor = new Vector3(10.0f,10.0f,1.0f);

? ? ? ? }

? ? }

}


mass:該屬性用于設(shè)置或者返回剛體的質(zhì)量,一般情況下艳汽,剛體質(zhì)量在0.1左右模擬最佳猴贰,最大最好不要超過10

? ? ? ? ?否則容易出現(xiàn)不穩(wěn)定的情況,對于自由落體運動河狐,物體的速度只與重力加速度和空氣阻力Drug有關(guān)

? ? ? ? 與質(zhì)量無關(guān)米绕,mass的主要作用是在物體發(fā)生碰撞計算碰撞后物體的速度,當一個物體的分別去撞擊mass大和mass小的物體

? ? ? ??根據(jù)動量守恒定律馋艺,重的物體被撞擊后的速度要慢與較輕的物體栅干,代碼示例如下:

public class RigidbodyMass : MonoBehaviour

{

? ? ? public Rigidbody r1,r2,r3,r4,r5;

? ? ? Vector3 v3 = Vector3.zero;

? ? void Start()

? ? {

? ? ? ? r1.mass = 0.1f;

? ? ? ? r2.mass = 5.0f;

? ? ? ? r3.mass = 2.0f;

? ? ? ? r4.mass = 0.1f;

? ? ? ? r5.mass = 4.0f;

? ? ? ? r3.useGravity = false;

? ? ? ? r4.useGravity = false;

? ? ? ? r5.useGravity = false;

? ? ? ? v3 = r3.position;

? ? }

? ? private void FixedUpdate()

? ? {

? ? ? ? Debug.Log(Time.time +" "+ "R1的速度=" + r1.velocity);

? ? ? ? Debug.Log(Time.time +" "+ "R2的速度=" + r2.velocity);

? ? ? ? Debug.Log(Time.time +" "+ "R3的速度=" + r3.velocity);

? ? ? ? Debug.Log(Time.time +" "+"R4的速度=" + r4.velocity);

? ? ? ? Debug.Log(Time.time +" "+ "R5的速度=" + r5.velocity);

? ? }

? ? private void OnGUI() {

? ? ? ? if(GUI.Button(new Rect(10,10,200,45),"用R3撞R4"))

? ? ? ? {

? ? ? ? ? ? r3.position = v3;

? ? ? ? ? ? r3.rotation = Quaternion.identity;

? ? ? ? ? ? r3.velocity = new Vector3(0,0,4);

? ? ? ? }

? ? ? ? ? if(GUI.Button(new Rect(10,60,200,45),"用R3撞R5"))

? ? ? ? {

? ? ? ? ? ? r3.position = v3;

? ? ? ? ? ? r3.rotation = Quaternion.identity;

? ? ? ? ? ? r3.velocity = new Vector3(0,0,4);

? ? ? ? }

? ? }

}


velocity: 該屬性用于返回或者設(shè)置剛體的速度 ,單位是米/每秒

? ? ? ? ? ? ? ? ?在腳本中無論是給剛體賦予一個Vector3類型的向量丈钙,還是獲取當前剛體的速度非驮,都是相當世界坐標系

public class RigidbodyVelocity : MonoBehaviour

{

? public Rigidbody A,B;

? ? void Start()

? ? {

? ? ? ? A.velocity = new Vector3(0,0,-15.0f);

? ? ? ? B.velocity = new Vector3(0,0,10.0f);

? ? }

? ? private void OnGUI()

? ? {

? ? ? ? GUI.Label(new Rect(10, 10, 300, 45), "A物體當前的速度為:" + A.velocity);

? ? ? ? GUI.Label(new Rect(10, 60, 300, 45), "B物體當前的速度為:" + B.velocity);

? ? ? ? Debug.Log("A物體當前的速度為:" + A.velocity);

? ? ? ? Debug.Log("B物體當前的速度為:" + B.velocity);

? ? }

}


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市雏赦,隨后出現(xiàn)的幾起案子劫笙,更是在濱河造成了極大的恐慌,老刑警劉巖星岗,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件填大,死亡現(xiàn)場離奇詭異,居然都是意外死亡俏橘,警方通過查閱死者的電腦和手機允华,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來寥掐,“玉大人靴寂,你說我怎么就攤上這事≌僭牛” “怎么了百炬?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長污它。 經(jīng)常有香客問我剖踊,道長庶弃,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任德澈,我火速辦了婚禮歇攻,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘梆造。我一直安慰自己缴守,他們只是感情好,可當我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布澳窑。 她就那樣靜靜地躺著斧散,像睡著了一般。 火紅的嫁衣襯著肌膚如雪摊聋。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天栈暇,我揣著相機與錄音麻裁,去河邊找鬼。 笑死源祈,一個胖子當著我的面吹牛煎源,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播香缺,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼手销,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了图张?” 一聲冷哼從身側(cè)響起锋拖,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎祸轮,沒想到半個月后兽埃,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡适袜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年柄错,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片苦酱。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡售貌,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出疫萤,到底是詐尸還是另有隱情颂跨,我是刑警寧澤,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布给僵,位于F島的核電站毫捣,受9級特大地震影響详拙,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蔓同,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一饶辙、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧斑粱,春花似錦弃揽、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至尚揣,卻和暖如春涌矢,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背快骗。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工娜庇, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人方篮。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓名秀,卻偏偏與公主長得像,于是被迫代替她去往敵國和親藕溅。 傳聞我的和親對象是個殘疾皇子匕得,可洞房花燭夜當晚...
    茶點故事閱讀 44,781評論 2 354

推薦閱讀更多精彩內(nèi)容