共同點(diǎn):都可以用作在游戲中的角色移動(dòng)篮迎。
CharacterController
有重力效果男图,不能受其他物理力。本身自帶了一個(gè)膠囊碰撞體甜橱,可以用來(lái)產(chǎn)生碰撞逊笆。只有調(diào)用Move或SimpleMove,對(duì)象才能移動(dòng)岂傲。所以它被稱為角色控制器难裆,一般的角色操作類游戲用這個(gè)比較合適。
1镊掖、CharacterController相比于Rigidbody乃戈,可以直接設(shè)置爬梯子的高度,對(duì)于不是完全水平的地圖亩进,這一特性非常好用症虑。
Rigidbody
是用來(lái)模擬真實(shí)物理效果的,它可以設(shè)置重力归薛,可以為對(duì)象施加外力谍憔。注意它和各種Collider的關(guān)系:只有Rigidbody才能被施加外力匪蝙,這個(gè)力可能是被直接施加的,也可能是被其它Rigidbody碰撞產(chǎn)生的間接力习贫;而Collider是用來(lái)設(shè)置碰撞的一些參數(shù)逛球。簡(jiǎn)單說(shuō):沒(méi)有Rigidbody就不會(huì)動(dòng),沒(méi)有Collider就不能碰撞或被碰撞苫昌。這個(gè)用于賽車類需要真實(shí)物理效果的游戲比較合適需忿。
1、Rigidbody有更好的物理特性蜡歹,比如想要有擊飛屋厘,擊退,浮空效果時(shí)月而,Rigidbody更容易實(shí)現(xiàn)汗洒,且更加方便。而用CharacterController去實(shí)現(xiàn)則相對(duì)困難一些父款。
2溢谤、Rigidbody有SweetTest,對(duì)于想檢測(cè)地圖邊界憨攒,是否有障礙物等比較方便世杀。
NavMeshAgent
屬于尋路系統(tǒng),它也帶有一個(gè)圓柱體形的碰撞體肝集。如果你的角色要尋路瞻坝,那么添加了NavMeshAgent后就不要再添加Rigidbody或CharacterController,如果要對(duì)另外一個(gè)動(dòng)態(tài)對(duì)象產(chǎn)生碰撞杏瞻,就為那個(gè)對(duì)象加上Navmesh Obstacle組件所刀。
if (!navAgent.pathPending)
{
if (navAgent.remainingDistance <= navAgent.stoppingDistance)
{
if (!navAgent.hasPath || navAgent.velocity.sqrMagnitude == 0f)
{
//find path done!
}
}
}
總結(jié)
如果不進(jìn)行尋路操作,那么CharacterController和Rigidbody也不要混用捞挥。如果對(duì)象之間需要產(chǎn)生真實(shí)的推力效果浮创,就用Rigidbody;否則砌函,用CharacterController斩披。如果真有復(fù)雜的混用情況,也可以在代碼中根據(jù)情況讹俊,啟用或禁用相應(yīng)組件垦沉。