🎋 竹子日誌

我學習程式的啟蒙

你是怎麼樣開始學習程式的呢?

我雖然是近年才開始轉職然後轉職軟體工程師,但啟蒙我學程式的概念其實是「魔獸爭霸3」的地圖製作編輯器。

眾所皆知,魔獸三國、信長等等經典大作是由魔獸爭霸強大的地圖編輯器做到的,有一些超乎常人的奇才用創意做到,超乎水準的遊戲設計、美術建模設計、程式觸發器設計等等能力組合才能夠完成這個曠世巨作。

當時,我花了很多時間研究那些花裡胡哨的技能是怎麼被研究出來的。

「跳斬」這招是怎麼被做出來的

舉例来說,很多遊戲都有的「跳斬」技能。你可能以為都有魔獸內部技能可以套用,事實上根本沒有這種東西,那它是怎麼被做出來的呢?

首先遊戲內有所謂的「空技能」,你可以自由定義那一招施展的距離、顯示技能範圍 UI、消耗、詠唱等等設定,但事實上沒有任何實質效果。所以我必須要在技能施展當下去播放我們常見的「大劍師」角色的「爆擊動畫」,並且精準計算動畫播放完的時間長度去移動角色到指定的攻擊目標。但如果你直接移動角色,角色是會「瞬間移動」的。在當時哪有什麼「移動過渡動畫」,那你只能採用「動畫原理」去播放它,每 0.16秒去移動一點點距離,連貫起來就變成移動的動畫,並且暫時賦予「飛行」並調整高度去產生出跳躍的錯覺感。最終,角色在到達目標點結束一連串的動畫,這時才會計算角色周圍的敵人碰撞值是否在範圍內,給予技能的打擊傷害。

做得出來還不是最難的,優化才是

只能做出炫泡的技能就好?其實實際做出來還不是最難的,還有優化問題。

當我完成各種酷炫的技能後,戰場的英雄打的非常精彩,正當你沉浸在成功的喜悅中,慢慢問題就產生了。遊戲運行了 1~2 小時後,慢慢會顯現出效能不良問題,所以是因為什麼呢?

一樣拿跳斬動畫來舉例,我每一次「移動角色」都需要建立一個 class 叫做「Point」,它有「 x 」、「 y 」兩個屬性可以把作戰單位放上去。我次施展跳斬時,每 0.16 秒都得建立一個 Point。如果場上有10 個會跳斬的英雄,平均每分鐘會施展 6 次,每次施展會建立90 個 Point,那一個小時會有 324,000 個 Point。對,聰明的你已經知道,要把它「Free」。但當時身為非相關科系的高中生怎會知道呢?這又不知道花多少時間研究了…

還有一堆眉角:存檔編碼、劇情演出、3D 建模

其實還有好多好多眉角…

包含存檔功能有編碼知識,還有各種程式計算和應用…

劇情動畫牽扯動畫演出,編劇、節奏…

角色美術還有 3D 建模問題,還要沿用既有角色的 Rig 去活動…

那真是一段有趣的回憶,當時朋友以為我設計遊戲只是打打嘴砲,但當我真的做出來看到他下巴掉下來的表情多有成就感!!!

你也玩過魔獸爭霸的地圖編輯器嗎?希望你也可以跟我分享一些回憶~~

留言