搜索網(wǎng)站不顯示圖片品牌整合營銷推廣
前言
本文為Udemy課程The Ultimate Guide to Creating an RPG Game in Unity學習筆記
如何實現(xiàn)物體之間碰撞
實現(xiàn)物體之間的碰撞關鍵組件:Rigidbody 2D(剛體)、Collider 2D(碰撞體)、Sprite Renderer(Sprite渲染器)
實現(xiàn)物體之間的碰撞
第一步:讓物體擁有物理規(guī)則
先創(chuàng)建一個物體的渲染器,命名為 Circle
在Circle對象中創(chuàng)建 Rigidbody 2D(剛體),并設置重力
效果如下,可以看到圓下落了,我們也可以通過調(diào)整重力的大小來讓它更快的下降
這里沒有能掉落在平臺,原因是 unity 的物體接觸是通過碰撞體(Collider)來實現(xiàn)的,而圓沒有設置碰撞體(Collider)
第二步:給物品設置碰撞體(Collider)
unity 的物體接觸是通過碰撞體(Collider)來實現(xiàn)的
現(xiàn)在我們來給圓設置 Collider
效果如下
擴展案例
球碰到地面后彈出起來并在斜的平臺上滑動
實現(xiàn)的關鍵:
- 物理機制組件:Rigidbody 2D 設置添加材質(zhì)(Physics Material 2D)
- 碰撞檢查組件:Collider
實現(xiàn)效果如下
這里放 Rigidbody 2D 和 Collider 的材質(zhì)有什么不同,看下面解析
我們這里需要球自身的彈跳和摩擦,所以放在 Rigidbody 里面了
Rigidbody 2D
Rigidbody 2D 是用于在 2D 空間中處理物理行為的核心組件,廣泛用于 2D 游戲引擎(如 Unity)。它使游戲?qū)ο竽軌蚋鶕?jù)物理規(guī)則進行運動和交互。
核心功能
- 物理屬性:
- 質(zhì)量(Mass):定義物體的重量,影響加速度和碰撞反應。
- 重力(Gravity Scale):控制物體受到重力影響的程度,0 表示無重力。
- 線性阻尼(Linear Drag):模擬空氣阻力,減緩物體的線性速度。
- 角阻尼(Angular Drag):影響物體旋轉(zhuǎn)時的阻力。
- 運動控制:
- 速度(Velocity):通過調(diào)整線性和角速度,控制物體移動和旋轉(zhuǎn)。
- 力(Force)與沖量(Impulse):使用
AddForce
或AddTorque
應用推力或旋轉(zhuǎn)力。 - 運動類型:
- 動態(tài)(Dynamic):完全受物理引擎控制。
- 靜態(tài)(Static):不會受物理影響(常用于地形)。
- 運動學(Kinematic):由腳本控制,不受物理引擎影響。
- 碰撞檢測:
- 配合 Collider 2D 使用(如 BoxCollider2D、CircleCollider2D)。
- 配置檢測模式(如離散或連續(xù))以減少穿透現(xiàn)象。
使用場景
- 角色控制器:使用 Rigidbody 2D 模擬角色跳躍、移動或受到物理效果。
- 物理互動:讓物體能夠因力而運動或被碰撞推動。
- 游戲機制:例如投擲物體、擺動繩索或模擬重力。
Collider 2D
Collider 2D 是用于定義物體形狀的組件,主要應用于 2D 游戲物理系統(tǒng)中,用于檢測碰撞或觸發(fā)器事件。它與 Rigidbody 2D 配合使用,可以模擬真實的物理交互,如碰撞反應、物體阻擋或觸發(fā)事件。
作用
- 碰撞檢測:
- 定義物體的物理邊界,使其能夠檢測到與其他 Collider 2D 的碰撞。
- 常用于地形、角色、障礙物等游戲元素。
- 觸發(fā)檢測:
- 設置為 觸發(fā)器(Is Trigger) 時,不再物理阻擋其他物體,但可以檢測穿過的對象,常用于檢測區(qū)域、傳送門等。
- 優(yōu)化性能:
- 提供高效的幾何形狀檢測,而不需要完整的網(wǎng)格數(shù)據(jù)。
常見的 Collider 2D 類型
Collider 類型 | 描述 |
---|---|
Box Collider 2D | 用于矩形物體,如平臺、墻壁等。 |
Circle Collider 2D | 用于圓形物體,如球體或圓形區(qū)域檢測。 |
Polygon Collider 2D | 用于復雜的多邊形形狀,自動生成頂點。 |
Edge Collider 2D | 用于創(chuàng)建一條開放的線段,適合地形邊緣等。 |
Capsule Collider 2D | 用于膠囊形狀,適合角色頭頂和底部圓滑的碰撞檢測。 |
Composite Collider 2D | 將多個簡單 Collider 組合成更復雜的形狀(通常與 Tilemap 一起使用)。 |
Collider 2D 的重要屬性
- Is Trigger:
- 勾選后,Collider 不會物理阻擋,但可以觸發(fā)事件(如
OnTriggerEnter2D
)。
- 勾選后,Collider 不會物理阻擋,但可以觸發(fā)事件(如
- Material(Physics Material 2D):
- 控制碰撞時的摩擦力和彈性。
- Offset:
- 調(diào)整 Collider 相對于對象位置的偏移。
- Used by Composite:
- 將當前 Collider 與 Composite Collider 配合使用,優(yōu)化性能或簡化形狀。
Collider 2D 與 Rigidbody 2D 的關系
- 沒有 Rigidbody 2D 的 Collider 被視為靜態(tài)對象,僅用于檢測碰撞,不會響應物理。
- 帶有 Rigidbody 2D 的 Collider 會受到物理引擎影響,可以移動、旋轉(zhuǎn)和碰撞。
Sprite Renderer
Sprite Renderer 是 Unity 中用于在 2D 場景中顯示精靈(Sprite)的組件,它負責將 2D 圖像渲染到屏幕上,是 2D 游戲開發(fā)的核心工具之一。
功能
- 顯示圖像:
- 將一個 Sprite 紋理分配到對象上進行渲染。
- 支持多種圖片格式(如 PNG、JPG),通常使用透明背景的紋理。
- 控制外觀:
- 調(diào)整 Sprite 的顏色、透明度、渲染順序等屬性。
- 支持簡單的動畫或視覺效果(如通過腳本改變顏色)。
- 與其他組件交互:
- 可以與 Animator、Rigidbody 2D、Collider 2D 一起使用,制作動態(tài)和交互式對象。
主要屬性
- Sprite:
- 指定 Sprite 圖像資源。
- 在 Unity 中,Sprite 是一種特殊的 2D 圖形資源,可以通過 Sprite Editor 編輯裁剪。
- Color:
- 設置 Sprite 的顏色和透明度。
- 默認為白色(
RGBA(255,255,255,255)
),表示圖像顯示其原始顏色。
- Flip:
- Flip X:水平翻轉(zhuǎn)。
- Flip Y:垂直翻轉(zhuǎn)。
- 常用于角色左右移動的視覺效果。
- Material:
- 定義 Sprite 的材質(zhì)(如標準材質(zhì)或自定義 Shader)。
- 可以實現(xiàn)特殊的渲染效果,如光照或像素化。
- Sorting Layer:
- 指定 Sprite 所在的渲染層,用于控制渲染順序。
- 可通過自定義層級分組(如背景、前景、角色)。
- Order in Layer:
- 定義 Sprite 在同一層內(nèi)的渲染順序。
- 值越大,越靠前顯示。
常見用法
- 角色渲染:
- 用于顯示角色的靜態(tài)或動態(tài)動畫幀。
- 搭配 Animator 或腳本實現(xiàn)動畫切換。
- 背景和場景元素:
- 用于繪制游戲的背景圖、障礙物、裝飾物等。
- 效果實現(xiàn):
- 使用材質(zhì)或 Shader 實現(xiàn)閃爍、漸變、發(fā)光等視覺效果。
Physics Material 2D
Physics Material 2D(物理材質(zhì) 2D) 是在 游戲開發(fā) 或 物理仿真 中,用于定義 2D 物理引擎中對象的物理交互屬性的工具。以下是其核心概念和應用:
核心屬性
- 摩擦系數(shù)(Friction):
- 決定物體之間滑動的阻力。
- 高摩擦值:表面更“粘”,滑動阻力大(如橡膠)。
- 低摩擦值:表面更光滑,物體易滑動(如冰)。
- 彈性(Bounciness/Restitution):
- 定義物體碰撞后的彈跳程度。
- 值為
1.0
:完全彈性(沒有能量損失)。 - 值為
0.0
:無彈性(碰撞后停止)。
應用場景
- 游戲開發(fā):
- 制作滑動平臺(如冰面)或“黏性”地面效果。
- 模擬運動游戲中的物體彈跳行為(如籃球、彈簧)。
- 物理仿真:
- 用于模擬滑動摩擦、碰撞等現(xiàn)實物理現(xiàn)象。
- 特效設計:
- 用于粒子系統(tǒng)或可破壞場景的真實交互模擬。
如何在 Unity 中應用 Physics Material 2D
在 Unity 中,Physics Material 2D 是一個用于調(diào)整 2D 物理行為的組件,可以控制物體的 摩擦力 和 彈性。
將材質(zhì)附加到 2D Collider 上:
- 在場景中選擇需要使用的物體。
- 確保物體有一個 2D 碰撞器組件(如
BoxCollider2D
、CircleCollider2D
等)。 - 在 Collider 的 Material 屬性中,拖入創(chuàng)建的 Physics Material 2D 文件。
驗證效果:
- 為 Rigidbody2D 添加物理行為(如重力或移動)。
- 運行場景,觀察物體在碰撞時的滑動或彈跳效果。
- 根據(jù)需要調(diào)整摩擦和彈性值。
Physics Material 2D 的典型用例
- 模擬冰面或光滑地板:
- 摩擦系數(shù):
0.1
或更低。 - 彈性系數(shù):
0.0
(無彈性)。
- 摩擦系數(shù):
- 彈性物體(如籃球):
- 摩擦系數(shù):
0.5
(適中)。 - 彈性系數(shù):
0.8
或更高。
- 摩擦系數(shù):
- 粗糙表面(如沙地或草地):
- 摩擦系數(shù):
1.0
或更高。 - 彈性系數(shù):
0.0
(無反彈)。
- 摩擦系數(shù):
材質(zhì)(Physics Material)放在 Rigidbody 2D 和 Collider有什么區(qū)別
在 Unity 中,將 Physics Material 2D(物理材質(zhì))應用于 Rigidbody 2D 或 Collider 2D 都會影響物體的物理交互行為,但其應用方式和效果有明顯的區(qū)別。以下是詳細的比較與說明:
- 將物理材質(zhì)放在 Collider 2D
- 效果:
- 直接影響該 Collider 的碰撞行為,例如摩擦力和彈性。
- 如果一個物體有多個 Collider,它們可以有不同的物理材質(zhì),從而產(chǎn)生不同的物理效果。
- 用途:
- 用于定義物體的表面特性。
- 場景示例:
- 一個籃球的碰撞彈性和地板的摩擦分別由它們的 Collider 上的物理材質(zhì)控制。
- 關鍵點:
- 每個 Collider 的物理材質(zhì)是獨立的,互不影響。
- 適合有復雜物體(多個 Collider)的情況,允許細粒度控制。
- 將物理材質(zhì)放在 Rigidbody 2D
- 效果:
- Rigidbody 2D 本身并不直接接受物理材質(zhì)的應用。
- 物理材質(zhì)始終需要綁定在 Collider 2D 上,Rigidbody 2D 是用來控制整體物體的動力學行為(如質(zhì)量、重力和力的應用)。
- 關鍵點:
- 如果物體包含多個 Collider,物理行為由每個 Collider 上的物理材質(zhì)決定,而不是 Rigidbody。
- Rigidbody 是物體的運動主體,不負責單獨的摩擦或彈性計算。
- 主要區(qū)別與實踐
功能Collider 2D 上的物理材質(zhì)Rigidbody 2D 上(無直接效果)是否能直接設置是,物理材質(zhì)直接綁定到 Collider 的 Material 屬性。否,Rigidbody 不接收物理材質(zhì)。摩擦力和彈性影響決定該 Collider 的摩擦系數(shù)和彈性系數(shù)。需要通過附加在物體上的 Collider 實現(xiàn)效果。多 Collider 行為每個 Collider 可有獨立的物理材質(zhì),行為獨立。由多個 Collider 的物理材質(zhì)共同決定物體整體行為。適用場景需要為物體的不同部分設定不同的物理特性。用于控制整體物體的質(zhì)量、重力或力學行為。
- 示例場景
場景 1:簡單物體
- 描述:一個籃球需要高彈性,地板需要高摩擦。
- 實現(xiàn):
- 在籃球的
CircleCollider2D
上設置高彈性材質(zhì)(Bounciness=0.9)。 - 在地板的
BoxCollider2D
上設置高摩擦材質(zhì)(Friction=0.8)。
- 在籃球的
場景 2:復雜物體
- 描述:一個物體有多個部分(例如,汽車),需要不同的物理特性。
- 實現(xiàn):
- 每個部件的 Collider 設置獨立的物理材質(zhì),例如輪胎的 Collider 設置高摩擦,車身的 Collider 設置低摩擦。
場景 3:統(tǒng)一物體
- 描述:一個角色只有一個 Rigidbody 和一個 Collider。
- 實現(xiàn):
- 將物理材質(zhì)直接放在唯一的 Collider 上,整體受一個物理材質(zhì)影響。
- 注意事項
- 物理材質(zhì)必須綁定在 Collider 上:
- Rigidbody 本身不能直接綁定物理材質(zhì)。
- 如果想改變物體的摩擦或彈性,需要在 Collider 的
Material
屬性中設置。
- 多個 Collider 時的材質(zhì)組合:
- 如果一個 Rigidbody 下有多個 Collider,各 Collider 的物理材質(zhì)會獨立起作用,Unity 引擎會綜合計算其交互效果。
- 性能優(yōu)化:
- 為復雜的動態(tài)物體使用盡量少的 Collider,以降低性能消耗。
總結(jié)
- Collider 2D 上的物理材質(zhì)控制物體的表面物理屬性(摩擦和彈性)。
- Rigidbody 2D 控制物體的運動和動力學行為,但不直接接受物理材質(zhì)設置。 如果你的場景中有多個部分需要不同的物理特性,材質(zhì)應該綁定在相應的 Collider 上。