Anjin v1.3で追加された機能を使って、スマートフォンゲームによくあるアウトゲームのチュートリアル(次に押せるボタンが限定される系)を自動で突破するオートパイロット設定の方法を紹介します。
Anjinパッケージのインストール
Anjinパッケージ(com.dena.anjin)は、株式会社ディー・エヌ・エーが開発・OSSとして公開しているUnity向けオートパイロットフレームワークです*1。 Unityエディタ上で動作させることを前提とし、また基本的な設定をすべてUnityエディタ上で完結できます。 本記事の事例もノーコードです。
パッケージのインストールは、openupm-cli を使用して次のコマンドで行なうのが簡単です。
openupm add com.dena.anjin
Package Managerウィンドウによるインストール方法は、リポジトリのREADMEを参照してください。
インストールしたら、.gitignoreなどで次のパスをトラッキングしないよう設定しておきましょう。
/Assets/AutopilotState.asset*
チュートリアルを突破するオートパイロット設定
最小構成として、Agentの設定を2つと、それを統括するオートパイロット設定を作成します。
uGUI Monkey Agentの設定
uGUI Monkey Agentは、uGUIで構築されたUI画面をでたらめに操作する、いわゆるモンキーテストを行なうためのAgentです。 本記事ではこれをチュートリアルの操作に利用します。チュートリアル中、ユーザが実際に操作可能なUI要素以外はブロックされているのであれば、「操作できるものを操作する」だけでチュートリアルは進行するはずです*2。
Projectウィンドウで右クリック > Create > Anjin > uGUI Monkey Agent でAgent設定ファイルが作られます。 これをInspectorウィンドウで開き、動作設定を行ないます。
細かくは適用するプロジェクトによりますが、Lifespacn Sec
は0以外*3、チュートリアルを突破できるまでの時間を余裕を持って指定します。
また Secs Searching Components
には、操作できるUI要素が1つもない時間を何秒検出したらエラー(進行不能)と判断するかを指定します。スキップできないムービー再生や演出がある場合は考慮が必要です。
なお、MonkeyAgentに操作されたくないUI要素*4がある場合は、IgnoreUGUIMonkey
コンポーネントを追加することで操作を避けることができます。
Time Bomb Agentの設定
Time Bomb(時限爆弾)Agentは、Anjin v1.3で追加されたAgentです。 別のAgentを内包して動作させ、そのAgentが動作を終えるまでに指定した「解除メッセージ」がログ出力されなければエラー終了するAgentです。
Projectウィンドウで右クリック > Create > Anjin > Time Bomb Agent でAgent設定ファイルが作られます。 これをInspectorウィンドウで開き、動作設定を行ないます。
Agent
には、先に作ったMonkey Agentの設定ファイルを指定します。
Defuse Message
には、チュートリアルを完遂したときにログ(UnityEngine.Debug.Log)出力している文字列*5を指定します。正規表現が使用できます。
Tutorial Monkey Agentは40秒間動作する設定です。40秒以内に解除メッセージ「チュートリアル突破!」がログに出力されればTime Bomb Agentは正常終了、40秒経過してTutorial Monkey Agentが終了してしまうとエラーとなります。
オートパイロット設定
最後にオートパイロット本体の設定です。
Projectウィンドウで右クリック > Create > Anjin > Autopilot Settings でオートパイロット設定ファイルが作られます。 これをInspectorウィンドウで開き、動作設定を行ないます。
ここでは、Sceneに対して、そのSceneを操作するAgentを割り当てます。 まず、最初に表示されるTitle sceneにはTitle To Tutorial Agentという名前のuGUI Playback Agentを指定し*6、TitleからHomeに遷移するよう設定しています(詳細は割愛します)。
続いて Home scene(ここでチュートリアルが進行する想定)に先のTime Bomb Agentを指定して、チュートリアルを突破させます。
設定を終えたら、Inspectorウィンドウを下までスクロールして Run
ボタンをクリックするとその場で再生モードに切り替わり、オートパイロットが実行されます。
なお、図の設定ではチュートリアル突破後、Lifespan sec
に設定された60秒までなにもしないで終了します。
実際のプロジェクトでは、Time Bomb Agentの後にさらにuGUI Playback Agentで各画面を巡回するシナリオを組んだり、uGUI Monkey Agentでモンキーテストを実行するなりするとよいでしょう。
その他の新機能
Anjin v1.2およびv1.3で追加された機能を簡単に紹介します。
Play Modeテストからのオートパイロット実行
Inspectorウィンドウやコマンドラインからでなく、Play Modeテストコード内でオートパイロットを起動し、終了を待つことができるようになりました。 次のように使います。
[Test] public async Task LaunchAutopilotFromTest() { await LauncherFromTest.AutopilotAsync("Assets/Path/To/AutopilotSettings.asset"); }
uGUI Monkey Agentのスクリーンショット撮影オプション
uGUI Monkey Agentに、操作ごとにスクリーンショットを撮影するオプションが追加されました。 Inspectorウィンドウで有効化できます。
デフォルトでは、Application.persistentDataPath
下の "/TestHelper/Screenshots/" に Agentの名前+連番のファイルが保存されます。
batchmode起動サポート
CIなどでコマンドラインから起動するとき、-batchmode
を指定しても動作するようになりました。
Unityのbatchmode(ヘッドレスモード)には様々な制限がありますが、それを回避するハック(下記)によるものです。