Anjin v1.8.0がリリースされました。大きめのマイナーチェンジ()なので、変更内容を紹介します。 本バージョンでは主に、可用性を広げる機能が追加されています。
Anjinパッケージ(com.dena.anjin)は、株式会社ディー・エヌ・エーが開発・OSSとして公開しているUnity向けオートパイロットフレームワークです*1。
AutopilotSettingsの変更
オートパイロットシナリオの根幹であるAutopilotSettingsの設定項目が色々変更されました。項目が移行されたものは、Runボタンでオートパイロットを起動すると自動変換されます*2。
下図は、左がv1.6時点のもの、右がv1.8で自動変換されたものです。
変更箇所は次のとおりです。
Nameフィールドを追加
AutopilotSettingsの名前を指定できるようになりました。 Slack通知のメッセージに挿入することができます*3。
Observer Agent を Scene Crossing Agents に変更
従来のObserver Agentには、すべてのSceneで(Scene Agent Mappingに設定されたオペレーションを担当するAgentとは別に)起動されるAgentを設定できました。
v1.8で置き換えられたScene Crossing Agentsでは、次の点が異なります。
タイムアウト時の振る舞いを設定可能に
従来、Lifespanで指定したタイムアウト時間に達すると、オートパイロットは正常終了(CLIでは終了コード=0)していました*6。
v1.8からは、終了コード(Exit Code)およびSlack通知に含めるメッセージ(Message)を設定できるようになりました。
JUnit Report Path設定を JUnitXmlReporter に移行
終了時にJUnit形式のXMLファイルを出力したいとき、従来はAutopilotSettingsのJUnit Report Pathにパスを設定していましたが、廃止されました。
v1.8からは、ReporterとしてJUnitXmlReporterを追加することで実現できます。
Loggerを複数指定可能に
設定項目としては "Logger" は廃止、場所を移動して複数形の "Loggers" になりました。 従来もCompositeLogger*7を使用することで複数のLoggerを使用できましたが、より簡単に設定できます。
Reporterを複数指定可能に
設定項目としては "Reporter" は廃止、場所を移動して複数形の "Reporters" になりました。 従来もCompositeReporter*8を使用することで複数のReporterを使用できましたが、より簡単に設定できます。
Slack設定の廃止
v1.1からSlack通知設定はSlackReporterで行なうように推奨されていましたが、v1.8でSlack Token/ Channelsを廃止しました。 もしまだ使用されていた場合、SlackReporterに変換されます。
Output Root Pathを追加
FileLoggerなどファイル出力を行なうAgent、Logger、Reporterの出力先に相対パスを指定したときの起点ディレクトリを設定できるようになりました。 コマンドライン引数でも指定できます。
Screenshots Pathを追加
Agentがスクリーンショットを保存するディレクトリを直接指定できるようになりました。相対パスで指定したとき、起点はOutput Root Pathになります。 コマンドライン引数でも指定できます。
また "Clean Screenshots" をonにすると、オートパイロット起動時にディレクトリ内のファイルが全削除されます。
エラーハンドリング設定を ErrorHandlerAgent に移行
エラーハンドリング設定が廃止され、ErrorHandlerAgentに置き換えられました。 ErrorHandlerAgentは、Scene Crossing Agentsに追加して常に監視状態にする使いかたを想定しています。
ファイルを分けることで複数シナリオで設定を共有できるようになるほか、ParallelCompositeAgentを使うことで特定のSceneのみ別設定でエラーハンドリングさせることもできるようになります。
SlackReporterの機能追加
オートパイロット終了時にSlack通知を行なうSlackReporterにもいくつか機能が追加されました。
v1.8からは、Slack通知のリード文、本文、アタッチメントの色を設定できるようになりました。 リード文および本文には、次のプレースホルダを使用できます。
- "{message}": 終了要因メッセージ(エラーログのメッセージなど)
- "{settings}": 実行中の AutopilotSettings 名
- "{env.KEY}": 環境変数
- "{mppm-tags}": Multiplayer Play Mode パッケージのタグ
また、従来は異常終了時にのみ送信していましたが、"Post if completes" をonにすることで正常終了時にも送信できるようになりました。
UGUIEmergencyExitAgentの変更
以前はEmergencyExitAgentでしたが、v1.8から名称変更と機能追加を行ないました。
EmergencyExitアノテーションの出現をチェックする間隔の指定と、ボタンクリック時にスクリーンショットを撮影できるようになりました。
TerminateAgent
オートパイロットを停止させるAgentを追加しました。 終了コード(Exit Code)およびSlack通知に含めるメッセージ(Message)を設定できます。
テストシナリオの目的を達成したところに配置し、TerminateAgentでは正常終了、AutopilotSettingsのタイムアウトを異常終了にするといった組み合わせを想定しています。
GameView解像度の指定
コマンドラインから起動するとき、コマンドライン引数でGameViewの解像度を指定できるようになりました。
- GAME_VIEW_WIDTH: GameView の幅を設定します。この引数は、コマンド ラインからエディターを起動する場合にのみ使用されます。デフォルト値は 640 です
- GAME_VIEW_HEIGHT: GameView の高さを設定します。この引数は、コマンド ラインからエディターを起動する場合にのみ使用されます。デフォルト値は 480 です
Multiplayer Play Mode パッケージ対応
Multiplayer Play Mode (MPPM) パッケージと使用するとき、Virtual Playersでオートパイロットが実行されない場合がありましたが、確実に同期されるよう修正しました。
また、SlackReporterの送信メッセージにタグを挿入できるようになりました。
MPPMパッケージとの使用方法については次の記事を参照してください。
InitializeOnLaunchAutopilotの呼び出し順を指定可能に
オートパイロット起動時にゲームタイトル固有の初期化を行なうことができる InitializeOnLaunchAutopilot 属性に引数が追加され、呼び出し順を指定できるようになりました。
蛇足
今回が大きめのマイナーチェンジ()であることをコミット数から見てみましょう。 v1.0以降*9のマイナーバージョンリリース日をプロットしてみました。 v1.7との境界がわかりづらいですが、ピーク値はv1.7のリリース後です。その後4週目で失速しているのは体力的な問題…。
宣伝
冬コミ(C105)で、Anjinのあれこれを詰め込んだ『Anjin非公式ファンブック』を頒布予定です。夏から出す出す詐欺していましたが今度こそ間に合うはず。
表紙・挿絵は『江戸むらさき特急』の著者、ほりのぶゆき先生にお願いしました!
2日目 西う47b「いか小屋」でお待ちしております。 また、後日BOOTHでも頒布予定です。
*1:筆者はもう社員ではないですがコントリビューターです
*2:従ってCIなどではそのまま使えますが、早めに変換後のファイルをVCSにコミットしておくことをお勧めします
*3:AutopilotSettingsはScriptableObjectなのでnameはファイル名になります。シナリオごとにディレクトリに入れてファイル名はAutopilotSettingsのままにすることが多いので、明示的に名前を付けられるようにしました。省略時はファイル名が使われます
*4:つまりDontDestroyOnLoadされます
*5:従来のObserver AgentでもCompositeAgentを使うことで実現できましたが、より簡単に設定できるようになりました
*6:元々コンセプトとして時間いっぱいモンキーテストを行なう想定のため
*7:この変更に伴い、CompositeLoggerはコンテキストメニューから除外されました
*8:この変更に伴い、CompositeReporterはコンテキストメニューから除外されました