遊戲中的角色是如何“動”起來的?
我們會想,為什麼有些遊戲中的人物,移動起來非常不自然?而有些製作精良的遊戲裡,每個角色動起來都栩栩如生。這些角色是如何在我們遊戲世界中移動的呢?今天這篇文章就會簡單的給大家分享一下,遊戲角色在遊戲世界中的移動原理。
遊戲世界
-真實世界的複製版-
談到移動,首先不得不談一下我們遊戲中的世界。遊戲世界分為2D世界和3D世界,不妨先從3D遊戲的世界說起。3D遊戲世界是一個三維立體世界,和我們和現實中的世界相似,我們遊戲中的所有角色,都會在這個三維的世界裡面出生、移動、互動直至死亡。除了角色以外,遊戲中的其他物件也是如此產生的,比如說建築、武器、道具等等。他們身上都儲存著自己的座標位置,當我們在移動我們的角色的時,其實就是在不斷的修改當前角色的座標值。
對於2D遊戲,原理要簡單很多,所有物體都存在於一個平面世界,他們的移動也只是改變其X,Y兩個座標軸而已。
移動效果≠動畫效果
-有動作不代表有位移-
現在,讓我們再把焦點放在角色的移動上。這裡先丟擲一個問題,當我們看見一個角色在奔跑時,他真的是在移動麼?
很多人可能會說這不是理所當然的麼?難道還能原地跑麼?沒錯,遊戲中的角色還真就可能是原地奔跑。事實上一個角色的移動和你看見他做什麼動作是沒有直接關係的。因為在遊戲裡面,移動表現“不等於”動畫表現。不妨看一下下面這張圖
圖中的這個角色一直在播放移動的動畫,但是並沒有產生一丁點的位移,因為沒有任何邏輯去修改這個角色的位置。
動畫
-像拍電影一樣把動作連起來-
說到這裡,我們引出了一個新的遊戲概念——動畫,那麼如何理解遊戲中的動畫?為什麼播放動畫不會修改玩家座標呢?
所謂動畫,其實就是角色行為的一種表現方式,和電影或者動漫一樣,將一個物件在一段時間內的動作記錄並播放,就是一個完整的動畫。遊戲中針對每個角色都需要美術去單獨的為其製作很多段動畫,匯入到遊戲引擎中進行混合與切換,最後實現遊戲中的效果。比如說,角色在跑步時有跑步的動畫,跳起來會有跳躍的動畫,戰鬥會播放戰鬥的動畫,這些都是不同的動畫片段,需要美術們去提前製作。
動畫其實也是分為2D動畫與3D動畫的,以前的遊戲都是2D遊戲,本質上和我們小時候看的小人書一樣,給一個角色建立多張圖片,每張上的圖片都有著不同的動作,將這些圖片連在一起播放就是一個2D動畫。
不過與2D動畫將每一幀的畫面記錄下來不同,3D動畫記錄的角色的3D座標資料。目前的3D動畫實現方式都是由骨骼+蒙皮來做的,也就是說其實我們的每一個角色身上會有一些骨骼,當我們執行某個動畫時對應的這些骨骼位置就會發生變化,然後再驅動這個骨骼的“蒙皮”(可以認為我們玩家的皮膚)變化。比如說,一個玩家把手舉起來的時候,我們手臂對應的骨骼就會動起來然後包裹著他外面的皮膚也會隨之移動,這樣你就能看到一個真正的動畫了。那麼為什麼他執行動畫的時候不會移動呢?因為所有的動畫預設都是相對他自身變化的,相對遊戲世界他就是原地靜止的。(其實也可以做到相對世界發生變化,這個概念叫RootMotion,在後面的文章裡面會進一步講解)
我們的角色在播放移動動畫的時候,其實就是一個迴圈的動畫,你可以看到這個角色的兩個腿在不停的走動,手臂也在不停的擺動,但是它只是在不斷的播放一個動畫。只要處理好動畫的開頭與結尾就能很好的表現出角色的移動。
移動
-有“人”暗中操作-
瞭解了動畫與移動的關係,我們現在就知道驅動角色移動的其實另有其人。不過這個“人”是誰呢?其實這個“人”是誰並不重要,任何一個能做這個工作的物件都可以成為這個“人”,你把它交給地上的一塊石頭去處理也是可以的。在程式碼裡面,我們可以隨意抽象出來一個“移動控制者”,他的工作就是控制角色如何在遊戲世界裡面移動。
現在假如我們給他一點點移動速度(比如每秒0.1m),如果這時候他的動畫時邁開步子瘋狂地跑的話,就會發現動畫與速度是不匹配的。同理,如果把動畫調成走路的樣子,而速度改為10m/秒,就會發現他一步還沒邁出去就已經滑到對面牆上了,這就是我們平時所說的滑步現象(不過沒這麼誇張),也是很多遊戲裡面看起表現很差的原因。只有將速度與動畫完全匹配,才能讓遊戲角色移動看起來非常自然。
當然,真實的情況可能要比這個還要複雜很多。我們的角色在一開始可能還正在緩慢的行走,不一會兒之後就突然開始加速跑了起來。為了模擬真實世界中的移動的樣子,我們需要對他的這個移動的過程要做各種精確的模擬,比如說行走、奔跑、甚至是游泳、飛行,不同的狀態需要以不同的方式去模擬。對於更加真實的遊戲,我們還應該把物理也考慮進去,重力、摩擦力、阻力等等都會影響角色的移動,不過任你怎麼複雜核心就是兩點——速度與加速度。一般來說,包含了上面這些邏輯的模組我們可以稱之為移動系統。同時,由於我們的速度發生變化,還需要動態的修改對應的動畫,這個匹配的處理以及播放的邏輯所在的模組我們稱為動畫系統。如果說,角色的移動是通過你的鍵盤按鍵觸發,那還會涉及到一個輸入系統,輸入系統會根據你的按鍵時長轉換成對應的移動速度或者是加速度,具體的轉換方式要看遊戲的設計邏輯。
到目前為止,如果你認識到了移動表現=動畫系統+移動系統,你已經基本理解了遊戲角色的移動原理了。現在,不妨再稍微擴充一些。一般美術在製作動畫時只會製作走路的動畫以及奔跑的動畫,他不會製作一個0.5/m的走路動畫然後又製作一個0.6m/s的走路動畫,如果每個速度都要做一個動畫的話美術肯定要累死。那遊戲中的玩家,在走路和奔跑切換時該怎麼處理呢?答案就是把奔跑動畫與行走動畫進行融合,根據速度的不同,去混合這兩種動畫,我們可以稱之為blend space,參考下面的圖片。
對於遊戲質量比較高的3A大作,他們的動畫遠遠不只這麼簡單,除了有基本的走的動畫,還有各種方向的轉身動畫,包括左轉和右轉,斜著轉,總之各個方向都有一個動畫,然後通過很多動畫的融合,才能達到一個非常流暢的一個表現效果。而且,移動系統的邏輯也需要模擬的非常精確,來和這些動畫達到完美的匹配。
移動同步
-告訴他你在哪-
最後,我們再來簡單談談移動的同步。當我們在玩網路遊戲時,你會在你的顯示器上面看到多個其他的玩家並且可以看到他們在移動,那這個過程中他是怎麼樣做的呢?這在遊戲設計中有一個專有名詞,叫做網路同步,網路同步是遊戲領域裡一塊非常重要也很複雜的一個功能。簡單來說,當其他玩家在移動的時候,他需要把他的座標實時的通過網路傳送到你的客戶端,你就可以看到他在你的客戶端上移動。在遊戲開發中,傳送的頻率,傳送的內容以及傳送方式的不同的都會影響到遊戲的具體表現,我在下一篇文章裡會詳細的分析虛幻引擎裡面的移動元件是如何處理的。
作者: Jerish
來源:遊戲開發那些事
原地址:https://mp.weixin.qq.com/s/UI7JPo4NYW58MTf5X9lgHg
相關文章
- 用 Pygame 使你的遊戲角色移動起來GAM遊戲
- 從多維度塑造角色,讓遊戲角色“活”起來遊戲
- SpringBoot是如何動起來的Spring Boot
- 遊戲中的角色運動問題遊戲
- 遊戲角色塑造:如何創造一個打動人心的角色遊戲
- 一個遊戲角色是如何誕生的——原畫篇遊戲
- 敘事:遊戲中角色與劇情的互動遊戲
- “S級>ABC級”是怎麼在遊戲動漫中興起的?遊戲
- 是什麼讓你做的小遊戲聽起來怪怪的?遊戲
- GIF 格式解析之表情包是如何動起來的
- 遊戲AI:AI的遊戲還是遊戲的未來遊戲AI
- 讓遊戲“活”起來! 一套框架搞定遊戲中的策略設計遊戲框架
- 在設計遊戲的時候,如何讓玩家跟遊戲中的角色產生情感上的聯絡?遊戲
- 遊戲中的“女神”角色都有哪些設計手法?遊戲
- 遊戲和CG裡的人物,都是怎麼動起來的(#2)遊戲
- 遊戲和CG裡的人物,都是怎麼動起來的呢?遊戲
- 互動內容是娛樂的未來,還是遊戲的“附庸”?遊戲
- 《Exploring in UE4》遊戲角色的移動原理(上)遊戲
- 《Exploring in UE4》遊戲角色的移動原理(下)遊戲
- 2d橫版自由射擊遊戲中的角色頭和武器跟隨滑鼠移動而旋轉是如何實現的?遊戲
- 【演算法】遊戲中的學習,使用c#物件導向特性控制遊戲角色移動演算法遊戲C#物件
- 03:遊戲主角動起來啦!#python遊戲開發#紅傘傘Python遊戲開發
- 如何讓Spring Boot 的配置動起來?Spring Boot
- 3A遊戲的必備工藝! 天美是如何將動作捕捉運用到遊戲中的?遊戲
- 小米遊戲聯動《迷你世界》的背後,是未來遊戲聯運的新玩法遊戲
- 使用 GAN 生成新的遊戲角色遊戲
- 遊戲中的故事元素是如何構建和展開的?遊戲
- 吸引玩家的非性感二字,遊戲中女角色,如何包裝才算成功?遊戲
- 遊戲的規則真的是封閉的嗎?說說遊戲中的“魔法圈”概念是如何施展“魔法”的遊戲
- 女朋友還是遊戲?一起來分析下游戲的開發與銷售情況遊戲
- 論一個遊戲角色是怎麼誕生的——原畫篇遊戲
- 古風遊戲角色的文化底蘊遊戲
- 博弈論是如何用於遊戲中的策略設計的?遊戲
- 動了寶可夢蛋糕?這款縫合怪遊戲撬動的是生存建造遊戲的新未來!遊戲
- RPG遊戲的地圖和場景是如何設計出來的?遊戲地圖
- 什麼型別是未來的方向呢?從梳理遊戲新分類談起型別遊戲
- 《隱形守護者》之後,那些火不起來的真人互動遊戲遊戲
- 來來來,今天教你-Java-是如何發起-http-請求的JavaHTTP