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就是換算鼠標到貼圖的位置,然後判斷該點的透明度即可。