るっちょ らいつ

るっちょ ぷれぜんつ 開発の日々。

Unity公式の機械学習ライブラリが公開されたので試す

概要

blogs.unity3d.com

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を読み込みましょう。これはあらかじめ用意されたサンプルシーンです。

 

f:id:ruccho:20170922200023j:plain

 

こんな感じのシーンが読み込まれます。

 

HierarchyからBall3DAcademy > Ball3DBrainのInspectorを開き、Type Of BrainをExternalにセットしてください。学習を有効にするために必要な設定です。

 

実際に学習を行うにはビルドする必要があります。

 

どういうことかというと、学習機能自体はこのプロジェクトには含まれておらず、ビルドしたのち外部ライブラリであるTensorFlowによって行われるようです。

 

f:id:ruccho:20170922200844p:plain

 

 ビルドする前に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週間ゲームジャム「夏」に参加した日記

 

1週間ゲームジャムとは、Unity製ゲームの投稿サイトunityroomが月イチで開催してるイベントで、月曜に発表されたお題に沿ったゲームを日曜までに制作し、投稿するものです。

 

第一回のお題「跳ねる」に始まり、第二回「転がる」、第三回「積む」、ときて今回第四回で発表されたテーマは「」でした。

 

んー夏か…夏に絡めたゲームアイデア…ん…?なんかこれデジャヴ…

 

そうでした。去年のUnityインターハイのテーマも「夏」だったのでした。(結局テーマこじつけになっちゃいましたが)

 

これまでの1週間ゲームジャムも参加はしたかったのですか時間が捻出できなかったり、アイデアがまとまらなかったりで指をくわえてみざるを得なかったのです。今回は時間があったのでとりあえず完成を目標に…

そんでもって月曜からあれこれ考えて…

夏らしい要素を主軸においてアイデアを出そうとするのはなかなか難しく、かといってとってつけたような夏要素にするのは心苦しかったのでだいぶ悩みました。

なんか最初はスイカを割らないように衝撃を避けながら運送するゲームみたいなのを考えてましたが夏である必然性が薄い。

既存の確立したゲーム性からいかに夏らしさを演出していけるか、みたいな方向性でスイカ割りシューティングというアイデアに落ち着きました。

プロジェクト作成ボタンを押したのは木曜のこと。

 んで、形から入ろうと思ってタイトルを最初に作りました。

スイカを降らせたあたりからこれは行けると思ってメイン画面の開発に着手。

 

ここから花火でスイカを打ち落とせるようになり…

 金曜

 

スイカが割れるようになったり割れたスイカを喰った数がスコアになったり

土曜

 

 細かい部分を整えて…

日曜

 

完成!

 

 

今回の学び

やりたいことを大まかに決めとくのは大事だけど、形から入って始めるとありえんくらい序盤の開発が捗る。雰囲気だけ出してスクショ撮ってTwitterに上げるだけでモチベが上がる。特に1週間という期限が「とにかくやれぃ!」と背中を押してくれる。ヘタクソな素材を描いても1週間で作ったから!と言える安心感もすごい。あと汚いコード書いても1週間経てばオサラバだしね()

 

自分もこんなスピードで開発したのは初めてです。1週間という期限と、それに向けて頑張る一体感が心地いいですね。 #unity1week タグをしょっちゅう見てました。

これは来月も参加不可避……!時間があればだけど

 

 

 

 

 

【1.7.2~1.10対応】MinecraftのMODをつくりたい第二回 ~環境構築②~

さて、環境構築編二回目です。

 

今回からはForgeの環境を整えていきます。

具体的には、

・Forge ソースコード類のダウンロード

・Forge ワークスペースの構築

IDEでインポート

になります。

 

Forgeダウンロード

続きを読む

【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と呼ばれるもの(JREJava Runtime Environment)はJavaでつくられたソフトウェアを実行するために必要なものですが、さらにJavaを使った開発にはJDKJava Development Kit)といわれるものが必要になります

早速インストールしましょう。まずはJDKのサイトに飛びます。

f:id:ruccho:20161129213759j:image

Javaのロゴのところを開きます。

 

f:id:ruccho:20161129171611j:plain

いくつかのバージョンの「Java SE Development Kit」の項目のうち、一番上のものを見てください。

f:id:ruccho:20161129171648j:plain

(8u11の部分はJavaのバージョンを示しているので、画像と異なるかも)

Oracle Binary Code License Agreement for Java SE」から利用規約を読み、「Accept License Agreement」にチェックをつけて同意します。それができたら下のリンク群から自分のパソコンに合う版を選びましょう。この記事ではWindowsで話を進めます。64bit(ほとんどの方はこちら)なら「x64」を、32bitなら「x86」です。(わからなかったらこちらからググって)

 

ダウンロードした「jdk-~~~-windows-~~~.exe」を開くとインストールが始まります。

f:id:ruccho:20161129172758j:plain

「次」

f:id:ruccho:20161129172821j:plain

!ここに記載されている「インストール先」をメモっておいてください!

「次」を押すとインストールが始まります…

f:id:ruccho:20161129173006j:plain

f:id:ruccho:20161129173032j:plain

「次」

f:id:ruccho:20161129173134j:plain

f:id:ruccho:20161129173149j:plain

「閉じる」で完了です。

 

2.Eclipseのインストール

Eclipseとは所謂IDE統合開発環境)で、プログラミングをする際に便利な機能を盛り込んだテキストエディタ…という説明で通しちゃいます。地道にメモ帳で書く手段もなくはないですが激しくお勧めしません。

また、Forgeが推奨しているIDEとしてもう一つIntelliJというものがありますがEclipseでいきます。IntelliJでも進められますが(筆者未検証)、後の手順が若干変わることを覚えておいてください。

 

Eclipseは日本語化されたバージョンをインストールしましょう。このサイトの上段にある「Pleiades All in One」をダウンロードします。バージョンの一番新しいものをクリックしましょう。

Eclipse 日本語化 | MergeDoc Project

 

f:id:ruccho:20161129183040j:image

 

Java」の「Full Edition」を選択します。64bitか32bitかについては前述の通りです。ダウンロードしたzipを解凍して任意の場所に配置しましょう。どこでも構いませんが、プログラミングの基本として、(フル)パスに日本語が入らない場所が理想です。

できましたら、その中のeclipse.exeから起動できます。その前にデスクトップにショートカットを作っておくことを勧めます。

 

起動時に、「ワークスペース」設定のダイアログが現れます。EclipseをMOD開発のみに使う方にはあまり関係ありませんが、私の場合は「C:/Users/<ユーザー名>/workspace」にしました。

 

Eclipseがうまく起動しましたか?

長いのでここで一回切ります。次回はForgeの設定を行なっていきます。

 

【1.7.2~1.10対応】MinecraftのMODをつくりたい第二回 ~環境構築②~ - るっちょ らいつ

 

【Unity】uGUIテキストを簡単にローカライズする

はじめに

ローカライズ手法といえば、おそらく言語ごとの設定ファイルを別で作成するというのが主流なのでしょうが、多くのテキストとの対応関係を整理して把握しきるのは大変です。特に個人開発者にとっては、あまりシステム化されていなくても手早く実装できる手段が必要なこともあるでしょう。

イメージ

  1. スクリプトTextLocalizerを作成する
  2. uGUIのTextがアタッチされているGameObjectにTextLocalizerをアタッチする
  3. Inspectorから各種言語を設定する
  4. 反映される

実装

続きを読む

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」という作品です。

Unityインターハイ2016

 

これまで数年開発やってきて、初めてアプリをストアに公開。感慨深いものがありますな。

 

アプリ開発してる人なら知ってる方も多いと思いますが、iOSアプリをAppStoreに公開するというのは大変なことなのです。年間1万強払って開発者登録しないといけない。個人で年間それくらいの収益出すのって結構大変だよね僕学生ですし

しかも開発者登録を更新しなければ自分のアプリはストアから消えてしまう。友人はこれを「年貢制」と呼んでいましたがまさにその通り

 

対してPlayストアは色々と楽。開発者登録料は安い上に払い切り、アプリ審査も瞬時に通る。AppStoreに出せばより多くのユーザーの目に触れるとは思いますがまずはPlayストアの方からやって行くことにしました。

 

と、意気込んで公開したアプリ。

 

…公開から5日。

インストール8件

 

……まあ、知ってた。

(個人公開の相場から見たらもしかして多い方なのかな?という気もしないではないが)

 

これはあれだな、ゆーつーばーに憧れちゃったちびっ子が思い上がって動画投稿しちゃったのと同じ現象だよね。いいんです。気を強く持ちましょう。Unityインターハイのネームバリューを信じることにします。

 

あー、だれか受賞作品紹介とか言って宣伝してくんないかしら(超他力本願)

自力で宣伝しろ💢

 

気になった人はインストールしてみてね(仏の笑み)↓