UNITY rigidbody算法筆記

什么是Collider

碰撞器組件在Unity引擎中觸發(fā)物理碰撞的最基本的條件。

可以這樣說坑律,假如一個游戲中沒有物理碰撞系統(tǒng)是不可能的。

什么是Rigidbody

通過物理模擬的控制對象的位置锌妻。

Rigidbody組件添加到一個對象將其運動的控制下統(tǒng)一的物理引擎贮懈。即使沒有添加任何代碼,Rigidbody對象將由重力向下拉,將反應與傳入的對象如果正確的對撞機碰撞組件也存在。

Rigidbody也有腳本API,允許您力量應用于對象和物理現(xiàn)實的方式控制它断部。例如,一輛汽車的行為可以指定在力量方面應用的輪子猎贴。鑒于這種信息,物理引擎可以處理大多數汽車運動的其他方面,所以它將加速實際和正確應對沖突。

通常會在腳本的FixedUpdate函數中改變Rigidbody設置。原因是防止在更新時時間不配合幀更新的步驟她渴。

FixedUpdate稱為每個物理之前立即更新,所以任何更改將會有直接處理达址。

開始使用Rigidbody時常見的問題是,游戲中模擬的物理系統(tǒng)似乎在“慢運動”運行。這實際上是由于規(guī)模用于您的模型趁耗。默認的重力設置假設一個世界單元對應于一米的距離沉唠。與非現(xiàn)實的游戲,是沒有多大的區(qū)別,如果您的模型都是100單位長但使用物理時,他們將被視為非常大的對象。如果大規(guī)模用于對象應該是小,他們似乎會非常緩慢——物理引擎認為他們非常大對象摔倒非常大的距離苛败÷穑考慮到這一點,一定要保持你的對象在現(xiàn)實生活中或多或少的規(guī)模(所以汽車應該大約4單位= 4米)。

Collider的用法

碰撞器常用的方法

OnCollisionEnter

//當另一個游戲對象的剛體或者碰撞器罢屈,碰撞到本游戲對象的碰撞器組件時嘀韧,會調用這個方法...Collider.OnCollisionEnter(Collision)

例如:

voidOnCollisionEnter(Collision collision) {

//遍歷碰撞到該游戲對象的碰撞器組件的所有對象...

foreach(ContactPoint contactincollision.contacts) {

Debug.DrawRay(contact.point, contact.normal, Color.white);

}

}

OnCollisionExit

//當另一個游戲對象已經離開當前游戲對象的剛體或者是碰撞器組建時會調用這個方法...

Collider.OnCollisionExit(Collision)

OnCollisionStay

//當另一個游戲對象的碰撞器一直停留在當前游戲對象上的剛體或者碰撞器時,會調用這個方法...

Collider.OnCollisionStay(Collision)

注意:當把碰撞器Collisider組件的觸發(fā)器屬性設置為true時缠捌,在腳本中會調用如下三個方法

OnTriggerEnter

//需要注意的是乳蛾,觸發(fā)器回調方法的參數是Collider類型

Collider.OnTriggerEnter(Collider)

OnTriggerExit

Collider.OnTriggerExit(Collider)

OnTriggerStay

Collider.OnTriggerEnter(Collider)

Rigidbody的用法

Rigidbody的成員變量

成員變量名稱成員變量的作用

angularDrag游戲對象對應的角阻力

angularVelocity游戲對象的角速度向量

centerOfMass相對于游戲對象自身的坐標系統(tǒng)的重心位置

collisionDetectionMode游戲對象剛體組件的碰撞檢測模式

constraints用來約束游戲對象在某些條件上是可以自由跟隨Unity物理系統(tǒng)移動的

detectCollisions是否啟用游戲對象的碰撞檢測功能。默認都是開啟的鄙币。

drag游戲對象在運動時的阻力

freezeRotation用來約束游戲對象是否會被Unity物理系統(tǒng)影響自身的旋轉

isKinematic用來控制游戲對象的剛體是否會收到Unity物理系統(tǒng)的影響

mass用來表示游戲對象剛體的質量

maxAngularVelocity用來表示游戲對象的最大角速度

position游戲對象剛體組件所處在的位置坐標

rotation游戲對象剛體組件已經產生的坐標旋轉

sleepAngularVelocity用來表示當游戲對象的角速度小于臨界值時就停止肃叶。默認值0.14

sleepVelocity用來表示當游戲對象的運行速度小于臨界值時就停止。默認值0.14

useGravity用來表示當前游戲對象是否收到重力系統(tǒng)的影響

velocity用來表示當前游戲對象的剛體的運行速度

worldCenterOfMass相對于世界的坐標系統(tǒng)的重心位置

在Unity開發(fā)工具中使用到的組件接口面板

Rigidbody常用的方法

AddForce

//為rigidbody添加一個方向力十嘿。因此,rigidbody將開始移動因惭。

voidAddForce(Vector3 force, ForceMode mode = ForceMode.Force);

例如:

//在FixedUpdate函數中,為rigidbody添加10個單位向上的方向力

voidFixedUpdate() {

rigidbody.AddForce(Vector3.up * 10);

}

AddForceAtPosition

//在一個位置為Rigidbody添加一個力.

voidAddForceAtPosition(Vector3 force, Vector3 position, ForceMode mode = ForceMode.Force);

例如:

//ApplyForce函數是個自定義函數,用來對一個剛體對象施加一個方向力

voidApplyForce(Rigidbody body) {

//計算當前游戲對象和剛體參數游戲對象所處位置的方向

Vector3 direction = body.transform.position - transform.position;

//在當前游戲對象所處的位置绩衷,為body參數施加1個單位的方向力

body.AddForceAtPosition(direction.normalized, transform.position);

}

AddTorque

//為剛體組件添加一個力矩蹦魔,使該游戲對象產生旋轉的速度...

voidAddTorque(Vector3 torque, ForceMode mode = ForceMode.Force);

例如:

//為游戲對象添加一個10個單位的旋轉力...

voidFixedUpdate() {

rigidbody.AddTorque(Vector3.up * 10);

}

形成的效果如下

AddRelativeTorque

//添加一個扭矩rigidbody相對rigidbody自身的坐標系統(tǒng)

voidAddRelativeTorque(Vector3 torque, ForceMode mode = ForceMode.Force);

例如:

//相對于游戲對象自身的坐標系統(tǒng),添加10個單位沿著y軸正向旋轉的力

voidFixedUpdate()

{

rigidbody.AddRelativeTorque(Vector3.up * 10);

}

那么在Unity物理引擎系統(tǒng)里兩個常用的組件咳燕,Collider和Rigidbody就到這里勿决。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市招盲,隨后出現(xiàn)的幾起案子低缩,更是在濱河造成了極大的恐慌,老刑警劉巖曹货,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件咆繁,死亡現(xiàn)場離奇詭異,居然都是意外死亡顶籽,警方通過查閱死者的電腦和手機玩般,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來礼饱,“玉大人坏为,你說我怎么就攤上這事究驴。” “怎么了匀伏?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵洒忧,是天一觀的道長。 經常有香客問我帘撰,道長跑慕,這世上最難降的妖魔是什么万皿? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任摧找,我火速辦了婚禮,結果婚禮上牢硅,老公的妹妹穿的比我還像新娘蹬耘。我一直安慰自己,他們只是感情好减余,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布综苔。 她就那樣靜靜地躺著,像睡著了一般位岔。 火紅的嫁衣襯著肌膚如雪如筛。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天抒抬,我揣著相機與錄音杨刨,去河邊找鬼。 笑死擦剑,一個胖子當著我的面吹牛妖胀,可吹牛的內容都是我干的。 我是一名探鬼主播惠勒,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼赚抡,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了纠屋?” 一聲冷哼從身側響起涂臣,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎售担,沒想到半個月后肉康,有當地人在樹林里發(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡灼舍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年吼和,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片骑素。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡炫乓,死狀恐怖刚夺,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情末捣,我是刑警寧澤侠姑,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站箩做,受9級特大地震影響莽红,放射性物質發(fā)生泄漏。R本人自食惡果不足惜邦邦,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一安吁、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧燃辖,春花似錦鬼店、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至氏身,卻和暖如春巍棱,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蛋欣。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工航徙, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人豁状。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓捉偏,卻偏偏與公主長得像,于是被迫代替她去往敵國和親泻红。 傳聞我的和親對象是個殘疾皇子夭禽,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內容