Related Posts Plugin for WordPress, Blogger...

7-5 Creating A Simple 2D Game For Reinforcement Learning (1)

接下來,我們要來製作一個簡單的2D動作遊戲,並使用強化學習來訓練AI。接下來我會用許多章節來說明如何製作一款2D動作遊戲,之後才會說明使用Unity ML-Agent的部分,如想直接知道強化學習的內容,請直接跳過這幾章唷!

好的,我在Asset Store上找到了一個免費的像素風素材-Sunny Land。我想這個免費資源非常適合當作我們初學的目標。

下載資源的網址:
https://assetstore.unity.com/packages/2d/characters/sunny-land-103349

原作者也有提供可遊玩的版本:

但由於Sunny Land沒有提供Unity的原始碼,所以我們需要自己撰寫相關的程式。

首先說明,為了使用Unity ML-Agent v0.4版,我使用Unity 2018.1.0f2來建置專案,建議大家選用高於2018的版本唷!從Asset Store下載Sunny Land後,Import進來。Import的都是美術資源,我們需要自己建立遊戲環境。

接著,在Scene視窗中,切換到2D模式。然後把資源內一個名為player-idle-1的Sprite拉到場景中,我們要使用他當作移動的角色。

新建一個Animator,名為Player。再新增三個Animation,名為Idle、Jump、Run。

回到剛剛在場景中建立的player-idle-1,替他新增一個Animator組件,並將Controller的部分設定為我們剛剛新增的Player。

打開Animator視窗進行編輯,點擊右鍵選擇Create State/Empty。

新增的State取名為Idle,Motion選擇剛剛建立的動畫Idle。

然後點選在Hierarchy的player-idle-1。

開啟Animation視窗,選擇編輯Idle。

然後,我們將角色有的四個Sprite都拉進Animation視窗中。

拉進去後,Animation視窗中的設定應如下圖,會顯示四張Sprite。

然後在Samples的設定,將60改為6。Samples是指一秒播放幾個影格,若一秒播放60個影格,那代表速度非常快,需要準備多張Sprite。但我們目前使用在Idle狀態的Sprite僅有四張,將Samples設為6,代表每個影格播放4/6秒。

這時,在Game視窗沒辦法看清楚我們的角色。

所以,請將Main Camera拉近,拉到可以看清楚角色的位置。

然後,記得在Idle動畫的設定中,將Loop Time打勾。此時,若你按下執行遊戲,人物應該就會有Idle動畫了。

接著,我們要新增Run,在Animator視窗中新增一個State。

取名為Run,並將Motion設定為Run。

然後在Idle按右鍵,選擇Make Transition。

建立一條Idle與Run之間的連結。

然後,到Animation視窗設定Run動畫。

將角色的Run的六張Sprite拉進Animation。

記得,Samples調低,我調為6。

然後將Run的Loop Time打勾。

在Animator視窗中,新增一個Parameters,我選擇Bool。

該Bool的名稱為Run。

接著點選Idle與Run之間的連結線,並在Inspector視窗中設定Condition,當Run變數為true時,狀態便會由Idle轉變為Run。

接著,同樣建立一條新的連結線,從Run連結到Idle。

然後Conditions設定Run為false。

執行遊戲試看看吧,這時候的角色是Idle狀態,確認動畫有正常執行。

然後將Animator的Run變數打勾。

然後,角色的動作從Idle變成Run啦!

下一章,我們接著做角色跳躍,還有程式控制的部分。

留言