UNITY物理系統簡介


UNITY_物理系統簡單介紹

要有說服力的物理行為,游戲中的物體必須正確地加速,受到碰撞,引力和其他力量的影響。
Unity中實際上有兩個獨立的物理引擎:一個用於3D物理,另一個用於2D物理。兩個引擎的主要概念是相同的(除了3D中的額外維度),但是它們是使用不同的組件實現的。例如,Rigidbody和Rigidbody2D。
筆者推薦閱讀UNITY官方手冊

物理概述

Rigidbody(剛體)

概述

在使用Unity中如果想要GO擁有重力,可以發生碰撞反饋等,那就必不可少需要添加一個組件Rigidbody。由於該組件代替了它本身的運動,所有不應該通過Transform來改變位置,旋轉;相反應該使用forces來推動GO並讓物理引擎計算結果。
Rigidbody組件擁有一個Is Kinematic的屬性,該屬性可以將其從引擎的控制中移除,從而可以用腳本控制GO的運動。注意:盡量不要使用腳本控制該屬性的開關。

Sleeping

當剛體的速度遠低於一個設定的最小線性速度時,物理引擎就會認為它陷入睡眠狀態。此時,GO不會再次移動,直到它收到一個訊號。這種模式意味着處理器不會花費時間更新剛體狀態。
可以使用WakeUp函數來喚醒GameObject。

Colliders(碰撞器)

Colliders組件為物理碰撞定義了一個物體的形狀。它不需要完全符合GO的網格形狀;事實上,大致相似在游戲中更加有效率。
UNITY中最簡單的幾種碰撞器: Box Collider, Sphere Collider 和Capsule Collider;2D碰撞器:Collider 2D 和 Circle Collider 2D。
有時候需要以組合的形式附加到物體上,這種形式可以保持較低的處理器開銷,也增加一定的靈活性;但它們應該只有一個Rigidbody組件在父物體上。
那組合的碰撞器也不能滿足我們的需求,這就需要 Mesh Collider;它可以精確的匹配對象的網格形狀。但不要經常使用,它對性能的要求挺高。需要碰撞檢測的時候可以把它設置為Convex,它一般被使用在幾何圖形上。
物體可以被單獨添加一個碰撞器(可以沒有剛體),不過一般這個物體是靜態的。

Physics materials(物理材質)

物體之間相互碰撞的時候,物體表面會模擬它身上材質的屬性,比如冰塊,籃球等;物體的摩擦系數,彈性系數可以用物理材質來配置。

Triggers(觸發器)

通過腳本可以通過OnCollisionEnter啟動檢測什么時候發生的碰撞,也可以通過修改碰撞器上Is Trigger,來啟動是否需要碰撞檢測。啟動之后會允許碰撞物體穿過,穿過的時候將調用物體腳本的OnTriggerEnter函數。

碰撞函數

Is Trigger = false
OnCollisionEnter  //碰撞第一次調用  
OnCollisionStay   //保持碰撞中調用  
OnColliosionExit  //退出碰撞時調用

Is Trigger = true
OnTriggerEnter  //進入觸發器
OnTriggerStay   //停留觸發器
OnTriggerExit   //離開觸發器

碰撞相互作用

靜態碰撞(沒有剛體)

靜態的物體且擁有碰撞器,沒有剛體;不要輕易在游戲的過程中使用它們,會給你帶來意想不到的效果(占用額外性能)。

剛體碰撞

有碰撞器和剛體的物體,可以對來自腳本的添加力做出反應;最常見。

運動學剛體碰撞

有碰撞器和剛體組件的物體,開啟了IsKinematic;可以通過Transform來變換。它應該用於偶爾使用的物體,比如滑動門。
也可以實時切換IsKinematic屬性在正常和運動行為之間切換;比如人物,一般使用動畫來控制它,這時是要使用運動學的;而發生爆炸的時候,被炸碎的四肢,可以切換為非運動學來模擬出更好的效果。

Joints

可以使用各種Joint組件將兩個物體進行鏈接,比如一個物體圍繞另一個靜態物體旋轉。還可以做類似彈簧,繩子的效果。
特殊效果:
當施加的力大於這個值的時,可以設置一個關節斷開。
關節之間可以產生驅動力,使其自動運動。

Character Controllers(角色控制器)

為第一人稱或第三人稱游戲中的角色做基於碰撞的物理特性。不能穿過靜態碰撞物體;可以利用它設置物體的速度和方向等。

Physics Debug Visualization(可視化物理調試工具)

可視化物理調試允許您快速檢查場景中的碰撞幾何,並分析常見的物理場景。它提供了哪些GameObjects應該和不應該相互碰撞的可視化。當場景中有許多Colliders,或者Render和Collision Meshes不同步時,這是特別有用的。

打開方式:
Windows -->  Physics Visualization

屬性 功能
Reset 單擊此按鈕將“物理調試”窗口重置為默認設置。
Hide Layers 使用下拉菜單確定是否從所選圖層顯示Colliders
Hide Static Colliders 選中此復選框以從可視化文件中移除靜態碰撞圖(不帶有剛體組件的碰撞圖)。
Hide Triggers 選中此復選框以從可視化文件中刪除也是觸發器的Colliders。
Hide Rigidbodies 選中此復選框以從可視化文件中移除Rigidbody組件。
Hide Kinematic Bodies 選中此復選框可從可視化文件中刪除具有運動學剛體組件(不受物理引擎控制)的碰撞體。
Hide Sleeping Bodies 選中此復選框可從可視化文件中刪除帶有Sleeping Rigidbody組件(目前不與物理引擎相關)的Colliders 。
Collider Types 使用這些選項從物理可視化中移除特定的碰撞器類型。
Hide BoxColliders 選中此復選框可從可視化文件中刪除Box Colliders。
Hide SphereColliders 選中此復選框可從可視化中刪除“ Sphere Colliders ”。
Hide CapsuleColliders 選中此復選框可從可視化文件中移除Capsule Colliders。
Hide MeshColliders (convex) 選中此復選框可從可視化中刪除凸面 網格碰撞器。
Hide MeshColliders (concave) 選中此復選框可從可視化中刪除凹面 網格碰撞體。
Hide TerrainColliders 選中此復選框可從可視化文件中刪除Terrain Colliders。
Hide None 單擊隱藏無清除所有過濾標准並顯示可視化中的所有對撞機類型。
Hide All 點擊全部隱藏以啟用所有過濾器,並從可視化文件中刪除所有的碰撞器類型。
Colors 使用這些設置來定義Unity如何在可視化中顯示物理組件。
Static Colliders 使用此顏色選擇器可以定義哪種顏色指示可視化中的靜態碰撞體(不帶剛體組分的碰撞體)。
Triggers 使用此顏色選擇器可以定義哪種顏色表示可視化中的“Trigger”的“Collision”。
Rigidbodies 使用此顏色選擇器來定義哪種顏色表示可視化中的Rigidbody組件
Kinematic Bodies 使用此顏色選擇器來定義哪種顏色表示可視化中的運動學剛體組件(不受物理引擎控制)。
Sleeping Bodies 使用此顏色選擇器來定義哪種顏色表示可視化中的Sleeping Rigidbody組件(目前不與物理引擎相關)。
Variation 使用滑塊設置0到1之間的值。這將定義您選擇的顏色與隨機顏色的混合程度。使用它可以通過顏色在視覺上分離Colliders,並查看GameObjects的結構
Rendering 使用這些設置來定義Unity如何呈現和顯示物理可視化。
Transparency 使用滑塊將值設置為0和1.這將定義可視化中繪制的碰撞幾何的透明度。
Force Overdraw 普通的渲染幾何圖形有時可以遮擋Colliders(例如,地板下面的Mesh Collider平面)。選中Force Overdraw復選框,使可視化渲染器在渲染幾何圖形上繪制Collider幾何圖形。
View Distance 使用此設置可視化的視圖距離。
Terrain Tiles Max 使用此設置可視化中最大的地形圖塊數量

屬性 功能
Collision Geometry 選中此復選框以啟用碰撞幾何可視化。
Mouse Select 選中此復選框以啟用鼠標懸停突出顯示和鼠標選擇。如果在Scene中有大的GameObjects互相阻塞,這可能很有用。

總結

可視化物理調試工具主要用來分析和排除游戲中物理活動的故障。最推薦使用:

  • To see active Rigidbody components only:要僅查看處於活動狀態並因此使用CPU / GPU資源的Rigidbody組件,請勾選隱藏靜態碰撞物體並隱藏睡眠模式的物體。
  • To see non-convex Mesh Colliders only:非凸(基於三角形)的Mesh Collider在其附着的剛體組件非常接近與另一個剛體或碰撞物體碰撞時傾向於產生最多的接觸。要只顯示非凸網格物體碰撞體,將窗口設置為顯示選定物體模式,點擊Select None按鈕,然后勾選Show MeshColliders(凹面)復選框。

知識共享許可協議
作品繁星隕辰采用知識共享署名-非商業性使用 4.0 國際許可協議進行許可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM