遊戲物理jau4 hei3 mat6 lei5英文game physics)係指喺做遊戲編程嗰陣用程式嘅法則模擬現實世界嘅物理:除咗互動式小說等少數遊戲類型之外,電子遊戲多數都會有個空間俾玩家控制某啲嘢喺入面郁動,所以一隻遊戲嘅世界多數要有物理法則主宰啲嘢應該點郁(唔一定合乎現實世界嘅物理定律),而喺「更新遊戲世界狀態」嘅過程當中,個遊戲程式要按照遊戲嘅物理法則同玩家輸入計返個世界嘅狀態應該點變。

四個遊戲物理嘅例子:
1 冇任何物理法則。
2 有重力,但冇碰撞探測
3 有重力同碰撞探測,但冇剛體動力學
4 有齊所有基本嘢。

例如一隻用牛頓力學(Newtonian mechanics)嘅賽車遊戲,喺玩家撳咗「踩油」嘅掣嗰陣,要改變架車嘅加速度數值,而架車相應嘅速度同位置等變數亦要跟牛頓力學裏面嘅法則作出相應嘅改變[1]

力學模擬

編輯

以下呢段用 C 程式語言寫嘅源碼可以攞嚟模擬喺牛頓第二定律(Newton's second law)之下郁動嘅物體[2]

double t = 0.0;
float dt = 1.0f;

float velocity = 0.0f;
float position = 0.0f;
float force = 10.0f;
float mass = 1.0f;
// 設一大柞變數,包括咗時間點(t)、時間間隔(dt)、速度(velocity)、位置(position)、件物體受嘅力(force)、同件物體嘅質量(mass)。

while ( t <= 10.0 ) // 重複噉計若干次,計到時間點係 10 為止。
{
    position = position + velocity * dt;
    velocity = velocity + ( force / mass ) * dt; // 用牛頓第二定律計吓件物體受嘅力同佢嘅質量會點影響佢嘅速度。
    t += dt;
}

碰撞探測

編輯
内文:碰撞探測
睇埋:二元樹多面體

碰撞探測(collision detection)係指用嚟喺每個時間點探測一個世界內部「有冇邊對物件相撞」嘅演算法[3]。碰撞探測「要點樣最佳化」係一條大問題:原則上,段演算法可以將所有物體可能配對遂對遂對攞嚟睇,但噉做運算複雜度會好高[註 1];比較有效率嘅做法可能係「將遊戲空間入面啲物件全部睇做長方體,排除邊對邊對物體冇可能係相撞緊」呀噉[4]

  • 命中框(hitbox):遊戲空間入面對應一個角色或者一件物件嘅空間,如果有一吓攻擊(子彈等)同一件物件嘅命中框碰撞,個遊戲程式就會當呢一吓攻擊打中咗嗰件物件。喺 PvP動作遊戲當中,美術設計上比較大隻嘅角色命中框會大啲,令佢哋比較容易俾敵人打中,但同時佢哋嘅血量又會多啲,所以比較能夠承受攻擊[5]
  • 傷害框(hurtbox):指一吓攻擊(以子彈等物件代表)嘅命中框,一吓攻擊嘅傷害框要同一個目標嘅命中框碰撞先可以對個目標造成傷害[6]

睇埋

編輯

註釋

編輯
  1. 組合性爆發嘅概念。

文獻

編輯
  1. McShaffry, M. (2014). Game coding complete. Nelson Education. Ch. 2.
  2. Integration Basics: How to integrate the equations of motion 互聯網檔案館歸檔,歸檔日期2018年10月26號,.. Gaffer on Games.
  3. Ericson, Christer. Real-time Collision Detection. Elsevier, 2005.
  4. Video Game Physics Tutorial - Part II: Collision Detection for Solid Objects. Developers. "'The Sort and Sweep Algorithm" 同埋 "Dynamic Bounding Volume Trees",後者用到二元樹嘅概念,將啲物件分做唔同「組」。
  5. Apex Legends player explains how to fix Wraith's hitbox 互聯網檔案館歸檔,歸檔日期2020年1月14號,..
  6. Here are the unlisted Season 5 patch notes for Street Fighter 5 互聯網檔案館歸檔,歸檔日期2020年1月14號,..
  • "Math and Physics". GameDev. Archive. 原著喺February 22, 2011歸檔.
  • "Physics Engines List". Database. Digital Rune. Mar 30, 2015 [2010]. 原著喺March 9, 2016歸檔.