1. 物理引擎簡介
1.1 遊戲物理
定義:
- 通過物理公式的計算來模擬真實世界的物理現象(e.g.重力、剛體、柔體、碰撞、變形、流體、布料)。
優點:
- 增加遊戲的真實性
- 減少美術工作量
- 減少邏輯代碼的工作量
性能與真實性之間的取捨:
- 如何欺騙玩家
常見的物理模擬類型:
- 剛體物理
- 破碎物理
- 粒子物理
- 流體物理
1.2 遊戲引擎
定義:
- 已編寫好的可編輯電腦遊戲系統或者一些交互式實時圖像應用程式的核心組件。
- 爲遊戲設計者提供各種編寫遊戲所需的各種工具。
- 通常包含:渲染引擎、物理引擎、音效、腳本引擎、電腦動畫、人工智能、網絡引擎以及場景管理等。
舉例:
- Unity:《王者榮耀》、《神廟逃亡》、《紀念碑谷》、《崩壞》
- Unreal(虛幻):《質量效應》、《戰地之王》、《劍靈》、《絕地求生》
- Frostbite(寒霜):《戰地》、《極品飛車》、《榮譽勳章》
- CryENGINE:《幽靈戰士》、《孤島危機》、《怪物獵人onile》
- 3DGame Studio
- RenderWare:《俠盜列車手》、《實況足球》、《軒轅劍》、《仙劍》
- Gamebryo:《上古卷軸》、《文明4》、《戰錘》、《輻射3》
1.3 物理引擎
作用:
- 物理引擎計算物體位置、速度、加速度,而後通過繪圖引擎渲染圖像
定義:
- 通過爲物體賦予真實的物理屬性的方式來計算運動、旋轉和碰撞反應等物理反應。
- 實際上通常是一個函數庫。
在挑選時的考量:
- 功能、正確性、性能、支持的平臺、是否開源、文件完整性、有無可視化工具等。
- Unity3D使用的物理引擎是:PhysX(3D)、Box2d(2D)
2. 二維物理引擎組件
2.1 剛體(Rigidbody 2D)
定義:
剛體是受物理引擎控制的元件,場景中運動的元件都應加上剛體。
屬性:
2.2 碰撞器(Collider 2D)
類型:
Is Trigger屬性:
- 通常用於可被穿透的物體。
相關函數:
//進入碰撞體時
void OnTriggerEnter2D(Collider2D other)
{
}
//結束碰撞時
void OnTriggerExit2D(Collider2D other)
{
}
3. 三維物理引擎組件
3.1 剛體(Regidbody)
屬性:
相關函數:
//在物體的中心點位置新增一個Vector3的力,使物體朝該Vector3方向運動
Rigidbody.AddForce(Vector3);
//在物體中心新增一個力矩Vector3可以使物體旋轉,剛體將順着torque軸旋轉
Rigidbody.AddTorque(Vector3);
//在某個位置新增一個大小爲float,半徑爲range的爆炸力
//向爆炸範圍內各個方向的物體施加一個力,用來模擬爆炸效果
//爆炸力隨着剛體的距離線性衰減
Rigibody.AddExplosionForce(float forceStrength,Vector3 positon,float range);
3.2 碰撞器(Collider)
3.2.1 盒子碰撞器(Box Collider)
3.2.2 膠囊碰撞器(Capsule Collider)
3.2.3 網格碰撞器(Mesh Collider)
3.2.4 輪胎碰撞器(Wheel Collider)
3.2.5 地表碰撞器(Terrain Collider)
3.2.6 靜態碰撞器(Static Colliders)
定義:
- 將包含碰撞器但不包含剛體的遊戲物體中的碰撞器稱爲“靜態碰撞器”,應當注意儘量不要移動帶有靜態碰撞器的物體,消耗資源較大。
3.3 剛體與碰撞器的比較
關係:
- 剛體能夠給物體新增物理效果,碰撞器能夠使物體之間發生碰撞。
- 碰撞體不一定要有剛體,但是剛體一定要有碰撞器纔可以有碰撞效果。
- 兩個碰撞體至少要有一個是剛體。
3.4 Joints
作用:
- 產生兩個Rigidbody之間的約束力,以對其相對運動加以限制。
- 需要Rigidbody同時存在纔有效果。
類型:
4. 碰撞算法
- AABB算法
- SAT算法