void OnEnable()
        {
            // State machine behaviour
            smb = target as TorySceneSMB;

            // Serialzed properties
            first           = serializedObject.FindProperty("first");
            loadUnityScene  = serializedObject.FindProperty("loadUnityScene");
            unitySceneIndex = serializedObject.FindProperty("unitySceneIndex");
            stageCount      = serializedObject.FindProperty("stageCount");

            // Access to the selected state or state machine in animator controller.
            // Ref.: https://docs.unity3d.com/ScriptReference/Selection.html
            // Ref.: https://docs.unity3d.com/ScriptReference/Animations.AnimatorController.html
            s  = Selection.activeObject as AnimatorState;
            sm = Selection.activeObject as AnimatorStateMachine;

            // Find the animator controller of this state machine behavior belongs.
            // Ref.: https://forum.unity.com/threads/get-animator-in-editor-mode.461838/
            EditorWindow w = EditorWindow.focusedWindow;

            System.Type  type = w.GetType();
            PropertyInfo prop = type.GetProperty("animatorController", (BindingFlags.NonPublic |
                                                                        BindingFlags.Public |
                                                                        BindingFlags.Instance));

            if (prop != null)
            {
                ac = prop.GetValue(w, null) as AnimatorController;
            }
        }
        void Init(TorySceneSMB smb)
        {
            this.smb = smb;
            if (smb == null)
            {
                Debug.LogError("[ToryScene] Please confirm the ToryScene in the Animator. " +
                               "There is the invalid TorySceneSMB component in the ToryScene layer.");
                return;
            }

            SetFirst();

            // Set the current tory scene.
            Current = First;
        }