發表文章

Related Posts Plugin for WordPress, Blogger...

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

圖片
今天終於要進入訓練的階段啦,這篇文章特別長唷。首先,建立一個如下圖的簡單的訓練場景。 本次主要訓練的目標:學會『跳過平台』。 所以大家會看到這個訓練場景就只有一個台階,讓AI學會跳躍以後,再放到更複雜的場景中測試。 如不懂該如何建立上述的場景,請自行參考前四篇文章唷: https://3dactionrpg.blogspot.com/2018/07/7-5-creating-simple-2d-game-for.html https://3dactionrpg.blogspot.com/2018/07/7-6-7-5-creating-simple-2d-game-for.html https://3dactionrpg.blogspot.com/2018/07/7-7-creating-simple-2d-game-for.html https://3dactionrpg.blogspot.com/2018/07/7-8-creating-simple-2d-game-for.html 接下來,要在專案內匯入ML-Agents相關的程式,可以到Github上下載,並確認至少包含『Editor』、『Plugins』、『Scripts』資料夾。 Github網址: https://github.com/Unity-Technologies/ml-agents 設置TensorFlowSharp插件 接著,需要安裝TensorFlowSharp才能使用Internal Brain模式。請到此網址下載: https://s3.amazonaws.com/unity-ml-agents/0.3/TFSharpPlugin.unitypackage 下載完後,請自行匯入到Unity。 匯入後可能遇到的錯誤 假如遇到類似下圖的錯誤訊息:The type or namespace name `Google' could not be found. Are you missing an assembly reference? 請到Player Setting內,將Scripting Runtime Version設定為.NET 4.x Equivalent唷,修改設定後,Unity會自動要求重新啟動。 然後也

7-8 Creating A Simple 2D Game For Reinforcement Learning (4)

圖片
今天要來介紹Unity的TileMap這套工具,在此之前,我將Unity的版本升級到2018.1.8f1,我之前用的Unity版本中的TileMap有Bug,所以無法使用。 首先,我新增了兩個資料夾,分別是『TileAsset』、『TilePalette』,『TilePalette』是用來儲存TileMap產生的存檔文件,而TileMap會將原始的2D Sprite另存成Asset檔案,所以這些Asset檔案要放在『TileAsset』。 使用這兩個資料夾名稱只是為了方便分類,並不一定要使用跟我相同的名稱。 然後我將場景中的地板都刪掉了,只留下背景。 開始使用TileMap  接著在Hierarchy中點右鍵,選擇2D Object/Tilemap。 這時,場景中會出現一個物件名為Grid,底下還有一個物件名為Tilemap。 接著,選擇Window/Tile Palette,開啟繪製Tilemap的視窗。 視窗如下圖,請選擇Create New Palette,我的名稱取為GroundTile,因為這個Palette是要用來繪製地面的。Grid與Cell Size的設定維持不變。 然後會跳出存檔訊息,這邊就選擇資料夾『TilePalette』吧。 接著最重要的一點,就是要把切割好的2D Sprite拉進Palette中,如下圖那樣操作。 然後會問你要在哪邊存檔?這邊是儲存Palette需要使用的Asset檔案。 接著Unity會進行處理,如下圖正在產生128個Asset檔案,這是因為我們的2D Sprite就是切割成128塊。 儲存好以後,應該就能在Tile Palette中看見如下圖的景象。如果你看不見任何圖樣的話,你有可能也使用了有Bug的Unity版本。接著選擇其中一個想要繪製的圖案,然後再選擇第三個畫筆功能。 在場景中會出現很多格子,接著請你畫上去吧,但是你會發現怎麼圖案那麼小,格子那麼大! 請點選你使用的2D Sprite檔案,在Inspector視窗中可以看見Pixels Per Unit選項,預設為100。由於我的圖案是用16x16像素繪製的,如果使用預設值100的話,就會在旁邊產生許多空白的部分。 所以這邊要將數值調整為16,