角色控制器
一、簡介
角色控制器(Character Controller)主要用于對(duì)第三人稱或第一人稱游戲主角的控制。
二、基本概念
第三人稱游戲中的這些控制器由于無規(guī)律可循,所以無法遵守固定的物理規(guī)則,例如,讓某輛車每小時(shí)跑 90 英里,但是它可能會(huì)突然停止然后在極小的空間中轉(zhuǎn)彎。此時(shí),就需要由角色控制器 (Character Controller) 進(jìn)行碰撞檢測(cè)以確保角色可以沿墻滑動(dòng)、走上和走下階梯等。
角色控制器 (Character Controller) 既可以受力的影響,也可以不受力的影響。比如,可以通過腳本對(duì)剛體 (Rigidbody) 應(yīng)用力來推動(dòng)它們。通常,所有類人角色都使用角色控制器 (Character Controller) 來實(shí)現(xiàn)。
角色控制器 (Character Controller) 本質(zhì)上是非物理性的,如果要將真實(shí)物理現(xiàn)象應(yīng)用于角色,比如在繩索上搖擺、由大巖石推動(dòng),則必須使用剛體 (Rigidbody),這樣才能對(duì)角色使用關(guān)節(jié) (Joint) 和力。
角色控制器 (Character Controller) 始終沿 Y 軸對(duì)齊,因此如果角色需要能夠在空間中改變方向(例如在變化的重力下),則也需要使用剛體 (Rigidbody)。但是要注意,很難將剛體 (Rigidbody) 調(diào)整為使角色感覺正常,因?yàn)橛螒蚪巧念A(yù)期行為方式是非物理性質(zhì)的。另一個(gè)差異在于,角色控制器 (Character Controller) 可以平穩(wěn)地滑過指定高度的臺(tái)階,而剛體 (Rigidbody) 則不能。
如果使剛體 (Rigidbody) 成為角色控制器 (Character Controller) 的父級(jí),則該角色就會(huì)獲得類似于“關(guān)節(jié)”(Joint) 的行為。
與角色控制器相關(guān)的概念有:
1、剛體(Rigidbody)。
2、碰撞體(Collider)。包括球體碰撞體(Sphere Collider)、箱體碰撞體(Box Collider)、網(wǎng)格碰撞體(Mesh Collider)、物理材質(zhì)(Physics Material)、鉸鏈關(guān)節(jié)(Hinge Joint)、彈簧關(guān)節(jié)(Spring Joint)等。
3、恒定力 (Constant Force)。
三、添加角色控制器的辦法
有兩種方式:
一種是添加Unity自帶的角色控制器,直接將其拖放到游戲?qū)ο笊霞纯伞?/p>
另一種是添加你自己定義的角色控制器,辦法為:選中要控制的角色對(duì)象–>【Component】–>【Physics】–>【Character Controller】,這樣即可為該對(duì)象添加自定義的角色控制器組件。
四、相關(guān)屬性
1、Slope Limit
坡度限制。該項(xiàng)用于設(shè)置所控制的角色對(duì)象只能爬上小于或等于該參數(shù)值的斜坡。
2、StepOoffset
臺(tái)階高度。該項(xiàng)用于設(shè)置所控制的角色對(duì)象可以邁上的最高臺(tái)階的高度。
3、Skin Width
皮膚厚度。該參數(shù)決定了兩個(gè)碰撞體可以相互滲入的深度,較大的參數(shù)值會(huì)產(chǎn)生抖動(dòng)的現(xiàn)象,較小的參數(shù)值會(huì)導(dǎo)致所控制的游戲?qū)ο蟊豢ㄗ?#xff0c;較為臺(tái)理的設(shè)定是:該參數(shù)值為Radius值的10%。
4、Min Move Distance
最小移動(dòng)距離。如果所控制的角色對(duì)象的移動(dòng)距離小于該值,則游戲?qū)ο髮⒉粫?huì)移動(dòng),這可以避免抖動(dòng),大多數(shù)情況下將該值設(shè)為0。
5、Center
中心。該參數(shù)決定了膠囊碰撞體在世界坐標(biāo)中的位置,并不影響所控制的角色對(duì)象的中心坐標(biāo)。
6、Radius
半徑。膠囊碰撞體的長度半徑,同時(shí)該項(xiàng)也決定了碰撞體的寬度。
7、Height
高度。該頂用于設(shè)置所控制的角色對(duì)象的膠囊碰撞體的高度,改變此值將會(huì)使碰撞體沿著Y軸的正負(fù)兩個(gè)方向同時(shí)伸縮。
五、注意事項(xiàng)
角色控制器不會(huì)對(duì)施加給它的作用力作出反應(yīng),也不會(huì)作用于真他的剛體。如果想讓角色控制器能夠作用于其他的剛體對(duì)象,可以通過腳本OnControllerColliderHit()函數(shù)在與其相碰撞的對(duì)象上使用—個(gè)作用力。另外,如果想讓角色控制器受物理效果影響,那就最好用剛體來代替它。
1、Height、Radius、Step Offset等參數(shù)
可以修改角色控制器的Height和Radius參數(shù)來適配角色模型的網(wǎng)格,對(duì)于人形的角色一般推薦為2m左右。如果控制器的中心點(diǎn)不在人物中心,可修改膠囊的Center參數(shù)對(duì)其中心點(diǎn)進(jìn)行調(diào)整,Step Offset參數(shù)也會(huì)對(duì)此產(chǎn)生影響,所以一般保證此值在0.1~04之間(以2m的人物角色為基準(zhǔn))。同時(shí)slope Limit參數(shù)值不要設(shè)定過小,通常設(shè)為90最好,此外,介于膠囊體形狀的緣故,人物角色是無法爬上墻的。
2、Skin Width的設(shè)定
角色控制器的【Skin Width】是非常重要的屬性,因此必須要正確地設(shè)定它。如果角色卡住了,通常是由于Skin Wdth值設(shè)得太小而導(dǎo)致的,該值可使其他的對(duì)象輕微地穿過角色控制器,并且可以避免抖動(dòng)且防止角色卡住。
【Skin Width】最好設(shè)置為大于0.01并且大于Radius×10%的值?!綧in Move Distance】的值推薦設(shè)為0。
3、技巧
如果角色頻繁地被卡住,嘗試調(diào)整【Skin Width】的值。
通過編寫腳本,角色控制器可通過物理效果來影響其他的對(duì)象。但是,角色控制器無法通過物理效果被其他游戲?qū)ο笏绊憽?/p>
OK,了解了角色控制器(特別是類人角色控制器)的這些基礎(chǔ)知識(shí),你就知道為什么要介紹本章后續(xù)節(jié)的內(nèi)容了
總結(jié)
- 上一篇: 错误宝典
- 下一篇: unity声音组件AudioSource