改變Rigidbody組件中IsKinematic屬性的實(shí)驗(yàn)

來(lái)源:Unity官方平臺(tái)
作者:日本網(wǎng)友
時(shí)間:2020-01-13
5906
本文由日本一位Unity資深技術(shù)專家寫(xiě)作,旨在幫助Unity初學(xué)者快速學(xué)習(xí)Unity相關(guān)技術(shù)。

Rigidbody組件里,IsKinematic對(duì)于初學(xué)者來(lái)說(shuō)是一個(gè)特別難以理解的屬性。

本文圍繞IsKinematic設(shè)定選項(xiàng)展開(kāi)一系列實(shí)驗(yàn),并對(duì)其進(jìn)行解釋說(shuō)明。

文章內(nèi)容將分為以下幾個(gè)部分:

1、測(cè)試環(huán)境

2、關(guān)于Rigidbody

3、關(guān)于IsKinematic

4、 IsKinematic的優(yōu)點(diǎn)

5、實(shí)驗(yàn)

      (1) 當(dāng)球體滾動(dòng)時(shí)的IsKinematic設(shè)定

      (2)當(dāng)球體被拋出去時(shí)的IsKinematic設(shè)定

      (3)自由落體時(shí)的情況

      (4)動(dòng)態(tài)切換IsKinematic值

6、 總結(jié)

1、測(cè)試環(huán)境

macOS 10.13 High Sierra

Unity2018.1.0f2

2、關(guān)于Rigidbody

概括來(lái)說(shuō),Rigidbody是Unity開(kāi)發(fā)引擎中控制物理系統(tǒng)的必要組件。

1.jpg

Rigidbody參數(shù) 

3、關(guān)于IsKinematic

2.jpg

當(dāng)我第一次看到這些設(shè)定選項(xiàng)時(shí),老實(shí)說(shuō)我并不明白其中涵義。 

true和false,到底哪一個(gè)設(shè)定會(huì)受到物理系統(tǒng)的影響呢?

后來(lái)我發(fā)現(xiàn):如果為true,則不會(huì)受到物理系統(tǒng)的影響。如果為false,發(fā)生Rigidbody運(yùn)動(dòng)時(shí)則會(huì)受到物理系統(tǒng)的影響。

4、IsKinematic的優(yōu)點(diǎn)

在Unity操作手冊(cè)中,「Rigidbody概述」這一部分寫(xiě)的是「使用Rigidbody時(shí)不要更改Transform值」。

既然如此,那么,還有設(shè)定IsKinematic的必要嗎?后來(lái),在Unity操作手冊(cè)英文版里,我看到一段這樣的描寫(xiě)「如果想以一種非物理的方式進(jìn)行表現(xiàn),在這種情況下,請(qǐng)勾選IsKinematic」。

對(duì)此,我的疑問(wèn)不減反增:如果不是物理系統(tǒng)的行為,為什么還需要設(shè)定Rigidbody呢?

作為初學(xué)者的我即使這樣想,但我明白它們也有一定的好處,不但能夠在Collider中檢測(cè)碰撞,還能動(dòng)態(tài)改變IsKinematic值。

在Unity操作手冊(cè)英文版里,有個(gè)滑動(dòng)門(mén)的案例,能夠很好的說(shuō)明這個(gè)問(wèn)題。

3.jpg

通常,當(dāng)門(mén)關(guān)上的時(shí)候,已經(jīng)開(kāi)啟碰撞體的角色會(huì)被擋在門(mén)外。

當(dāng)角色開(kāi)門(mén)的時(shí)候,通過(guò)設(shè)定腳本將門(mén)滑動(dòng)到指定位置,角色即可順利通過(guò)。相反,如果對(duì)物理系統(tǒng)行為設(shè)置不當(dāng)?shù)脑?,有時(shí)候門(mén)會(huì)被吹飛,再恢復(fù)到原來(lái)的位置則相對(duì)不那么容易。

另外,開(kāi)門(mén)和關(guān)門(mén)的時(shí)候,只需切換IsKinematic狀態(tài)。例如開(kāi)門(mén)時(shí),IsKinematic會(huì)控制位置,但如果用武器攻打門(mén)的話,因?yàn)镽igidbody設(shè)定的緣故,門(mén)可能會(huì)被打飛。

鑒于這些問(wèn)題,與其用Rigidbody處理門(mén)的問(wèn)題,不如直接控制人物。

下面我將進(jìn)行一些實(shí)驗(yàn)來(lái)展示修改IsKinematic屬性值所產(chǎn)生的不同。

5、實(shí)驗(yàn)

(1)當(dāng)球體滾動(dòng)時(shí)的IsKinematic

現(xiàn)在,改變數(shù)值,我們觀察一下運(yùn)動(dòng)發(fā)生的狀態(tài)。

開(kāi)始擲球。

準(zhǔn)備的球有兩種不同的isKinematic值,如下: 

isKinematic : true

isKinematic : false

同時(shí)對(duì)兩個(gè)球施加力的時(shí)候,觀察一下運(yùn)動(dòng)狀態(tài)。

當(dāng)ForceMode為Impulse時(shí),下圖的左上角數(shù)值表示施加力的大小。

4.gif

兩種不同IsKinematic值的球的滾動(dòng)情況

因?yàn)樗皇芪锢硐到y(tǒng)的影響,如果IsKinematic為ture時(shí),根本不起作用。

(2)當(dāng)球體被拋出去時(shí)的IsKinematic

證實(shí)一下球體被拋出去的狀態(tài)。

5.gif

兩種不同IsKinematic值的球的被拋出去情況

和滾動(dòng)的一樣,當(dāng)IsKinematic為ture時(shí),就算用AddForce,白球也不會(huì)動(dòng)。

(3)自由落體的情況

雖然結(jié)果已經(jīng)顯而易見(jiàn)了,但仍確認(rèn)一下自由落體時(shí)的情況。

6.gif

兩種不同IsKinematic值的球的自由落體情況

當(dāng)IsKinematic為ture時(shí),不受重力的影響。

以左邊物體的Rigidbody為例,當(dāng)UseGravity為true時(shí),IsKinematic具有優(yōu)先性。 

所以,動(dòng)態(tài)切換IsKinematic的時(shí)候,別忘了取消勾選UseGravity。

(4)動(dòng)態(tài)改變IsKinematic值

以動(dòng)態(tài)切換IsKinematic為例,實(shí)現(xiàn)以下功能:擊中球1秒后,通過(guò)腳本來(lái)改變運(yùn)動(dòng)。

有了Rigidbody,當(dāng)IsKinematic為false時(shí)發(fā)生碰撞。由于Mass的差異,球飛出去的方式也有所不同。

7.gif

球的反擊

粉紅色的球從屏幕右側(cè)滾出,一秒鐘后,白球和黃球?qū)sKinematic自動(dòng)設(shè)置為true,并開(kāi)始往復(fù)運(yùn)動(dòng)。該狀態(tài)可直接在腳本的Transform中進(jìn)行設(shè)置。

從上圖可以看到,畫(huà)面前方的粉紅色球被質(zhì)量較大的黃球碰撞,向相反方向滾動(dòng),并越過(guò)往復(fù)運(yùn)動(dòng)范圍。后側(cè)粉紅色的球被擊中多次,但其被白球碰撞后并沒(méi)有滾動(dòng)到圖片最右邊。

下一步借助Cube來(lái)進(jìn)行碰撞。

8.gif

 Cube的反擊

可以發(fā)現(xiàn),有了IsKinematic之后,為粉紅色的球提供了一個(gè)力。

由此延伸至游戲開(kāi)發(fā)實(shí)操中,Cube可以作為地牢里的移動(dòng)壁壘裝置,用于將設(shè)定的角色打落到地下室底部。 

同時(shí)需要注意的是,在體積上,移動(dòng)壁壘最好比角色大一些。如「球的反擊」一圖所示,如果碰撞的球大小相同,Rigidbody則會(huì)出現(xiàn)如圖所示的奇怪現(xiàn)象。

多數(shù)情況下,通過(guò)腳本來(lái)控制對(duì)象的移動(dòng),或許也是不錯(cuò)的選擇。 

6、總結(jié)

Rigidbody的IsKinematic使用方法,對(duì)初學(xué)者來(lái)說(shuō)的確有些難以理解。

一開(kāi)始可能很難使用,但借助腳本來(lái)控制對(duì)象的移動(dòng),總體上來(lái)說(shuō)還是很簡(jiǎn)便的。

希望本文的介紹對(duì)你有所幫助。

原文鏈接:點(diǎn)擊前往 >
文章來(lái)源:Unity官方平臺(tái)
版權(quán)說(shuō)明:本文內(nèi)容來(lái)自于Unity官方平臺(tái),本站不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。文章內(nèi)容系作者個(gè)人觀點(diǎn),不代表快出海對(duì)觀點(diǎn)贊同或支持。如有侵權(quán),請(qǐng)聯(lián)系管理員(zzx@kchuhai.com)刪除!
掃碼關(guān)注
獲取更多出海資訊的相關(guān)信息
個(gè)人VIP