diff --git a/Editor/Localization/ja.po b/Editor/Localization/ja.po
index 6b905be..1a614d2 100644
--- a/Editor/Localization/ja.po
+++ b/Editor/Localization/ja.po
@@ -163,8 +163,9 @@ msgstr "実行"
msgid "Stop"
msgstr "停止"
-
-#: Editor/UI/Settings/AutopilotStateEditor.cs
+# requireReset HelpBox message
+msgid "Autopilot has an invalid running state. Please click the \"Reset\" button."
+msgstr "オートパイロットの実行状態が不正です。「リセット」ボタンをクリックしてください。"
# リセットボタン
msgid "Reset"
diff --git a/Editor/UI/Settings/AutopilotSettingsEditor.cs b/Editor/UI/Settings/AutopilotSettingsEditor.cs
index d6ddf54..8806022 100644
--- a/Editor/UI/Settings/AutopilotSettingsEditor.cs
+++ b/Editor/UI/Settings/AutopilotSettingsEditor.cs
@@ -60,6 +60,10 @@ public class AutopilotSettingsEditor : UnityEditor.Editor
private static readonly string s_runButton = L10n.Tr("Run");
private static readonly string s_stopButton = L10n.Tr("Stop");
+
+ private static readonly string s_requireReset = L10n.Tr("Autopilot has an invalid running state. Please click the \"Reset\" button.");
+ private static readonly string s_resetButton = L10n.Tr("Reset");
+
private const float SpacerPixels = 10f;
private const float SpacerPixelsUnderHeader = 4f;
// @formatter:on
@@ -118,7 +122,15 @@ public override void OnInspectorGUI()
GUILayout.Space(SpacerPixels);
var state = AutopilotState.Instance;
- if (state.IsRunning)
+ if (state.IsInvalidState)
+ {
+ EditorGUILayout.HelpBox(s_requireReset, MessageType.Error);
+ if (GUILayout.Button(s_resetButton))
+ {
+ state.Reset();
+ }
+ }
+ else if (state.IsRunning)
{
if (GUILayout.Button(s_stopButton))
{
diff --git a/Editor/UI/Settings/AutopilotStateEditor.cs b/Editor/UI/Settings/AutopilotStateEditor.cs
index 33d23fa..b947463 100644
--- a/Editor/UI/Settings/AutopilotStateEditor.cs
+++ b/Editor/UI/Settings/AutopilotStateEditor.cs
@@ -13,14 +13,25 @@ namespace DeNA.Anjin.Editor.UI.Settings
[CustomEditor(typeof(AutopilotState))]
public class AutopilotStateEditor : UnityEditor.Editor
{
+ // @formatter:off
+ private static readonly string s_requireReset = L10n.Tr("Autopilot has an invalid running state. Please click the \"Reset\" button.");
private static readonly string s_resetButton = L10n.Tr("Reset");
+ // @formatter:on
///
public override void OnInspectorGUI()
{
var state = AutopilotState.Instance;
- EditorGUI.BeginDisabledGroup(!state.IsRunning || EditorApplication.isPlayingOrWillChangePlaymode);
+ if (state.IsInvalidState)
+ {
+ EditorGUILayout.HelpBox(s_requireReset, MessageType.Error);
+ }
+ else
+ {
+ EditorGUI.BeginDisabledGroup(!state.IsInvalidState);
+ }
+
if (GUILayout.Button(s_resetButton))
{
state.Reset();
diff --git a/README_ja.md b/README_ja.md
index 1d0569f..eb2e55f 100644
--- a/README_ja.md
+++ b/README_ja.md
@@ -186,8 +186,8 @@ Reporterインスタンスは、UnityエディタのProjectウィンドウで右
### 1. Unityエディタ(GUI)の再生モードで実行
-実行したい設定ファイル(AutopilotSettings)をインスペクタで開き、**実行**ボタンをクリックすると、オートパイロットが起動します。
-設定された実行時間が経過するか、**停止**ボタンクリックで停止します。
+実行したい設定ファイル(AutopilotSettings)をインスペクタで開き、**実行** ボタンをクリックすると、オートパイロットが起動します。
+設定された実行時間が経過するか、**停止** ボタンクリックで停止します。
> [!TIP]
> 編集モードからオートパイロットを起動したとき、オートパイロットが停止すると編集モードに戻ります。
@@ -773,7 +773,7 @@ $(ROM) -LAUNCH_AUTOPILOT_SETTINGS Path/To/AutopilotSettings
### オートパイロットは停止しているのに AutopilotSettings の Run ボタンが表示されない
Anjinの実行状態を永続化している `AutopilotState.asset` が不正な状態になっている恐れがあります。
-インスペクタで開いて**Reset**ボタンをクリックしてください。
+インスペクタで開いて **リセット** ボタンをクリックしてください。
それでも解決しない場合、 `AutopilotState.asset` を削除してみてください。
@@ -781,7 +781,7 @@ Anjinの実行状態を永続化している `AutopilotState.asset` が不正な
### プロジェクトを再生モードにすると勝手にオートパイロットが動いてしまう
Anjinの実行状態を永続化している `AutopilotState.asset` が不正な状態になっている恐れがあります。
-インスペクタで開いて**Reset**ボタンをクリックしてください。
+インスペクタで開いて **リセット** ボタンをクリックしてください。
それでも解決しない場合、 `AutopilotState.asset` を削除してみてください。
diff --git a/Runtime/Settings/AutopilotState.cs b/Runtime/Settings/AutopilotState.cs
index 9db93b9..e37b502 100644
--- a/Runtime/Settings/AutopilotState.cs
+++ b/Runtime/Settings/AutopilotState.cs
@@ -67,6 +67,14 @@ public bool IsRunning
}
}
+#if UNITY_EDITOR
+ ///
+ /// This state Is invalid (read-only).
+ /// True if Autopilot is running and in Edit Mode, it is required to reset.
+ ///
+ internal bool IsInvalidState => IsRunning && !EditorApplication.isPlayingOrWillChangePlaymode;
+#endif
+
[NonSerialized]
private static AutopilotState s_instance;