學(xué)習(xí)《GmaeFramework框架——FlappyBird》記錄
學(xué)習(xí)了自然妙有貓仙人(http://t.csdn.cn/DkLst)的FlappyBird基于GmaeFramework(https://github.com/EllanJiang/GameFramework)的教程受益很大。 現(xiàn)記錄一下學(xué)習(xí)過程中的思考。避免以后自己忘記了,后續(xù)再拿出來看看。其實寫的這些問題都是花了我很多時間的總結(jié)。(CSDN地址:http://t.csdn.cn/WiyPS)

我根據(jù)教程自己學(xué)著做了一個FlappyBird,新添加了一個暫停按鈕。
GitHub項目地址:https://github.com/LinYi6/GameFramework-My_FlappyBird
一、關(guān)于流程的一些記錄
GmaeFramework主要還是基于流程的,不同場景是對流程的切換,然后在流程里面實現(xiàn)功能。比如點擊開始游戲時從ProcedureMenu切換到ProcedureMain流程,游戲結(jié)束選擇返回主菜單時又從ProcedureMain切換到ProcedureMenu。這里有一點要注意,在出現(xiàn)游戲結(jié)束界面時,游戲還在ProcedureMain流程里,并沒有切換流程,我們可以看到游戲界面的背景和管道還在生成和運動。
所以當(dāng)小鳥死亡時,積分界面腳本收到小鳥死亡事件,然后它打開了游戲結(jié)束界面,此時積分界面的腳本會執(zhí)行OnPause(),會清除當(dāng)前積分,并更改顯示文本,同時OnPause()利用gameObject.SetActive(false);隱藏積分界面。
當(dāng)游戲結(jié)束界面選擇重新開始時,積分界面默認執(zhí)行OnResume(),利用gameObject.SetActive(true);顯示積分界面,ProcedureMain一直在執(zhí)行OnUpdate()里的東西。
當(dāng)在游戲結(jié)束界面選擇返回主菜單時ProcedureMain流程執(zhí)行了OnLeave(),把積分界面UI關(guān)閉了,切換至ProcedureMenu流程。
以上幾點值得注意。如果不清楚可以自己在疑惑的地方打Debug.Log(),看看輸出信息就知道其中執(zhí)行順序了。一開始可能感覺比較亂。
二、關(guān)于一些函數(shù)的提醒
在流程rocedureBase基類里有OnEnter()、OnInit()、OnOpen()、OnLeave()、OnUpdate()、OnDestroy()函數(shù)
在UIFormLogic基類里有 OnOpen()、 OnUpdate()、OnShow()、OnPause()、OnResume()、OnClose()函數(shù)
在EntityLogic基類里有OnHide()、OnUpdate()、OnHide()、OnShow()函數(shù)
這些函數(shù)得看看源代碼,里面有解釋,感覺會混淆,多用用,多體會體會
三、slider動態(tài)value值問題
slider這個滑條UI感覺比較坑。寫的函數(shù)需要用到value值時,我們在按鈕或滑條類想調(diào)用函數(shù)名時要先把腳本掛載到物體上,然后在UI的OnClick或OnValueChange處選擇掛載了腳本的物體,這樣就可以選擇函數(shù)名了。但是sliderUI需要注意,我們?nèi)绻胍@得滑動改變的value值并動態(tài)傳遞給函數(shù)里的value參數(shù)時,需要在sliderUI界面選擇dynamic 值的函數(shù)名。否則value傳參一直是固定的0,除非我們手動改。
例如:

比如下面這幾行代碼,我們想讓上面slider滑動時的值動態(tài)的傳遞給OnMusicButtonChange函數(shù)的value變量。
我們得先讓把上面代碼腳本掛載到SettingForm這個預(yù)制體上。然后在slider界面“值改變時”選擇這個預(yù)制體。

這樣我們就可以選擇這個OnMusicButtonChange函數(shù)了,但是一定要記得選上面的Dynamic float,不能選擇下面的Static Parameters,不然value值傳遞不到給OnMusicButtonChange,就是一個定值了!

四、圖層數(shù)值大小提醒
圖層的順序很重要,值越大,越靠前,大值圖層會覆蓋小值圖層。如果生成某個精靈看不到,有可能是圖層被覆蓋了,需要把它的圖層值改大一點。
五、背景音樂記錄
關(guān)于播放背景音樂這個事,是根據(jù)我們在Assets/GameMain/DataTables/配置的兩個數(shù)據(jù)表(Musicte.txt、Scene.txt)來的。我們發(fā)現(xiàn)他們對應(yīng)的編號和名稱都是保持一致的。因為方便下面切換流程代碼對編號的獲取來播放背景音樂。
Music.txt如下
Scene.txt如下
下面是\Assets\GameMain\Scripts\Procedure\Builtin\ProcedureChangeScene.cs里的代碼,我們主要看 m_BackgroundMusicId = drScene.BackgroundMusicId;這一句代碼,他表示通過場景來獲得背景音樂編號。
然后通過GameEntry.Sound.PlayMusic(m_BackgroundMusicId);
來播放對應(yīng)場景的對應(yīng)背景音樂的。
這樣我們就可以根據(jù)Music.txt和Scene.txt來放置不同場景下的音樂??蚣艹绦蜃詣訋臀覀儾シ帕?。如果不想播放可以查看音樂控制腳本:\Assets\GameMain\Scripts\Sound\SoundExtension.cs,里面有很多關(guān)于背景音樂的操作。
更多音樂音效的操作函數(shù),可以看Assets\GameFramework\Scripts\Runtime\Sound\SoundComponent.cs
六、在打包AB資源時出現(xiàn)的問題
在打包過程中,首先在AssetBundle Editor里左側(cè)AssetBundle List(0)下方選擇Add手動添加資源文件名。如果是有父級目錄的,需要用“/”來添加,比如UI/UIForms,這樣就會得到下面這個效果,同時要在UIForms前打勾再選擇Packed。

下圖給UIForms選擇了Packed。

其他同理直接點Add,輸入右側(cè)對應(yīng)的包名就行了。我們可以看到,左右兩側(cè)的List名稱是一樣的。添加好后再給左側(cè)每個包添加資源。選擇名稱一樣的,然后選擇“<<”箭頭就可以把右側(cè)的加到左側(cè)了。


添加完了直接Save就行,它會在Configs目錄下生成AssetBundleCollection.xml
這個文件。

還有個問題就是我遇到了,就是在AssetBundle Builder界面,我的電腦屏幕顯示界面不全,就像下面這樣。

解決方法是在\Assets\GameFramework\Scripts\Editor\AssetBundleBuilder\AssetBundleBuilder.cs,這個腳本第28行window.minSize = window.maxSize = new Vector2(666f, 570f);,直接修改new Vector2(666f, 700f)第二個參數(shù)就行。修改數(shù)值按自己電腦顯示為主,看得見就行 。下面是效果圖

終于可以了,設(shè)置好了上面的信息后,點擊Save,會生成AssetBundleBuilder.xml,然后我們點擊Start Build AssetBundles 慢慢等待就行了。生成完成后我們在StreamingAssets目錄會自動添加剛剛生成的AB包資源,StreamingAssets這是單機狀態(tài)下的資源目錄。
更改物體BuildIn下的編輯器資源模式的勾,運行成功就是成功打包了!


