diff --git a/Editor/Localization/ja.po b/Editor/Localization/ja.po
index 7479a4a..1297032 100644
--- a/Editor/Localization/ja.po
+++ b/Editor/Localization/ja.po
@@ -20,7 +20,7 @@ msgid "Description"
msgstr "説明"
# description tooltip
-msgid "Description about this setting instance"
+msgid "Description about this settings instance."
msgstr "このAutopilotSettingsインスタンスの説明"
# name
@@ -178,7 +178,7 @@ msgid "Description"
msgstr "説明"
# description tooltip
-msgid "Description about this agent instance"
+msgid "Description about this Agent instance."
msgstr "このAgentインスタンスの説明"
@@ -400,14 +400,14 @@ msgstr "操作を記録したJSONファイル"
# recordedJson tooltip
msgid "JSON file recorded by AutomatedQA package"
-msgstr "Automated QAパッケージのRecorded Playbackウィンドウで記録したjsonファイルを設定します"
+msgstr "Automated QAパッケージのRecorded Playbackウィンドウで記録したJSONファイルを設定します"
#: Editor/UI/Agents/ErrorHandlerAgent.cs
# handleException
msgid "Handle Exception"
-msgstr "例外を捕捉"
+msgstr "例外を検知"
# handleException tooltip
msgid "Specify an Autopilot terminates or only reports when an Exception is detected in the log"
@@ -480,7 +480,7 @@ msgid "Description"
msgstr "説明"
# description tooltip
-msgid "Description about this Logger instance"
+msgid "Description about this Logger instance."
msgstr "このLoggerインスタンスの説明"
@@ -532,7 +532,7 @@ msgid "Description"
msgstr "説明"
# description tooltip
-msgid "Description about this Reporter instance"
+msgid "Description about this Reporter instance."
msgstr "このReporterインスタンスの説明"
diff --git a/Editor/UI/Agents/DoNothingAgentEditor.cs b/Editor/UI/Agents/DoNothingAgentEditor.cs
index 2e902cb..14536db 100644
--- a/Editor/UI/Agents/DoNothingAgentEditor.cs
+++ b/Editor/UI/Agents/DoNothingAgentEditor.cs
@@ -14,7 +14,7 @@ namespace DeNA.Anjin.Editor.UI.Agents
public class DoNothingAgentEditor : UnityEditor.Editor
{
private static readonly string s_description = L10n.Tr("Description");
- private static readonly string s_descriptionTooltip = L10n.Tr("Description about this agent instance");
+ private static readonly string s_descriptionTooltip = L10n.Tr("Description about this Agent instance.");
private static readonly string s_lifespanSec = L10n.Tr("Lifespan [sec]");
private static readonly string s_lifespanSecTooltip =
diff --git a/Editor/UI/Agents/ErrorHandlerAgentEditor.cs b/Editor/UI/Agents/ErrorHandlerAgentEditor.cs
index f38ca22..e1654f5 100644
--- a/Editor/UI/Agents/ErrorHandlerAgentEditor.cs
+++ b/Editor/UI/Agents/ErrorHandlerAgentEditor.cs
@@ -17,7 +17,7 @@ public class ErrorHandlerAgentEditor : UnityEditor.Editor
// @formatter:off
private static readonly string s_description = L10n.Tr("Description");
- private static readonly string s_descriptionTooltip = L10n.Tr("Description about this Agent instance");
+ private static readonly string s_descriptionTooltip = L10n.Tr("Description about this Agent instance.");
private SerializedProperty _descriptionProp;
private GUIContent _descriptionLabel;
diff --git a/Editor/UI/Agents/OneTimeAgentEditor.cs b/Editor/UI/Agents/OneTimeAgentEditor.cs
index 370542f..adf4ed4 100644
--- a/Editor/UI/Agents/OneTimeAgentEditor.cs
+++ b/Editor/UI/Agents/OneTimeAgentEditor.cs
@@ -14,7 +14,7 @@ namespace DeNA.Anjin.Editor.UI.Agents
public class OneTimeAgentEditor : UnityEditor.Editor
{
private static readonly string s_description = L10n.Tr("Description");
- private static readonly string s_descriptionTooltip = L10n.Tr("Description about this agent instance");
+ private static readonly string s_descriptionTooltip = L10n.Tr("Description about this Agent instance.");
private static readonly string s_agent = L10n.Tr("Agent");
private static readonly string s_agentTooltip =
diff --git a/Editor/UI/Agents/ParallelCompositeAgentEditor.cs b/Editor/UI/Agents/ParallelCompositeAgentEditor.cs
index e542f36..16e4bf0 100644
--- a/Editor/UI/Agents/ParallelCompositeAgentEditor.cs
+++ b/Editor/UI/Agents/ParallelCompositeAgentEditor.cs
@@ -14,7 +14,7 @@ namespace DeNA.Anjin.Editor.UI.Agents
public class ParallelCompositeAgentEditor : UnityEditor.Editor
{
private static readonly string s_description = L10n.Tr("Description");
- private static readonly string s_descriptionTooltip = L10n.Tr("Description about this agent instance");
+ private static readonly string s_descriptionTooltip = L10n.Tr("Description about this Agent instance.");
private static readonly string s_agents = L10n.Tr("Agents");
private static readonly string s_agentsTooltip = L10n.Tr("Agents to parallel execution");
diff --git a/Editor/UI/Agents/RepeatAgentEditor.cs b/Editor/UI/Agents/RepeatAgentEditor.cs
index 8add720..3fffbb4 100644
--- a/Editor/UI/Agents/RepeatAgentEditor.cs
+++ b/Editor/UI/Agents/RepeatAgentEditor.cs
@@ -14,7 +14,7 @@ namespace DeNA.Anjin.Editor.UI.Agents
public class RepeatAgentEditor : UnityEditor.Editor
{
private static readonly string s_description = L10n.Tr("Description");
- private static readonly string s_descriptionTooltip = L10n.Tr("Description about this agent instance");
+ private static readonly string s_descriptionTooltip = L10n.Tr("Description about this Agent instance.");
private static readonly string s_agent = L10n.Tr("Agent");
private static readonly string s_agentTooltip = L10n.Tr("Agent to repeat execution");
diff --git a/Editor/UI/Agents/SerialCompositeAgentEditor.cs b/Editor/UI/Agents/SerialCompositeAgentEditor.cs
index c88d077..4c6c6e1 100644
--- a/Editor/UI/Agents/SerialCompositeAgentEditor.cs
+++ b/Editor/UI/Agents/SerialCompositeAgentEditor.cs
@@ -14,7 +14,7 @@ namespace DeNA.Anjin.Editor.UI.Agents
public class SerialCompositeAgentEditor : UnityEditor.Editor
{
private static readonly string s_description = L10n.Tr("Description");
- private static readonly string s_descriptionTooltip = L10n.Tr("Description about this agent instance");
+ private static readonly string s_descriptionTooltip = L10n.Tr("Description about this Agent instance.");
private static readonly string s_agents = L10n.Tr("Agents");
private static readonly string s_agentsTooltip = L10n.Tr("Agents to serial execution");
diff --git a/Editor/UI/Agents/TerminateAgentEditor.cs b/Editor/UI/Agents/TerminateAgentEditor.cs
index 6cff88d..910bc4b 100644
--- a/Editor/UI/Agents/TerminateAgentEditor.cs
+++ b/Editor/UI/Agents/TerminateAgentEditor.cs
@@ -15,7 +15,7 @@ public class TerminateAgentEditor : UnityEditor.Editor
{
// @formatter:off
private static readonly string s_description = L10n.Tr("Description");
- private static readonly string s_descriptionTooltip = L10n.Tr("Description about this agent instance");
+ private static readonly string s_descriptionTooltip = L10n.Tr("Description about this Agent instance.");
private static readonly string s_exitCode = L10n.Tr("Exit Code");
private static readonly string s_exitCodeTooltip = L10n.Tr("Select the exit code used when this agent terminates the Autopilot.");
diff --git a/Editor/UI/Agents/TimeBombAgentEditor.cs b/Editor/UI/Agents/TimeBombAgentEditor.cs
index 2263774..ee79afa 100644
--- a/Editor/UI/Agents/TimeBombAgentEditor.cs
+++ b/Editor/UI/Agents/TimeBombAgentEditor.cs
@@ -14,7 +14,7 @@ namespace DeNA.Anjin.Editor.UI.Agents
public class TimeBombAgentEditor : UnityEditor.Editor
{
private static readonly string s_description = L10n.Tr("Description");
- private static readonly string s_descriptionTooltip = L10n.Tr("Description about this agent instance");
+ private static readonly string s_descriptionTooltip = L10n.Tr("Description about this Agent instance.");
private static readonly string s_agent = L10n.Tr("Agent");
private static readonly string s_agentTooltip =
diff --git a/Editor/UI/Agents/UGUIEmergencyExitAgentEditor.cs b/Editor/UI/Agents/UGUIEmergencyExitAgentEditor.cs
index 556a5d9..42ec582 100644
--- a/Editor/UI/Agents/UGUIEmergencyExitAgentEditor.cs
+++ b/Editor/UI/Agents/UGUIEmergencyExitAgentEditor.cs
@@ -17,7 +17,7 @@ public class UGUIEmergencyExitAgentEditor : UnityEditor.Editor
// @formatter:off
private static readonly string s_description = L10n.Tr("Description");
- private static readonly string s_descriptionTooltip = L10n.Tr("Description about this agent instance");
+ private static readonly string s_descriptionTooltip = L10n.Tr("Description about this Agent instance.");
private SerializedProperty _descriptionProp;
private GUIContent _descriptionLabel;
diff --git a/Editor/UI/Agents/UGUIMonkeyAgentEditor.cs b/Editor/UI/Agents/UGUIMonkeyAgentEditor.cs
index de563a4..76d1d40 100644
--- a/Editor/UI/Agents/UGUIMonkeyAgentEditor.cs
+++ b/Editor/UI/Agents/UGUIMonkeyAgentEditor.cs
@@ -17,7 +17,7 @@ namespace DeNA.Anjin.Editor.UI.Agents
public class UGUIMonkeyAgentEditor : UnityEditor.Editor
{
private static readonly string s_description = L10n.Tr("Description");
- private static readonly string s_descriptionTooltip = L10n.Tr("Description about this agent instance");
+ private static readonly string s_descriptionTooltip = L10n.Tr("Description about this Agent instance.");
private SerializedProperty _descriptionProp;
private GUIContent _descriptionGUIContent;
diff --git a/Editor/UI/Agents/UGUIPlaybackAgentEditor.cs b/Editor/UI/Agents/UGUIPlaybackAgentEditor.cs
index 0f22eb3..923508a 100644
--- a/Editor/UI/Agents/UGUIPlaybackAgentEditor.cs
+++ b/Editor/UI/Agents/UGUIPlaybackAgentEditor.cs
@@ -16,7 +16,7 @@ namespace DeNA.Anjin.Editor.UI.Agents
public class UGUIPlaybackAgentEditor : UnityEditor.Editor
{
private static readonly string s_description = L10n.Tr("Description");
- private static readonly string s_descriptionTooltip = L10n.Tr("Description about this agent instance");
+ private static readonly string s_descriptionTooltip = L10n.Tr("Description about this Agent instance.");
private static readonly string s_recordedJson = L10n.Tr("Recorded JSON file");
private static readonly string s_recordedJsonTooltip = L10n.Tr("JSON file recorded by AutomatedQA package");
diff --git a/Editor/UI/Loggers/CompositeLoggerEditor.cs b/Editor/UI/Loggers/CompositeLoggerEditor.cs
index e84989f..544b532 100644
--- a/Editor/UI/Loggers/CompositeLoggerEditor.cs
+++ b/Editor/UI/Loggers/CompositeLoggerEditor.cs
@@ -14,7 +14,7 @@ namespace DeNA.Anjin.Editor.UI.Loggers
public class CompositeLoggerEditor : UnityEditor.Editor
{
private static readonly string s_description = L10n.Tr("Description");
- private static readonly string s_descriptionTooltip = L10n.Tr("Description about this Logger instance");
+ private static readonly string s_descriptionTooltip = L10n.Tr("Description about this Logger instance.");
private static readonly string s_loggers = L10n.Tr("Loggers");
private static readonly string s_loggersTooltip = L10n.Tr("Loggers to delegates");
diff --git a/Editor/UI/Loggers/ConsoleLoggerEditor.cs b/Editor/UI/Loggers/ConsoleLoggerEditor.cs
index bca0703..c5a0d22 100644
--- a/Editor/UI/Loggers/ConsoleLoggerEditor.cs
+++ b/Editor/UI/Loggers/ConsoleLoggerEditor.cs
@@ -14,7 +14,7 @@ namespace DeNA.Anjin.Editor.UI.Loggers
public class ConsoleLoggerEditor : UnityEditor.Editor
{
private static readonly string s_description = L10n.Tr("Description");
- private static readonly string s_descriptionTooltip = L10n.Tr("Description about this Logger instance");
+ private static readonly string s_descriptionTooltip = L10n.Tr("Description about this Logger instance.");
private static readonly string s_filterLogType = L10n.Tr("Filter LogType");
private static readonly string s_filterLogTypeTooltip = L10n.Tr("To selective enable debug log message");
diff --git a/Editor/UI/Loggers/FileLoggerEditor.cs b/Editor/UI/Loggers/FileLoggerEditor.cs
index c53b1db..8f9e54c 100644
--- a/Editor/UI/Loggers/FileLoggerEditor.cs
+++ b/Editor/UI/Loggers/FileLoggerEditor.cs
@@ -15,7 +15,7 @@ public class FileLoggerEditor : UnityEditor.Editor
{
// @formatter:off
private static readonly string s_description = L10n.Tr("Description");
- private static readonly string s_descriptionTooltip = L10n.Tr("Description about this Logger instance");
+ private static readonly string s_descriptionTooltip = L10n.Tr("Description about this Logger instance.");
private static readonly string s_outputPath = L10n.Tr("Output File Path");
private static readonly string s_outputPathTooltip = L10n.Tr("Output path for log file path. When a relative path is specified, relative to the AutopilotSettings.outputRootPath.");
diff --git a/Editor/UI/Reporters/CompositeReporterEditor.cs b/Editor/UI/Reporters/CompositeReporterEditor.cs
index 87fbef4..24c756e 100644
--- a/Editor/UI/Reporters/CompositeReporterEditor.cs
+++ b/Editor/UI/Reporters/CompositeReporterEditor.cs
@@ -15,7 +15,7 @@ namespace DeNA.Anjin.Editor.UI.Reporters
public class CompositeReporterEditor : UnityEditor.Editor
{
private static readonly string s_description = L10n.Tr("Description");
- private static readonly string s_descriptionTooltip = L10n.Tr("Description about this Reporter instance");
+ private static readonly string s_descriptionTooltip = L10n.Tr("Description about this Reporter instance.");
private SerializedProperty _descriptionProp;
private GUIContent _descriptionGUIContent;
diff --git a/Editor/UI/Reporters/JUnitXmlReporterEditor.cs b/Editor/UI/Reporters/JUnitXmlReporterEditor.cs
index cd65ad0..1103de1 100644
--- a/Editor/UI/Reporters/JUnitXmlReporterEditor.cs
+++ b/Editor/UI/Reporters/JUnitXmlReporterEditor.cs
@@ -17,7 +17,7 @@ public class JUnitXmlReporterEditor : UnityEditor.Editor
// @formatter:off
private static readonly string s_description = L10n.Tr("Description");
- private static readonly string s_descriptionTooltip = L10n.Tr("Description about this Reporter instance");
+ private static readonly string s_descriptionTooltip = L10n.Tr("Description about this Reporter instance.");
private GUIContent _descriptionLabel;
private SerializedProperty _descriptionProp;
diff --git a/Editor/UI/Reporters/SlackReporterEditor.cs b/Editor/UI/Reporters/SlackReporterEditor.cs
index 8ba01c1..78d6068 100644
--- a/Editor/UI/Reporters/SlackReporterEditor.cs
+++ b/Editor/UI/Reporters/SlackReporterEditor.cs
@@ -19,7 +19,7 @@ public class SlackReporterEditor : UnityEditor.Editor
// @formatter:off
private static readonly string s_description = L10n.Tr("Description");
- private static readonly string s_descriptionTooltip = L10n.Tr("Description about this Reporter instance");
+ private static readonly string s_descriptionTooltip = L10n.Tr("Description about this Reporter instance.");
private SerializedProperty _descriptionProp;
private GUIContent _descriptionGUIContent;
diff --git a/Editor/UI/Settings/AutopilotSettingsEditor.cs b/Editor/UI/Settings/AutopilotSettingsEditor.cs
index f58aaad..fe4e665 100644
--- a/Editor/UI/Settings/AutopilotSettingsEditor.cs
+++ b/Editor/UI/Settings/AutopilotSettingsEditor.cs
@@ -16,7 +16,7 @@ public class AutopilotSettingsEditor : UnityEditor.Editor
{
// @formatter:off
private static readonly string s_description = L10n.Tr("Description");
- private static readonly string s_descriptionTooltip = L10n.Tr("Description about this setting instance");
+ private static readonly string s_descriptionTooltip = L10n.Tr("Description about this settings instance.");
private static readonly string s_name = L10n.Tr("Name");
private static readonly string s_nameTooltip = L10n.Tr("Custom name of this setting used by Reporter. If omitted, the asset file name is used.");
diff --git a/README.md b/README.md
index b786aeb..dacfac6 100644
--- a/README.md
+++ b/README.md
@@ -60,10 +60,18 @@ openupm add com.dena.anjin
### Recommended .gitignore
The following files are automatically generated when you start Anjin.
-There is no need to track it, so we recommend adding it to your project's .gitignore file.
+There is no need to track it, so we recommend adding it to your project's .gitignore file (or ignore settings of using VCS).
```
-/Assets/AutopilotState.asset*
+/[Aa]ssets/[Aa]utopilot[Ss]tate.asset*
+```
+
+And, the following files will be generated if you use the Automated QA package.
+We recommend ignoring these as well.
+
+```
+/[Aa]ssets/[Aa]utomated[Qq][Aa]*
+/[Aa]ssets/[Rr]ecordings*
```
@@ -117,7 +125,7 @@ for specifying, e.g., `ErrorHandlerAgent` and `UGUIEmergencyExitAgent`.
- Lifespan
- Specifies the execution time limit in seconds. Defaults to 300 seconds, 0 specifies unlimited operation.
- This item can also be overridden from the commandline (see below).
+ This item can also be overridden from the command line (see below).
- Exit Code
- Select the exit code used when Autopilot lifespan expires.
- Custom Exit Code
- Specify the exit code as an integer value.
- Message
- Message sent by the Reporter when Autopilot lifespan expires.
@@ -127,13 +135,13 @@ for specifying, e.g., `ErrorHandlerAgent` and `UGUIEmergencyExitAgent`.
- Random Seed
- Specify when you want to fix the seed given to the pseudo-random number generator (optional). This is a setting related to the pseudo-random number generator used by the autopilot. To fix the seed of the pseudo-random number generator in the game itself, it is necessary to implement this setting on the game title side.
- This item can also be overridden from the commandline (see below).
+ This item can also be overridden from the command line (see below).
- Time Scale
- Time.timeScale. Default is 1.0.
- This item can also be overridden from the commandline (see below).
+ This item can also be overridden from the command line (see below).
- Output Root Path
- Output files root directory path used by Agents, Loggers, and Reporters. When a relative path is specified, the origin is the project root in the Editor, and Application.persistentDataPath on the Player.
- This item can also be overridden from the commandline (see below).
+ This item can also be overridden from the command line (see below).
- Screenshots Path
- Screenshots output directory path used by Agents. When a relative path is specified, relative to the outputRootPath.
- This item can also be overridden from the commandline (see below).
+ This item can also be overridden from the command line (see below).
- Clean Screenshots
- Clean screenshots under screenshotsPath when launching Autopilot.
- Loggers
- Logger used for this autopilot settings. If omitted,
Debug.unityLogger
will be used as default.
- Reporters
- Reporter to be called on Autopilot terminate.
@@ -177,13 +185,17 @@ Autopilot can be run in the Unity editor in three ways.
### 1. Run on play mode in Unity editor (GUI)
-Open the AutopilotSettings file you wish to run in the inspector and click the **Run** button to enter play mode with Autopilot enabled.
+Open the AutopilotSettings file you wish to run in the inspector and click the **Run** button to launch Autopilot.
After the set run time has elapsed, or as in normal play mode, clicking the Play button will stop the program.
+> [!TIPS]
+> If you start the Autopilot in Edit Mode, so return to Edit Mode when the Autopilot is terminated.
+> If you start the Autopilot in Play Mode, Play Mode will continue even after the autopilot is terminated.
+
-### 2. Launch from commandline
+### 2. Launch from command line
-To execute from the commandline, specify the following arguments.
+To launch from the command line, specify the following arguments.
```bash
$(UNITY) \
@@ -213,6 +225,10 @@ For details on each argument, see the entry of the same name in the "Generate an
In both cases, the key should be prefixed with `-` and specified as `-LIFESPAN_SEC 60`.
+> [!IMPORTANT]
+> Shown GameView window even in batchmode.
+> We have confirmed that it works with Xvfb, but since Unity does not officially support it, it may not be available in the future.
+
### 3. Run in Play Mode test
@@ -266,7 +282,7 @@ An instance of this Agent (.asset file) can contain the following.
- Enable Gizmos
- Show Gizmos on GameView during running monkey test if true
-#### *Screenshot Options:*
+***Screenshot Options:***
- Enabled
- Whether screenshot is enabled or not
@@ -287,7 +303,7 @@ This is an Agent that playback uGUI operations with the Recorded Playback featur
The following can be set in an instance (.asset file) of this Agent.
- - Recorded Json
- Specify the recording file (.json) to play
+ - Recorded JSON file
- JSON file recorded by AutomatedQA package.
Use the Recorded Playback window for recording operations with Automated QA. The window is opened via the Unity editor menu
@@ -297,12 +313,12 @@ The recording file (.json) is saved under the Assets/Recordings/ folder and can
Note that the Recorded Playback function in Automated QA can record operations across Scene transitions, but in Anjin, when the Scene is switched, the Agent is also forcibly switched, so playback is also interrupted.
Therefore, please be careful to record in units of Scenes.
-> [!WARNING]
+> [!IMPORTANT]
> The Automated QA package outputs `LogType.Error` to the console when playback fails (e.g., the target Button cannot be found). The following setting is required to detect this and terminate the autopilot.
> 1. Add [ErrorHandlerAgent](#ErrorHandlerAgent) and set `Handle Error` to `Terminate Autopilot`.
> 2. Add [ConsoleLogger](#ConsoleLogger) and set `Filter LogType` to `Error` or higher.
-> [!NOTE]
+> [!IMPORTANT]
> The Automated QA package is in the preview stage. Please note that destructive changes may occur, and the package itself may be discontinued or withdrawn.
@@ -419,7 +435,7 @@ This Agent instance (.asset file) can contain the following.
- Ignore Messages
- Log messages containing the specified strings will be ignored from the stop condition. Regex is also available; escape is a single backslash (`\`).
-> [!NOTE]
+> [!TIP]
> Recommend enabling a `Handle Exception` to interrupt Autopilot if an exception occurs during execution.
@@ -537,38 +553,9 @@ This asmdef and its storage folder can be created by opening the context menu an
**Create > Anjin > Game Title Specific Assembly Folder**.
-### Custom Agents
-
-A custom Agent is created by inheriting from `Anjin.Agents.AbstractAgent`.
-Simply implement the process to be executed by the Agent in the method `UniTask Run()`.
-
-The following fields defined in `AbstractAgent` are available. Each instance is set before calling the `Run` method.
-
-- `Logger`: Implementation of `UnityEngine.ILogger` specified in AutopilotSettings. Use this if you want to log output in Agent.
-- `Random`: Implementation of `Anjin.Utilities.IRandom`. Which is created from a seed specified in AutopilotSettings or a startup argument.
-
-Note that it is convenient to set the `[CreateAssetMenu]` attribute to create an instance from the context menu.
-
-
-### Custom Loggers
-
-A custom Logger is created by inheriting from `Anjin.Logers.AbstractLoggerAsset`.
-You must implement the `Logger { get; }` property to return custom `UnityEngine.ILogger` implementation.
-
-Note that it is convenient to set the `[CreateAssetMenu]` attribute to create an instance from the context menu.
-
-
-### Custom Reporters
-
-A custom Reporter is created by inheriting from `Anjin.Reporters.AbstractReporter`.
-Simply implement the method `UniTask PostReportAsync()`.
-
-Note that it is convenient to set the `[CreateAssetMenu]` attribute to create an instance from the context menu.
-
-
### Game-title-specific initialization process
-If your game title requires its specific initialization process, add the `InitializeOnLaunchAutopilot` attribute to the `static` method that does the initialization.
+If your game title requires its specific initialization process, add the `InitializeOnLaunchAutopilot` attribute to the static method that does the initialization.
An added method is called from the autopilot launch process.
```csharp
@@ -597,6 +584,35 @@ private static async UniTask InitializeOnLaunchAutopilotMethodAsync()
> Also, `RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)` implements the initialization process for Configurable Enter Play Mode.
+### Custom Agents
+
+A custom Agent is created by inheriting from `Anjin.Agents.AbstractAgent`.
+Simply implement the process to be executed by the Agent in the method `UniTask Run()`.
+
+The following fields defined in `AbstractAgent` are available. Each instance is set before calling the `Run` method.
+
+- `Logger`: Implementation of `UnityEngine.ILogger` specified in AutopilotSettings. Use this if you want to log output in Agent.
+- `Random`: Implementation of `Anjin.Utilities.IRandom`. Which is created from a seed specified in AutopilotSettings or a startup argument.
+
+Note that it is convenient to set the `[CreateAssetMenu]` attribute to create an instance from the context menu.
+
+
+### Custom Loggers
+
+A custom Logger is created by inheriting from `Anjin.Logers.AbstractLoggerAsset`.
+You must implement the `Logger { get; }` property to return custom `UnityEngine.ILogger` implementation.
+
+Note that it is convenient to set the `[CreateAssetMenu]` attribute to create an instance from the context menu.
+
+
+### Custom Reporters
+
+A custom Reporter is created by inheriting from `Anjin.Reporters.AbstractReporter`.
+Simply implement the method `UniTask PostReportAsync()`.
+
+Note that it is convenient to set the `[CreateAssetMenu]` attribute to create an instance from the context menu.
+
+
## Anjin Annotations
@@ -622,6 +638,46 @@ It is intended to be attached to buttons that are irregular in the execution of
+## Using with Multiplayer Play Mode package
+
+It is now easy to check the operation of multiplayer games by using the [Multiplayer Play Mode](https://docs.unity3d.com/Packages/com.unity.multiplayer.playmode@latest) (MPPM) package, which is available in Unity 6 and later.
+
+Below are some points to note when using Anjin with the MPPM package.
+This has been checked with MPPM package v1.3.1.
+
+
+### Run on Virtual Players
+
+When running in [Virtual Players](https://docs-multiplayer.unity3d.com/mppm/current/virtual-players/), clicking the **Run** button in the AutopilotSettings file in Edit Mode will launch the Autopilot in all Virtual Players.
+
+Launching in Play Mode or using different AutopilotSettings for different players is impossible.
+To specify different behaviors for different players, you will need to implement a custom Agent that branches based on [tags](https://docs-multiplayer.unity3d.com/mppm/current/player-tags/).
+
+When you specify a relative path for the "Output Root Path" of AutopilotSettings, the base will be the directory of each Virtual Player.
+Therefore, each Virtual Player's output of Agents, Loggers, and Reporters will be preserved.
+
+> [!CAUTION]
+> The Automated QA package that `UGUIPlaybackAgent` depends on writes its output files to `Application.persistentDataPath`.
+> Because all the Virtual Players try to write to the same file, an error is printed to the console.
+
+> [!WARNING]
+> Files under Assets are shared with Virtual Players via symbolic links.
+> Therefore, when you change settings in the Inspector, you must save them using the menu item **File > Save (command + S)** before re-running Autopilot.
+
+
+### Run on Play Mode Scenarios
+
+To run in [Play Mode Scenarios](https://docs-multiplayer.unity3d.com/mppm/current/play-mode-scenario/play-mode-scenario-about/), you will need a player build that includes Anjin.
+For instructions on how to build it, see [Run on player build](#run-on-player-build-experimental).
+
+Play Mode Scenarios can be launched with command line arguments for each player, allowing them to use different AutopilotSettings files.
+
+> [!CAUTION]
+> The Automated QA package that `UGUIPlaybackAgent` depends on writes its output files to `Application.persistentDataPath`.
+> Because all the Virtual Players try to write to the same file, an error is printed to the console.
+
+
+
## Run on player build \[experimental\]
It can run autopilot on the players (real devices) if Anjin is included in player builds.
@@ -767,7 +823,7 @@ Be grateful if you could label the pull request as `enhancement`, `bug`, `chore`
The general policy for accepting new features is as follows:
- All built-in features can be easily configured in the Unity Editor's Inspector window.
-- Avoid adding features to the `Autopilot` class as much as possible, and consider expanding it with Agents, etc.
+- Avoid adding features to the Autopilot class as much as possible, and consider expanding it with Agents, etc.
- Refrain from adding non-general-purpose Agents, Loggers, and Reporters. Consider publishing them on your blog or Gist or placing them in Samples.
diff --git a/README_ja.md b/README_ja.md
index 9cff937..4f0c762 100644
--- a/README_ja.md
+++ b/README_ja.md
@@ -59,10 +59,18 @@ Assembly Definition FileのDefine Constraintsに `UNITY_INCLUDE_TESTS || DENA_AU
### 推奨.gitignore
Anjinを起動すると、次のファイルが自動生成されます。
-トラッキングする必要はありませんので、プロジェクトの.gitignoreファイルに追加することを推奨します。
+トラッキングする必要はありませんので、プロジェクトの.gitignoreファイル(もしくはお使いのVCSの無視設定)に追加することを推奨します。
```
-/Assets/AutopilotState.asset*
+/[Aa]ssets/[Aa]utopilot[Ss]tate.asset*
+```
+
+また、Automated QAパッケージの機能を使用すると、次のファイルが生成されます。
+これらも同様に無視設定することを推奨します。
+
+```
+/[Aa]ssets/[Aa]utomated[Qq][Aa]*
+/[Aa]ssets/[Rr]ecordings*
```
@@ -178,13 +186,17 @@ Reporterインスタンスは、UnityエディタのProjectウィンドウで右
### 1. Unityエディタ(GUI)の再生モードで実行
-実行したい設定ファイル(AutopilotSettings)をインスペクタで開き、**実行**ボタンをクリックするとオートパイロットが有効な状態で再生モードに入ります。
-設定された実行時間が経過するか、通常の再生モードと同じく再生ボタンクリックで停止します。
+実行したい設定ファイル(AutopilotSettings)をインスペクタで開き、**実行**ボタンをクリックすると、オートパイロットが起動します。
+設定された実行時間が経過するか、**停止**ボタンクリックで停止します。
+> [!TIPS]
+> 編集モードからオートパイロットを起動したとき、オートパイロットが停止すると編集モードに戻ります。
+> 再生モードの状態でオートパイロットを起動すると、オートパイロットを停止しても再生モードは継続されます。
-### 2. コマンドラインから実行
-コマンドラインから実行する場合、以下の引数を指定します。
+### 2. コマンドラインから起動
+
+コマンドラインから起動する場合、以下の引数を指定します。
```bash
$(UNITY) \
@@ -216,6 +228,10 @@ $(UNITY) \
いずれも、キーの先頭に`-`を付けて`-LIFESPAN_SEC 60`のように指定してください。
+> [!IMPORTANT]
+> バッチモードでも GameView ウィンドウが表示されます。
+> Xvfbでも動作することを確認していますが、Unityの正式なサポートではないため、将来利用できなくなる恐れはあります。
+
### 3. Play Modeテスト内で実行
@@ -266,10 +282,10 @@ uGUIのコンポーネントをランダムに操作するAgentです。
- 操作間隔
- ランダム操作間のウェイト間隔をミリ秒で指定します
- コンポーネント探索時間
- インタラクティブな要素を探索する秒数を指定します。探索時間がこれを超えるとエラーを発生させます
- タッチ&ホールド時間
- タッチ&ホールドの継続時間をミリ秒で指定します
- - Gizmo
- もし有効ならモンキー操作中の GameView に Gizmo を表示します。もし無効なら GameView に Gizmo を表示しません
+ - Gizmo を有効
- もし有効ならモンキー操作中の GameView に Gizmo を表示します。もし無効なら GameView に Gizmo を表示しません
-#### *スクリーンショット設定:*
+***スクリーンショット設定:***
- 有効
- スクリーンショット撮影を有効にします
@@ -290,7 +306,7 @@ uGUIのコンポーネントをランダムに操作するAgentです。
このAgentのインスタンス(.assetファイル)には以下を設定できます。
- - Recorded Json
- 再生するレコーディングファイル (.json) を指定します
+ - 操作を記録したJSONファイル
- Automated QAパッケージのRecorded Playbackウィンドウで記録したJSONファイルを設定します
Automated QAによる操作のレコーディングは、Unityエディターのメニューから
@@ -301,12 +317,12 @@ Automated QAによる操作のレコーディングは、Unityエディターの
なお、Automated QAのRecorded Playback機能ではScene遷移をまたがって操作を記録ができますが、AnjinではSceneが切り替わったところでAgentも強制的に切り替わるため、再生も中断されてしまいます。
従って、レコーディングはScene単位に区切って行なうようご注意ください。
-> [!WARNING]
+> [!IMPORTANT]
> Automated QAパッケージは、再生に失敗(対象のボタンが見つからないなど)したときコンソールに `LogType.Error` を出力します。これを検知してオートパイロットを停止するには、次の設定が必要です。
> 1. [ErrorHandlerAgent](#ErrorHandlerAgent) を追加し、`Handle Error` を `Terminate Autopilot` に設定します
> 2. [ConsoleLogger](#ConsoleLogger) を追加し、`Filter LogType` に `Error` 以上を設定します
-> [!NOTE]
+> [!IMPORTANT]
> Automated QAパッケージはプレビュー段階のため、破壊的変更や、パッケージ自体の開発中止・廃止もありえる点、ご注意ください。
@@ -358,7 +374,7 @@ Automated QAによる操作のレコーディングは、Unityエディターの
### OneTimeAgent
-1つの子Agentを登録し、それをAutopilot実行期間を通じて1回だけ実行できるAgentです。
+1つの子Agentを登録し、それをオートパイロット実行期間を通じて1回だけ実行できるAgentです。
2回目以降の実行はスキップされます。
たとえば、タイトル画面で初回だけ導線が異なる、ホーム画面で初回だけログインボーナス受け取りがあるといったゲームにおいて、 通信エラーなどによるタイトル画面戻しが発生してもそのまま実行するテストシナリオを構築できます。
@@ -412,19 +428,19 @@ Sceneごとに設定を変えたい場合は、`ParallelCompositeAgent` と合
このAgentのインスタンス(.assetファイル)には以下を設定できます。
- - Handle Exception
- 例外ログを検知したとき、オートパイロットを停止するか、レポート送信のみ行なうかを指定します。
+
- 例外を検知
- 例外ログを検知したとき、オートパイロットを停止するか、レポート送信のみ行なうかを指定します。
コマンドライン引数
-HANDLE_EXCEPTION
で上書きできますが、複数のErrorHandlerAgentを定義しているとき、すべて同じ値で上書きされますので注意してください。
- - Handle Error
- エラーログを検知したとき、オートパイロットを停止するか、レポート送信のみ行なうかを指定します。
+
- エラーを検知
- エラーログを検知したとき、オートパイロットを停止するか、レポート送信のみ行なうかを指定します。
コマンドライン引数
-HANDLE_ERROR
で上書きできますが、複数のErrorHandlerAgentを定義しているとき、すべて同じ値で上書きされますので注意してください。
- - Handle Assert
- アサートログを検知したとき、オートパイロットを停止するか、レポート送信のみ行なうかを指定します。
+
- アサートを検知
- アサートログを検知したとき、オートパイロットを停止するか、レポート送信のみ行なうかを指定します。
コマンドライン引数
-HANDLE_ASSERT
で上書きできますが、複数のErrorHandlerAgentを定義しているとき、すべて同じ値で上書きされますので注意してください。
- - Handle Warning
- 警告ログを検知したとき、オートパイロットを停止するか、レポート送信のみ行なうかを指定します。
+
- 警告を検知
- 警告ログを検知したとき、オートパイロットを停止するか、レポート送信のみ行なうかを指定します。
コマンドライン引数
-HANDLE_WARNING
で上書きできますが、複数のErrorHandlerAgentを定義しているとき、すべて同じ値で上書きされますので注意してください。
- - Ignore Messages
- 指定された文字列を含むログメッセージは停止条件から無視されます。正規表現も使用できます。エスケープは単一のバックスラッシュ (`\`) です。
+ - 無視するメッセージ
- 指定された文字列を含むログメッセージは停止条件から無視されます。正規表現も使用できます。エスケープは単一のバックスラッシュ (`\`) です。
-> [!NOTE]
-> 実行中に例外が発生した時点でオートパイロットを中断するために、`Handle Exception` の有効化をお勧めします。
+> [!TIP]
+> 実行中に例外が発生した時点でオートパイロットを中断するために「例外を検知」を停止に設定することを推奨します。
### UGUIEmergencyExitAgent
@@ -471,7 +487,7 @@ Sceneごとに設定を変えたい場合は、`ParallelCompositeAgent` と合
- 出力ファイルパス
- ログファイルの出力先パスを指定します。相対パスが指定されたとき、
AutopilotSettings.outputRootPath
が起点となります。
コマンドライン引数 -FILE_LOGGER_OUTPUT_PATH
で上書きできますが、複数のFileLoggerを定義しているとき、すべて同じ値で上書きされますので注意してください。
- フィルタリングLogType
- 選択したLogType以上のログ出力のみを有効にします
- - タイムスタンプを出力
- ログエンティティにタイムスタンプを出力します
+ - タイムスタンプを追加
- ログエンティティにタイムスタンプを出力します
@@ -501,18 +517,18 @@ Slackにレポート送信するReporterです。
このReporterのインスタンス(.assetファイル)には以下を設定できます。
- - Slack Token
- 通知に使用するSlack BotのOAuthトークン(省略時は通知されない)。
+
- Slackトークン
- 通知に使用するSlack BotのOAuthトークン(省略時は通知されない)。
コマンドライン引数
-SLACK_TOKEN
で上書きできますが、複数のSlackReporterを定義しているとき、すべて同じ値で上書きされますので注意してください。
- - Slack Channels
- 通知を送るチャンネル(省略時は通知されない)。カンマ区切りで複数指定できます。
+
- Slackチャンネル
- 通知を送るチャンネル(省略時は通知されない)。カンマ区切りで複数指定できます。
なお、チャンネルにはBotを招待しておく必要があります。
コマンドライン引数
-SLACK_CHANNELS
で上書きできますが、複数のSlackReporterを定義しているとき、すべて同じ値で上書きされますので注意してください。
- - Mention Sub Team IDs
- エラー終了時に送信する通知をメンションするチームのIDをカンマ区切りで指定します
- - Add @here
- エラー終了時に送信する通知に@hereを付けます
- - Lead Text
- エラー終了時に送信する通知のリード文。OSの通知に使用されます。"{message}" のようなプレースホルダーを指定できます
- - Message
- エラー終了時に送信するメッセージ本文のテンプレート。"{message}" のようなプレースホルダーを指定できます
- - Color
- エラー終了時に送信するメッセージのアタッチメントに指定する色(デフォルト:Slackの "danger" と同じ赤色)
- - Screenshot
- エラー終了時にスクリーンショットを撮影します(デフォルト: on)
- - Normally terminated report
- 正常終了時にもレポートを送信します(デフォルト: off)
+ - メンション宛先チームID
- エラー終了時に送信する通知をメンションするチームのIDをカンマ区切りで指定します
+ - @hereをつける
- エラー終了時に送信する通知に@hereを付けます
+ - リード文
- エラー終了時に送信する通知のリード文。OSの通知に使用されます。"{message}" のようなプレースホルダーを指定できます
+ - メッセージ
- エラー終了時に送信するメッセージ本文のテンプレート。"{message}" のようなプレースホルダーを指定できます
+ - 色
- エラー終了時に送信するメッセージのアタッチメントに指定する色(デフォルト:Slackの "danger" と同じ赤色)
+ - スクリーンショット
- エラー終了時にスクリーンショットを撮影します(デフォルト: on)
+ - 正常終了時にも送信
- 正常終了時にもレポートを送信します(デフォルト: off)
Slack Botは次のページで作成できます。
@@ -542,38 +558,9 @@ Assembly Definition File (asmdef) のAuto Referencedをoff、Define Constraints
を選択することで生成できます。
-### カスタムAgent
-
-カスタムAgentは、`Anjin.Agents.AbstractAgent` を継承して作ります。
-メソッド `UniTask Run(CancellationToken)` に、Agentが実行する処理を実装するだけです。
-
-`AbstractAgent` に定義された以下のフィールドを利用できます。各インスタンスは `Run` メソッド呼び出し前に設定されています。
-
-- `Logger` : `UnityEngine.ILogger` の実装です。AutopilotSettingsで設定されたLoggerがセットされます。Agent内のログ出力にはこちらを使用してください
-- `Random` : `Anjin.Utilities.IRandom` の実装です。AutopilotSettingsもしくは起動時引数で指定されたシードから作られています
-
-なお、`[CreateAssetMenu]`アトリビュートを設定しておくとコンテキストメニューからインスタンス生成ができて便利です。
-
-
-### カスタムLogger
-
-カスタムLoggerは、`Anjin.Logers.AbstractLoggerAsset` を継承して作ります。
-`UnityEngine.ILogger` の実装を返すプロパティ `Logger { get; }` を実装する必要があります。
-
-なお、`[CreateAssetMenu]`アトリビュートを設定しておくとコンテキストメニューからインスタンス生成ができて便利です。
-
-
-### カスタムReporter
-
-カスタムReporterは、`Anjin.Reporters.AbstractReporter` を継承して作ります。
-メソッド `UniTask PostReportAsync()` を実装するだけです。
-
-なお、`[CreateAssetMenu]`アトリビュートを設定しておくとコンテキストメニューからインスタンス生成ができて便利です。
-
-
### ゲームタイトル固有の初期化処理
-ゲームタイトル固有の初期化処理が必要な場合、初期化を行なう `static` メソッドに `InitializeOnLaunchAutopilot` 属性を付与してください。
+ゲームタイトル固有の初期化処理が必要な場合、初期化を行なう静的メソッドに `InitializeOnLaunchAutopilot` 属性を付与してください。
オートパイロットの起動処理の中でメソッドを呼び出します。
```csharp
@@ -602,6 +589,35 @@ private static async UniTask InitializeOnLaunchAutopilotMethodAsync()
> また`RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)`で、Configurable Enter Play Modeのための初期化処理を実装しています。
+### カスタムAgent
+
+カスタムAgentは、`Anjin.Agents.AbstractAgent` を継承して作ります。
+メソッド `UniTask Run(CancellationToken)` に、Agentが実行する処理を実装するだけです。
+
+`AbstractAgent` に定義された以下のフィールドを利用できます。各インスタンスは `Run` メソッド呼び出し前に設定されています。
+
+- `Logger` : `UnityEngine.ILogger` の実装です。AutopilotSettingsで設定されたLoggerがセットされます。Agent内のログ出力にはこちらを使用してください
+- `Random` : `Anjin.Utilities.IRandom` の実装です。AutopilotSettingsもしくは起動時引数で指定されたシードから作られています
+
+なお、`[CreateAssetMenu]`アトリビュートを設定しておくとコンテキストメニューからインスタンス生成ができて便利です。
+
+
+### カスタムLogger
+
+カスタムLoggerは、`Anjin.Logers.AbstractLoggerAsset` を継承して作ります。
+`UnityEngine.ILogger` の実装を返すプロパティ `Logger { get; }` を実装する必要があります。
+
+なお、`[CreateAssetMenu]`アトリビュートを設定しておくとコンテキストメニューからインスタンス生成ができて便利です。
+
+
+### カスタムReporter
+
+カスタムReporterは、`Anjin.Reporters.AbstractReporter` を継承して作ります。
+メソッド `UniTask PostReportAsync()` を実装するだけです。
+
+なお、`[CreateAssetMenu]`アトリビュートを設定しておくとコンテキストメニューからインスタンス生成ができて便利です。
+
+
## Anjin Annotations
@@ -627,6 +643,46 @@ Anjinの操作を制御するためのアノテーションを定義していま
+## Multiplayer Play Mode パッケージと使用する
+
+Unity 6以降で利用できる [Multiplayer Play Mode](https://docs.unity3d.com/Packages/com.unity.multiplayer.playmode@latest)(以下MPPM)パッケージを使用することで、マルチプレイ対応ゲームの動作確認を簡単に行えるようになりました。
+
+AnjinをMPPMパッケージと使用するときの注意点を以下に示します。
+MPPMパッケージ v1.3.1で確認しています。
+
+
+### Virtual Playersで実行する
+
+[Virtual Players](https://docs-multiplayer.unity3d.com/mppm/current/virtual-players/) で実行する場合、編集モードからAutopilotSettingsファイルの **実行** ボタンをクリックすると、すべてのVirtual Playerでオートパイロットが起動します。
+
+再生モードからの起動および、プレイヤーによって異なるAutopilotSettingsを使用することはできません。
+プレイヤーごとに異なる振る舞いを指示するには、[タグ](https://docs-multiplayer.unity3d.com/mppm/current/player-tags/) によって分岐するカスタムAgentを実装する必要があります。
+
+AutopilotSettingsの「出力ルートパス」に相対パスを指定したとき、起点は各Virtual Playerのディレクトリになります。
+従って、FileLoggerやスクリーンショットはVirtual Playerごとに保全されます。
+
+> [!CAUTION]
+> `UGUIPlaybackAgent` が依存しているAutomated QAパッケージは、出力ファイルを `Application.persistentDataPath` に書き出します。
+> すべてのVirtual Playerが同じファイルに書き込もうとするため、コンソールにエラーが出力されます。
+
+> [!WARNING]
+> Virtual PlayersにはAssets下のファイルがシンボリックリンクで共有されます。
+> そのため、インスペクタで設定を変更したときは、再実行する前にメニューの **File > Save (command + S)** で保存する必要があります。
+
+
+### Play Mode Scenariosで実行する
+
+[Play Mode Scenarios](https://docs-multiplayer.unity3d.com/mppm/current/play-mode-scenario/play-mode-scenario-about/) で実行する場合、Anjinを組み込んだプレイヤービルドが必要になります。
+ビルド方法については [プレイヤービルドでの実行](#プレイヤービルドでの実行実験的機能) を参照してください。
+
+Play Mode Scenariosではプレイヤーごとにコマンドライン引数を指定して起動することができるため、異なるAutopilotSettingsファイルを使用できます。
+
+> [!CAUTION]
+> `UGUIPlaybackAgent` が依存しているAutomated QAパッケージは、出力ファイルを `Application.persistentDataPath` に書き出します。
+> すべてのVirtual Playerが同じファイルに書き込もうとするため、コンソールにエラーが出力されます。
+
+
+
## プレイヤービルドでの実行[実験的機能]
Anjinをプレイヤービルドに含めることで、プレイヤー(実機)でもオートパイロットを実行できます。
@@ -777,7 +833,7 @@ Pull requestには `enhancement`, `bug`, `chore`, `documentation` といった
おおまかな機能追加の受け入れ方針は次のとおりです。
- すべてのビルトイン機能は、Unityエディタのインスペクタウィンドウで設定を完結して使用できること
-- `Autopilot` 本体への機能追加は極力避け、Agentなどによる拡張を検討する
+- Autopilot本体への機能追加は極力避け、Agentなどによる拡張を検討する
- 汎用的でないAgentの追加は控える。ブログやGistでの公開、もしくはSamplesに置くことを検討する
diff --git a/Runtime/AgentDispatcher.cs b/Runtime/AgentDispatcher.cs
index 47f6e72..56570a2 100644
--- a/Runtime/AgentDispatcher.cs
+++ b/Runtime/AgentDispatcher.cs
@@ -39,7 +39,7 @@ public class AgentDispatcher : IAgentDispatcher
private readonly RandomFactory _randomFactory;
///
- /// Constructor
+ /// Constructor.
///
///
///
@@ -57,7 +57,7 @@ public void Dispose()
{
foreach (var inspector in AgentInspector.Instances)
{
- _logger.Log($"Destroy running agent: {inspector.gameObject.name}");
+ _logger.Log($"Destroy running Agent: {inspector.gameObject.name}");
Object.Destroy(inspector.gameObject);
}
@@ -87,12 +87,12 @@ public bool DispatchByScene(Scene scene, bool fallback = true)
{
if (_settings.fallbackAgent && fallback)
{
- _logger.Log($"Use fallback agent. scene: {scene.path}");
+ _logger.Log($"Use fallback Agent. Scene: {scene.name}");
agent = _settings.fallbackAgent;
}
else
{
- _logger.Log(LogType.Warning, $"Agent not found by scene: {scene.name}");
+ _logger.Log(LogType.Warning, $"Agent not specified for Scene: {scene.name}");
}
}
@@ -127,7 +127,7 @@ private void DispatchAgent(AbstractAgent agent, bool dontDestroyOnLoad = false)
}
var token = inspector.gameObject.GetCancellationTokenOnDestroy();
- _logger.Log($"Dispatch agent: {agentName}");
+ _logger.Log($"Dispatch Agent: {agentName}");
agent.Run(token).Forget(); // Agent also dies when GameObject is destroyed
}
}
diff --git a/Runtime/Autopilot.cs b/Runtime/Autopilot.cs
index dc85927..a3727db 100644
--- a/Runtime/Autopilot.cs
+++ b/Runtime/Autopilot.cs
@@ -203,7 +203,7 @@ private static void OnExitPlayModeToTerminateEditor(PlayModeStateChange playMode
// Exit Unity when returning from play mode to edit mode.
// Because it may freeze when exiting without going through edit mode.
var exitCode = (int)AutopilotState.Instance.exitCode;
- Debug.Log($"Exit Unity-editor by autopilot, exit code: {exitCode}");
+ Debug.Log($"Exit Unity-editor by Autopilot, exit code: {exitCode}");
EditorApplication.Exit(exitCode);
}
diff --git a/Runtime/Launcher.cs b/Runtime/Launcher.cs
index 1340c06..fea309a 100644
--- a/Runtime/Launcher.cs
+++ b/Runtime/Launcher.cs
@@ -124,7 +124,7 @@ internal static async UniTaskVoid LaunchAutopilot()
var logger = Debug.unityLogger; // Note: Logger is not initialized yet.
const ExitCode ExitCode = ExitCode.AutopilotLaunchingFailed;
- const string Caller = "Autopilot launcher";
+ const string Caller = "Launcher";
Debug.Log("Cancel launching Autopilot");
TeardownLaunchAutopilotAsync(state, logger, ExitCode, Caller).Forget();
return;
diff --git a/Tests/Runtime/AgentDispatcherTest.cs b/Tests/Runtime/AgentDispatcherTest.cs
index 08dbda7..f47d588 100644
--- a/Tests/Runtime/AgentDispatcherTest.cs
+++ b/Tests/Runtime/AgentDispatcherTest.cs
@@ -95,7 +95,7 @@ public async Task DispatchByScene_NoSceneAgentMapsAndFallbackAgent_AgentIsNotDis
await SceneManagerHelper.LoadSceneAsync(TestScenePath);
- LogAssert.Expect(LogType.Warning, "Agent not found by scene: Buttons");
+ LogAssert.Expect(LogType.Warning, "Agent not specified for Scene: Buttons");
Assert.That(SpyAliveCountAgent.AliveInstances, Is.EqualTo(0));
}
diff --git a/package.json b/package.json
index 83a4f4c..8fd6009 100644
--- a/package.json
+++ b/package.json
@@ -28,6 +28,7 @@
"keywords": [
"integration testing",
"monkey testing",
+ "gameplay testing",
"test"
],
"license": "MIT",