2015年6月16日星期二

用uFrame寫Flappy Bird(一)簡介

前言

事源是小弟想寫遊戲但沒有相關經驗,雖然FYP是用Unity3D, 但是其實只是做Leap Motion的研究,不算是做遊戲。然後開始在網上尋找一些寫遊戲的結構,框架之類,希望方便自己寫遊戲。研究過MVC模式,但小弟不才,還是覺得有點困難。然後在Asset Store發現一個不錯的可視化插件做遊戲開發框架 - uFrame;然後見youtbue也有一些教學片,最後決定買下來試試看。順帶一提,uFrame是用MVVM模式的,而小弟正在用uFrame 1.51r2 version。

uFrame是甚麽?

這是從Unity Asset Store抓下去的簡介(網絡中文翻譯版):
「uFrame是最先進的遊戲開發框架設計給甚至新手開發人員工作的一個專業級圖形工具。強大的行為系統和一個強大的設計模型專門為Unity引擎開發遊戲,你會比以往開發的更快!

使用uFrame你可以比以前更好,更穩定的開發維護你的遊戲。

你有沒有為開發一個項目因為一個小的變化就改很長時間而頭疼?如果是這樣的話,uframe是你的完美解決方案!開始像現在這樣專業級開發遊戲吧!」

uFrame初探

因為看到uFrame官方有出用uFrame寫Flappy Bird的教學片,所以打算跟一下做,因為教學片是用uFrame 1.4而小弟是用uFrame 1.5,當中涉及了一些更新,導致過程略有不同,這在之後的系列文章再講述,這篇先為大家簡介一下MVVM模式:

(其實uFrame有介紹:https://github.com/InvertGames/uFrame/wiki/Core-Concepts,不過是英文版,如果大家不太想看英文的話可以看看小弟不負責任也不全面的中文)

在Unity傳統的開發環境,就算一個細小的專案有時也會變成難以管理。透過uFrame,我們可以通過分開不同的遊戲邏輯或元素在不同分類,好好管理我們不斷成長的專案的遊戲邏輯。打個比喻,在遊戲裏的「玩家」(Player),在uFrame裏會變成這樣:



ViewModel: 你遊戲世界的物件(object), 負責儲存物件的數據,好像血量,金錢,經驗值之類
Controller: 處理各種遊戲邏輯和指令,例如圖中的AddHealth() (加血), RemoveCoins() (遇到甚麼事要扣錢)和AddXP() (升經驗)等
View: 處理物件的視覺/音訊(總是是你看到或聽到的東西),連結ViewModel和物件的的視覺/音訊表現

ViewModel和Controller是在「後台」,它們只處理各種邏輯,不用知道的遊戲場景在幹甚麽。View就是你遊戲裏看到或聽到的東西,它必需連結你的遊戲世界和數據,這是uFrame重要的概念:

到底ViewModel, Controller和View如何合作?



流程試範
1. GameView: 按下 UI Button, 呼叫ExecutePlay()
2. GameViewModel: 發現ExecutePlay()被呼叫,問GameConroller想幹甚麽
3. GameController: 使用Play(gameViewModel) 指令,這指令可能是:

i. 去新場景
ii. 執行其他指令
iii. 做新敵人,然後加進遊戲裏
iv. 修改遊戲中某ViewModel的狀態(例如你的狀態從死裏復活)
v. 連結去小弟的日誌(默默拖走

4. GameController: 完成指令,其實沒甚麼幹了,ViewModel裏的狀態可能會變,或是複製吧



小結

這回是這樣,下面有一些有用的連結力家可以去看看,下回開始用寫Flapper Bird去講解uFrame的結構和運作。以上內容如有甚麽眼殘請原諒 XD

題外話:買了uFrame後可加入uFrame的Slack 群組,裏頭有不少好人高手會用心解答你的問題,小弟也是裏頭的問題少年~


小弟使用uFrame的環境(左面為uFrame介面):







3 則留言: