2014年11月17日 星期一

開發日誌-0048 rollTurtle! prototype demo - Egg Collect System!


收集蛋的系統完成啦!
加上了收集蛋的效果之後再來看demo,
遊戲終於看起來愈來愈有趣了^^"

咦!
怎麼感覺跟上星期的網誌內容好像有複製貼上的既視感^^"
以上文字就是上星期網誌的開頭文字複製貼上,只是把星星改成蛋而已XD
但是開發過程就沒有這麼輕鬆了,
這個收集蛋並且跟隨角色移動的系統,
看起來很多遊戲都有用過,
應該是一個很簡單好做的效果!?
不過實際下去親自動手做,
才知道困難所在,

要實現"跟隨"的效果,
做法有很多種,
在實際動手之前,
我想到的有,

1.直接用constrain Attritube同步烏龜跟蛋的座標.
2.用粒子效果做殘影來模擬.
3.複製一份玩家的操作烏龜方式,delay個零點幾秒後在蛋上播放.
4.錄製烏龜的移動path,delay個零點幾秒後在蛋上播放

然後就開始嘗試實做。

1的話一試就知道不可能成立,
因為這樣蛋跟烏龜會變成同步更新座標,
不管做什麼都是同時行動,
不會有跟在後面的效果。

2的話其實其實粒子效果的原理是不斷發射粒子,粒子可以是任何圖像,
但是就算把粒子的速度設為0,
也不會有"跟隨"的感覺,
比較像是殘像或影身分,或是鋼彈F91或鋼彈OO發動Transom的那種效果。

3的話有個問題,
就是每一個蛋會變成一個獨立的可接收操作指令的個體,
理論上是可以實現效果,
但是會增加遊戲引擎很大的運算負擔。

最後就是用4的方式下去製作,
也就是錄製烏龜的移動path,delay個零點幾秒後分別在每個蛋上播放,
這個錄製path的做法,
也可以應用在賽車遊戲跑完一圈後重播畫面的應用,
或者是跟自己的幽靈車比賽之類的,
或是畫線再跟著畫的線移動,
或是憤怒鳥投射出去,下一次要再投射的時候會出現你上一次的軌跡等等。
算是蠻重要好用的一個技巧,
在不知道原理之前,覺得應該很困難,
實際動手完成之後覺得其實還好,並沒有想像中那麼困難。

在gamesalad裡要實現錄製物件path,
也是要運用到陣列的概念,所以首先就是要建立一個table來存放path。

裡面只需要有兩個欄位,分別是X與Y,屬性當然是要設定Real,才會把小數點也完整的紀錄下來.



接下來要做的就是當烏龜移動時不斷更新它的座標到0_path這個表格裡去。


接下來我搞了很久,
理論上來說,
每0秒就紀錄一次烏龜的座標是最好的,
因為table裡會獲得最多的座標,
播放的時候有愈多的座標就會愈接近原始的path,
但實際上是,
如果設成每0秒就紀錄一次座標,
在蛋物件重播的時候,
會發現雖然是一模一樣的重現path,
但是卻有很嚴重的抖動殘影!
應該是因為就算是每0秒就更新一次,
物件其實還是瞬間移動到每一個新座標的關係。

要移動的順暢,
就一定要適當的用Interpolate去做插值補間動畫,
視覺上才會有滑順的感覺,
這個也就一定要人工針對想要的效果去做調整,
最後我這邊是設定每1/4秒去紀錄一次座標,
然後在每個1/4秒之間用Interpolate去做Linear的線性動畫補間,
這樣不但能比每0秒就紀錄更新座標節省引擎資源,
而且加入補間動畫的移動效果非常好^^

在蛋裡面自訂一個delay的變數

這樣在每個蛋裡只要把delay訂為0、1、2
就可以達到共用一個蛋物件
卻分別延遲0秒、0.1秒、0.2秒去播放table紀錄的path的效果了.

這個小細節花了我非常多的時間修正,
上星期基本上每天都超時工作^^"
一度搞不定,
怎麼調都有很明顯的抖動(那個抖動不是我現在設計的蛋自己在活蹦亂跳的那種)與殘影,
心裡有個聲音想說放棄算了,
沒這個效果也不會怎麼樣,
但實際上明明是很重要的啊!
幸好堅持下去還是搞定了,
個人覺得一個遊戲是否好玩,
是否有樂趣其中一個很重要的因素就是不斷連鎖產生的快感,
1個蛋跟在身後,
2個蛋跟在身後,
3個蛋跟在身後,
快感是會逐漸累積的,
雖然只是一個個看似不起眼的效果,
但累積堆疊起來後就能獲得滿足與樂趣:)

最後一樣在放上這次的完整demo影片,
rollTurtle! prototype demo - Egg Collect System!


沒有留言:

張貼留言