2016年10月6日 星期四

Mirror Ground

準備做教學關卡,在場景設計上就只有天下第一武道大會那種感覺,但覺得不太適合這遊戲的世界觀,打算做點簡單但特別的感覺,想到的是在一個玻璃似的圓盤上打,並有倒影,光這樣應該就挺有感覺的。為這個找了很多,如下:

  • Unity本身的reflection probe,主要原理是在一個位置對上下左右前後拍照,做成貼圖,變成像skybox那樣,然後就設定反射材質作為反射的貼圖,但這個很難控制倒影的形狀位置,後來發現將拍照位置設在主攝影機與平面的鏡面對稱位置,不過以拍照的方式難免會被物件擋住,主攝影機看的到,但拍照的位置被擋住這就沒有意義了。
  • Screen space reflection,這看起來很好,不過實際試發現無法很完美的展現倒影,範例也都是像一般地板跟水面的倒影而已,不是鏡面那樣很清楚的感覺。這在unity的standard asset也有,網路上的資源也很多,但都沒辦法調到跟鏡面相同的感覺。
  • 最後終於找到適用的Realtime Reflections,很完美的鏡面感覺,不過不能透明化,所以只能做鏡子但不能做玻璃,然後無法有影子,還是有限制,至於理由沒有研究就不清楚,發現上述幾個似乎也是同樣限制。

最後效果如下:

上述的每一個效果,假如自己實作都是一個很好的課題,不過目前先以完成為目標。

Game Title with light shaft

遊戲的開頭畫面的概想是【主角望著遠方的景色,然後背面有敵人在覬覦】。當然重點就在於遠方的景色,光照非常重要,打算做的有兩個:

  • 太陽的光暈
  • 會動的光照效果,能想到的就是探照燈的感覺。

Unity雖然可以簡單的做到光照,但是只能在模型上表現,空無一物的地方就感覺不到有光(雖然現實也是如此,但現實世界中不會有一個地方真正空無一物),太陽的光暈,在unity是所謂的Light Flare,有很多現成的資源可以用,簡單加進光源就可以。探照燈比較麻煩,網路上查很多終於找到叫做Light Shaft這個東西,一樣簡單加在光源上就可以使用,但限制只能用在directional light 和spot light上,最後做出來個感覺就是下圖:

Input control and Animation system

之前說過unity的動畫系統相當好用,一般可以像flash般的方式製作動畫,而更重要的是動畫之間的轉換,例如走路動畫轉到跑步動畫,unity方便就在於,可以用圖形化的方式進行編輯,如下圖:

簡單來說就是可以藉由打勾某個標籤(如上就是),就能設定由哪個動畫變到哪個動畫,再搭配輸入按鍵,就可以做到基本的動作系統。這系統幾乎完整到讓人覺得只用這套系統就夠完成全部的動作系統,這樣就不用做例如說,假如現在是跳躍的動作,就不能攻擊這樣的程式。但實際上有兩個問題:

  • 不具即時性:基本上偵測輸入按鍵是在一個叫update的程式裡,也就是所有判斷都由這裡開始。但是動畫狀態的更新,並不是立刻變,所以沒辦法做按了跳躍就不能攻擊這樣的判定,因為雖然按了跳躍,但他還沒真的變成跳躍,所以只要按的夠快,還是會攻擊。具体原因,應該在unity的機制。
  • 輸入無法忽略:例如說跳躍時不能攻擊的話,即使在跳躍時按下攻擊,會判定現在是跳躍中,所以忽視這次的攻擊按鍵。但unity的話,雖然可以做到跳躍動作不能變成攻擊動畫,但那個輸入還是存在,所以會在跳躍完後又變成攻擊。

由以上的問題,就無法單純用unity的動作系統,做完所有邏輯,結果還是需要自己做一個動作系統,將邏輯跟顯示分開,unity的系統就單純用做動畫間的變化。

UI: Nonrectangular button

目前unity版本是5開頭,據說在4.6版本才導入新的UI系統,之前連基本的遮罩(mask),都必須自己寫script,現在就簡單加個元件就好,如下:

但是新UI系統還是不夠,沒辦法做到非矩形的按鈕,表現上是簡單用有透明的圖就可以,但問題是判定,會將透明的部份也當成可以按。目前沒看到內建的解決方法,所以需要script,在網上找到這個,簡單加到按鈕原件上就行,不過需要注意的是,必須將按鈕的圖做以下設定:

重點是'Advanced', 'Read/Write Enabled' 兩個,然後Script就是換算鼠標到貼圖的位置,然後判斷該點的透明度即可。

2016年5月15日 星期日

The Begining

半年前下定決心盡自己全力做一個遊戲,而且是要有世面上在販賣程度的水準。之所以要做到如此,是為了讓自己的作品擺脫只是已具備的技能所能做到的程度,昇華到自己心中真正期望的境界,這也是將來要在遊戲這條路走下去,我所認為必須跨越的目標。

自小偏好動作遊戲,所以目標也是動作遊戲。玩過的遊戲中,只以動作部分來說印象最深的是鬼武者的一閃,尤其是連鎖一閃的部分,鬼武者在連鎖一閃的方面總覺得不過癮,因此接下來的遊戲打算以這個為重心。要做一閃,關鍵會在觸發一閃條件的部分,而以我的遊戲更延伸為觸發連鎖一閃的部分。基本想法為一閃會產生爆炸,被炸到的敵人也會觸法一閃,如此連鎖反應,就可以連鎖一閃。

光是如此不夠,需要設計各種不同的一閃條件,可以想成攻擊敵人的弱點,例如火系敵人用水攻擊等等,如此包含屬性的攻擊,還可以設計屬性相剋。另外我也特別喜歡洛克人那種從敵人身上取得能力的設計,且從關於我轉生後變成史萊姆這檔事得到啟示:能力的混合,因此發想成由光的三原色組成的能力系統,紅綠藍分別代表不同能力,而混合顏色則可以成為更強的力量。然後顏色也可以設計成場景的依據,如此就可以做湖泊,火山,森林等等漂亮的場景。另外足夠成熟的遊戲還需要有完整的故事及吸引人的角色設定,這部分也在計畫中。

現在製作遊戲已經不用每樣都自己辛苦地寫程式,市面上有很多非常很棒的工具,特別是稱為遊戲引擎的工具,幾乎可以讓不懂程式的人也可以做出不錯的遊戲。更重要的是,有很多更深入的部分,完全自己寫的話非常困難,這導致要做出媲美市面上遊戲的品質的作品,需要大量的時間及很高的技能要求,但遊戲引擎把這部分簡化了,也把艱深難懂的部分內建,可以輕鬆設定就能做到,因此要做出炫麗的遊戲的門檻下降很多。

現在比較有名的引擎有unreal, cry engine, unity,其中unity在移動平臺領域很突出,而且也相當好入門,在這部分的工作機會也相當多,因此決定以此來開發。摸了段時間後,有幾項特點是以前只寫程式碼很難做到的部分:

  • 物理:遊戲中兩個物體互相碰撞,之後會如何運動這點其實相當難模擬,unity中其實只要指定這個物體有物理,給他個速度,之後的全部會自動計算,可以簡單達到非常自然的效果。
  • 動作系統:也就是人物的跑跳,攻擊等動作之間如何轉換的系統,unity可以簡單的像畫流程圖般的,以圖形介面製作,不僅操作方面,將來維護找問題很容易,這部分其實是最常修改且最難搞。
  • root motion:比較特殊的部分,以往在移動跑步這個動作,要做到步伐跟前進速度看起來一致很麻煩,尤其是前進速度會改變的時候。這系統可以套用美術人員做的動畫本身的移動距離,就可以讓美術調到滿意。
  • navigation:巡路系統,例如怎樣迷宮中找出口。直接製作場景,然後指定哪邊是用來計算可走區域的部分,就可以自動算出路徑。只要下指令說走到哪,就會避開障礙物走到目標點。
  • 粒子系統:製作場特效的系統,例如爆炸,煙火之類的。例如說煙火,其實就是從一個光點為基礎,根據時間射出不同顏色大小的光點,這在裡面只要簡單條一下參數就做得到。

到目前講的東西就可以做一個很不錯功能的遊戲了,但是視覺的品質還是要靠美術。目前自己也在學MAYA,自己做3D模型跟配上動畫等等,但畢竟美感這東西不是隨隨便便能有的,目前也向不少朋友求助。暫時算是自己能做表現概念的代用品,不過真的要夠品質還是需要專業的美術,這也是能不能到達販賣水準最重要的關鍵。目前也花了時間研究想要的一閃要做到的感覺,目標是如這連結鬼武者3プレイ動画 連鎖一閃。目前現在效果上還差很遠,不過算是已經有個雛形,如下: