Unity公式の機械学習ライブラリが公開されたので試す
概要
Unity上で機械学習ができるライブラリが公式より発表されたみたいです。
記事を読んでみると、
・多くの自律エージェントが互いに作用する世界でのエージェントのふるまいをシミュレーションできる(漠然としてるけど行動学とかそのへんかしら)
・車の自動運転技術など産業用アプリケーションに関する研究を物理の効いたUnityの世界で実行できる
・自律的な思考を持つAIプレイヤーをゲームに導入できる
みたいなことが書いてあります。以前からUnityはゲーム以外の学術方面での利用も推し進めてるようですが、やっぱり気になるのは開発するゲームに訓練されたAIプレイヤーを導入できることでしょうか。
ゲームでの機械学習というと、DeepMindのDeep Q-Networkなんかが有名ですが、このライブラリでもDQNが利用できるみたいです。
Unity Machine Learning - Reinforcement Learning Demo
実際に試す
GitHubに必要なファイルがあるので、CloneするなりDownload Zipするなりします。
まだベータ版ですので扱いにはお気を付けください。
Unityは2017.1以上のバージョンが必要です。
Unity Editorでml-agent/unity-environmentを開いて、Assets/ML-Agents/Examples/3DBall内のSceneを読み込みましょう。これはあらかじめ用意されたサンプルシーンです。
こんな感じのシーンが読み込まれます。
HierarchyからBall3DAcademy > Ball3DBrainのInspectorを開き、Type Of BrainをExternalにセットしてください。学習を有効にするために必要な設定です。
実際に学習を行うにはビルドする必要があります。
どういうことかというと、学習機能自体はこのプロジェクトには含まれておらず、ビルドしたのち外部ライブラリであるTensorFlowによって行われるようです。
ビルドする前にPlayer SettingsからRun in Backgroundにチェックを入れ、Display Resolution Dialogのチェックを外しておきます。
ビルドはダウンロードしたルートフォルダの中のpythonフォルダに保存します。
ではビルドも済みましたし実際に学習……と行きたいところですが、そのまえにpythonの学習環境を整える必要があります。
Pythonの設定
まずはPythonをインストールします。ドキュメンテーションにはPython2.7でもPython3でもいけるとありますがTensorflowはWindowsではPython3系でしか動かないようなのでこちらをインストールします。(Macでは2.7系でもうごくっぽいですが未検証)
Python Release Python 3.6.2 | Python.org
インストールが済んだらコマンドプロンプトからpython --versionを入れてPython3系がインストールされてることを確認しましょう。
では設定に移ります。先ほどビルドを展開したpythonフォルダに移動し、
pip3 install .
を入力すると自動で必要なパッケージ類をインストールしてくれます。
学習
インストールが済んだらいよいよ学習を始めていきます。
pythonフォルダーで jupyter notebook を入力してjupyterを立ち上げます。
ブラウザから localhost:8888 にアクセスし、 PPO.ipynb を開いて Hyparameters セクションの env_name にビルドしたバイナリの名前(拡張子抜き)をセットします。
また、デフォルトでは訓練を 5e5(50万)回行う設定になってますが、筆者のPCは貧弱なのでこれを減らしておきます。
Hyparameters セクションの max_steps を5e4に変更します。
一番トップのコードのセクションにフォーカス(青カーソルが出る)を合わせ、 Run をカチカチと押してすべてのコードを実行していきますと、ビルドした実行ファイルが立ち上がり、学習が始まっていきます。
しばらく放置すると Train the Agents セクションに学習してるログが吐かれます。
Mean Reward: 9.350500454959013
Mean Reward: 76.65897435897344
Mean Reward: 88.24444444444323
Mean Reward: 56.52788461538383
Mean Reward: 54.5907834101375
Saved Model
こんな感じで続いていき、学習が終了するとビルドしたアプリケーションが終了します。
python/models/ppo/<バイナリ名>.bytes
があることを確認してください。これが学習データです。こいつをExamples\3DBall\TFModelsに移動しておきます。
学習した結果を確認する
こんな感じで学習が終了したので、こんどはこれをUnity Editorに読み込んで結果を確認してみます。
もう一度さっきのプロジェクトを開きます。
まず、TensorFlowSharpのunitypackage をプロジェクトに追加します。
Player Settings で Other Settings から、
1) Scripting Runtime Version
を Experimental (.NET 4.6 Equivalent)
にセット
2) Scripting Defined Symbols に ENABLE_TENSORFLOW を追加
したのち、一度Editorを再起動します。
3DBall のSceneを読み込んで、最初に設定したBall3DBrainのInspectorを開きます。
Type Of BrainをInternalにセットし、Graph Modelに先ほど移動したbytesファイルをセットします。
Graph PlaceholdersのSizeを1にセットし、
Name : epsilon
Value Type : Floating Point
Min Value : 0
Max Value : 0
に設定します。
ではいよいよPlayしてみましょう。板がボールを落とさぬよう勝手に傾きを調整しています。
感想
とりあえずWikiのまんまに一通り試してみましたが、数多ある機械学習ライブラリとそのサンプルの中では圧倒的に手軽にすごいことが試せますね。(どこでもMNISTしかやらないから)
これがUnityという強力なプラットフォームで実現可能になった効果は大きいと思います。カスタムのプロジェクトでのML-Agentsの導入方法についてもWikiにあるのでまだまだいろいろなことが試せそうで夢がひろがりんぐしてます
Unity1週間ゲームジャム「夏」に参加した日記
#unity1week 公開されました!降り注ぐ花火を撃ち落とし、もれなく喰らい尽くす「夏降る惑星」が出来上がりました。4日間の産物なので大目に見てねhttps://t.co/pXmrxkUTIc pic.twitter.com/TSG9FKmrI5
— るっちょ ぷれぜんつ(開発) (@ruccho_presents) 2017年7月30日
1週間ゲームジャムとは、Unity製ゲームの投稿サイトunityroomが月イチで開催してるイベントで、月曜に発表されたお題に沿ったゲームを日曜までに制作し、投稿するものです。
第一回のお題「跳ねる」に始まり、第二回「転がる」、第三回「積む」、ときて今回第四回で発表されたテーマは「夏」でした。
んー夏か…夏に絡めたゲームアイデア…ん…?なんかこれデジャヴ…
そうでした。去年のUnityインターハイのテーマも「夏」だったのでした。(結局テーマこじつけになっちゃいましたが)
これまでの1週間ゲームジャムも参加はしたかったのですか時間が捻出できなかったり、アイデアがまとまらなかったりで指をくわえてみざるを得なかったのです。今回は時間があったのでとりあえず完成を目標に…
そんでもって月曜からあれこれ考えて…
夏らしい要素を主軸においてアイデアを出そうとするのはなかなか難しく、かといってとってつけたような夏要素にするのは心苦しかったのでだいぶ悩みました。
なんか最初はスイカを割らないように衝撃を避けながら運送するゲームみたいなのを考えてましたが夏である必然性が薄い。
既存の確立したゲーム性からいかに夏らしさを演出していけるか、みたいな方向性でスイカ割りシューティングというアイデアに落ち着きました。
プロジェクト作成ボタンを押したのは木曜のこと。
んで、形から入ろうと思ってタイトルを最初に作りました。
カオスゲーができそうな予感 #unity1week pic.twitter.com/md1i3a8GIM
— るっちょべくた (@ruccho_vector) 2017年7月27日
スイカを降らせたあたりからこれは行けると思ってメイン画面の開発に着手。
増す謎度 #unity1week pic.twitter.com/0c5edmhEwS
— るっちょべくた (@ruccho_vector) 2017年7月27日
ここから花火でスイカを打ち落とせるようになり…
中身の実装にはいった シューティングとアクションを両手で同時にやるようになる予定 シューティング部分の実装が大体おしまい #unity1week pic.twitter.com/6zPTzjqdXw
— るっちょべくた (@ruccho_vector) 2017年7月27日
金曜
スイカが割れるようになったり割れたスイカを喰った数がスコアになったり
#unity1week 進捗 pic.twitter.com/jgaxEeH8Ap
— るっちょ ぷれぜんつ(開発) (@ruccho_presents) 2017年7月28日
土曜
細かい部分を整えて…
#unity1week レベルアップとかスコアとかランキングとか ゲームとしての基本サイクルができあがった pic.twitter.com/SjUbdQsfcS
— るっちょ ぷれぜんつ(開発) (@ruccho_presents) 2017年7月29日
日曜
完成!
#unity1week 公開されました!降り注ぐ花火を撃ち落とし、もれなく喰らい尽くす「夏降る惑星」が出来上がりました。4日間の産物なので大目に見てねhttps://t.co/pXmrxkUTIc pic.twitter.com/TSG9FKmrI5
— るっちょ ぷれぜんつ(開発) (@ruccho_presents) 2017年7月30日
今回の学び
やりたいことを大まかに決めとくのは大事だけど、形から入って始めるとありえんくらい序盤の開発が捗る。雰囲気だけ出してスクショ撮ってTwitterに上げるだけでモチベが上がる。特に1週間という期限が「とにかくやれぃ!」と背中を押してくれる。ヘタクソな素材を描いても1週間で作ったから!と言える安心感もすごい。あと汚いコード書いても1週間経てばオサラバだしね()
自分もこんなスピードで開発したのは初めてです。1週間という期限と、それに向けて頑張る一体感が心地いいですね。 #unity1week タグをしょっちゅう見てました。
これは来月も参加不可避……!時間があればだけど
【1.7.2~1.10対応】MinecraftのMODをつくりたい第一回 ~環境構築①~
こんにちは。
題の通りやります。まずは開発環境の構築。
大まかに手順を言うと、……
1.JDKのインストール
2.Eclipseのインストール
3.Forgeのソースをダウンロード
4.ソースを準備
ForgeというのはMODで遊んでいる方ならほぼお分かりだと思いますが、ほとんどのMODを導入する際に前提として導入するMODのことですよね。Forgeの機能を利用するとMOD制作が大変容易になるのです。いまのMOD制作はこのForgeを利用するのが主流なのです。
早速やっていきます。
1.JDKのインストール
MinecraftやForgeはJavaと呼ばれるもので開発されており、MODもまたJavaを使って開発します。え?JavaならMinecraftと一緒にインストールした?実は、一般にJavaと呼ばれるもの(JRE、Java Runtime Environment)はJavaでつくられたソフトウェアを実行するために必要なものですが、さらにJavaを使った開発にはJDK(Java Development Kit)といわれるものが必要になります。
早速インストールしましょう。まずはJDKのサイトに飛びます。
Javaのロゴのところを開きます。
いくつかのバージョンの「Java SE Development Kit」の項目のうち、一番上のものを見てください。
(8u11の部分はJavaのバージョンを示しているので、画像と異なるかも)
「Oracle Binary Code License Agreement for Java SE」から利用規約を読み、「Accept License Agreement」にチェックをつけて同意します。それができたら下のリンク群から自分のパソコンに合う版を選びましょう。この記事ではWindowsで話を進めます。64bit(ほとんどの方はこちら)なら「x64」を、32bitなら「x86」です。(わからなかったらこちらからググって)
ダウンロードした「jdk-~~~-windows-~~~.exe」を開くとインストールが始まります。
「次」
!ここに記載されている「インストール先」をメモっておいてください!
「次」を押すとインストールが始まります…
「次」
「閉じる」で完了です。
2.Eclipseのインストール
Eclipseとは所謂IDE(統合開発環境)で、プログラミングをする際に便利な機能を盛り込んだテキストエディタ…という説明で通しちゃいます。地道にメモ帳で書く手段もなくはないですが激しくお勧めしません。
また、Forgeが推奨しているIDEとしてもう一つIntelliJというものがありますがEclipseでいきます。IntelliJでも進められますが(筆者未検証)、後の手順が若干変わることを覚えておいてください。
Eclipseは日本語化されたバージョンをインストールしましょう。このサイトの上段にある「Pleiades All in One」をダウンロードします。バージョンの一番新しいものをクリックしましょう。
Eclipse 日本語化 | MergeDoc Project
「Java」の「Full Edition」を選択します。64bitか32bitかについては前述の通りです。ダウンロードしたzipを解凍して任意の場所に配置しましょう。どこでも構いませんが、プログラミングの基本として、(フル)パスに日本語が入らない場所が理想です。
できましたら、その中のeclipse.exeから起動できます。その前にデスクトップにショートカットを作っておくことを勧めます。
起動時に、「ワークスペース」設定のダイアログが現れます。EclipseをMOD開発のみに使う方にはあまり関係ありませんが、私の場合は「C:/Users/<ユーザー名>/workspace」にしました。
Eclipseがうまく起動しましたか?
長いのでここで一回切ります。次回はForgeの設定を行なっていきます。
【1.7.2~1.10対応】MinecraftのMODをつくりたい第二回 ~環境構築②~ - るっちょ らいつ
Android StudioでUnityプラグインを作(りたか)った
見出しでお察しかもしれませんが、うまくいかなかったという話です。
私の制作しているゲームで、Androidネイティブ連携の実装が必要になりました。「URLスキーム」と言うものを付けるためです。(そのアプリ固有のプロトコル文字列を持つURLを開くことでそのアプリに遷移させる仕組み)
基本的にはこちらのサイトを参考にやっていこうと思いました。
[Unity][Android] カスタムURLスキームを使ってアプリを起動する(Unity Android編) : West Hill 開発メモ
時代はいつの間にかeclipseではなくAndroid Studioに移ってるみたいなので、せっかくなのでそっちでやってみたいと思います。
どうやら、Android StudioでビルドしたjarをUnityに突っ込めばいいらしいです。
そこで今度はこちらのサイトを参考に。Android Studioのプラグインビルドの情報が少ないので大変ありがたいです。
【Unity-Android 】 (1) Android StudioでUnity向けにmoduleを作る方法 - Cross Road
うーん、Android Studioなかなか扱い慣れない…コンパイルエラーが出ましたね。
Gradleが「JDKにtools.jarがありません」って言ってるらしい。エクスプローラーから探して見ても確かにない。ググってもあまり情報がない…再インストールしてもやっぱりない。
どうしよう💦
つづく かもしれない
Unityインターハイ2016で賞もらったのでストアに上げた話
こんにちは。るっちょと申します。趣味でプログラミングやってる学生です。
作ったゲームでUnityインターハイという大会に出場したら賞をいただいたのでそれをストアに公開した話です。ここまで言うと素性がバレちまいそうだがこの際バラしてくスタイルで。「Cir」という作品です。
回転パズル Cir
— るっちょべくた(テスト期間) (@ruccho_vector) 2016年10月6日
「シンプルで奥深い」ことと「長く楽しめる」ことが特徴のパズルゲーム。気になった方は是非とも!(Android)https://t.co/BnkXKULHDH pic.twitter.com/ZFQMIb5kbZ
これまで数年開発やってきて、初めてアプリをストアに公開。感慨深いものがありますな。
アプリ開発してる人なら知ってる方も多いと思いますが、iOSアプリをAppStoreに公開するというのは大変なことなのです。年間1万強払って開発者登録しないといけない。個人で年間それくらいの収益出すのって結構大変だよね僕学生ですし
しかも開発者登録を更新しなければ自分のアプリはストアから消えてしまう。友人はこれを「年貢制」と呼んでいましたがまさにその通り
対してPlayストアは色々と楽。開発者登録料は安い上に払い切り、アプリ審査も瞬時に通る。AppStoreに出せばより多くのユーザーの目に触れるとは思いますがまずはPlayストアの方からやって行くことにしました。
と、意気込んで公開したアプリ。
…公開から5日。
インストール8件。
……まあ、知ってた。
(個人公開の相場から見たらもしかして多い方なのかな?という気もしないではないが)
これはあれだな、ゆーつーばーに憧れちゃったちびっ子が思い上がって動画投稿しちゃったのと同じ現象だよね。いいんです。気を強く持ちましょう。Unityインターハイのネームバリューを信じることにします。
あー、だれか受賞作品紹介とか言って宣伝してくんないかしら(超他力本願)
自力で宣伝しろ💢
気になった人はインストールしてみてね(仏の笑み)↓
祝!Playストア公開!Androidの方は是非ともDLよろ!https://t.co/BnkXKULHDH
— るっちょべくた(テスト期間) (@ruccho_vector) 2016年10月6日