public void InitOutTutorial(TutorialSupport tutoObj)
    {
        if (IsHidePanel)
        {
            Show(null);
        }

        StopAllCoroutines();
        TutoSupport = tutoObj;
        CurSortId   = tutoObj.SortId + 1;
        Tutorial    = _LowDataMgr.instance.GetLowDataFirstMainTutorial((uint)CurType, (byte)tutoObj.SortId);//무조건 첫번째것부터 뽑아온다

        if (TutoSupport != null)
        {
            TargetPanel = TutoSupport.transform;
            BlockObj.SetActive(Tutorial.ProgressType == 0);
            //ReturnType = Tutorial.ProgressType == 0 ? PrevReturnType.Not : PrevReturnType.Close;
            DefaultData();
        }
    }
    void OnDisable()
    {
        if (!UIMgr.instance.IsActiveTutorial || !IsEnable || IsOnClick || SceneManager.instance._CurTutorial != TutoType || SceneManager.instance.IsClearTutorial(TutoType))
        {
            return;
        }

        Quest.MainTutorialInfo info = _LowDataMgr.instance.GetLowDataFirstMainTutorial((uint)TutoType, (byte)SortId);
        if (info.ProgressType != 1)
        {
            return;
        }

        SceneManager.instance.CurTutorial = TutoType;//다음으로 넘김.
        UIBasePanel basePanel = UIMgr.GetUIBasePanel("UIPopup/TutorialPopup");

        if (basePanel != null && !basePanel.IsHidePanel)
        {
            basePanel.Hide();
        }
    }
    public virtual bool OnSubTutorial()
    {
        if (SceneManager.instance.CurTutorial == TutorialType.ALL_CLEAR)
        {
            return(false);
        }

        if (TutoSupportList == null || TutoSupportList.Count <= 0)
        {
            TutoSupportList = UIHelper.FindComponents <TutorialSupport>(transform);

            for (int i = 0; i < TutoSupportList.Count; i++)
            {
                if (TutoSupportList[i].NextTuto != null)
                {
                    continue;
                }

                for (int j = 0; j < TutoSupportList.Count; j++)
                {
                    if (TutoSupportList[j].TutoType != TutoSupportList[i].TutoType)
                    {
                        continue;
                    }
                    else if (TutoSupportList[j].SortId != TutoSupportList[i].SortId + 1)
                    {
                        continue;
                    }

                    TutoSupportList[i].NextTuto = TutoSupportList[j];
                    break;
                }
            }
        }

        if (TutoSupportList.Count <= 0)
        {
            return(false);
        }

        int tutoType = 1;
        int arr      = 0;

        while (tutoType < (int)TutorialType.MAX)
        {
            if (TutoSupportList.Count <= arr)
            {
                arr = 0;
                ++tutoType;
            }
            TutorialSupport support = TutoSupportList[arr++];

            if (support.TutoType != SceneManager.instance.CurTutorial)
            {
                if (!support.ChangeTutoType() || support.TutoType != SceneManager.instance.CurTutorial)
                {
                    continue;
                }
            }
            Quest.MainTutorialInfo tutoLowData = _LowDataMgr.instance.GetLowDataFirstMainTutorial((uint)support.TutoType, 1);
            if (tutoLowData == null || NetData.instance.UserLevel < tutoLowData.OpenLevel)
            {
                continue;
            }

            if (support.OnTutoSupportStart())
            {
                return(true);
            }
        }
        return(false);
    }
    void NextGuide()
    {
        //Debug.LogError(string.Format("type={0}, ID={1}, count={2}", uiMgr.CurTutorial, Tutorial != null ? Tutorial.ID : 0, SubTalkList.Count));
        if (Tutorial.GuideCount <= GuideTalkCount)
        {
            for (int i = 0; i < GuideObj.Length; i++)
            {
                GuideObj[i].SetActive(false);
            }

            //AniRunTime = -1;
            if (TownState.TownActive)
            {
                if (0 < Tutorial.NextTutorial)
                {
                    Quest.MainTutorialInfo tutoInfo = _LowDataMgr.instance.GetLowDataMainTutorial(Tutorial.NextTutorial);
                }
                else
                {
                    SceneManager.instance.CurTutorial = CurType;
                    TutorialType nextType = CurType + 1;
                    StartNextTutorial(nextType);
                }
            }

            return;
        }

        string talk = null;

        switch (GuideTalkCount)
        {
        case 0:
            talk = Tutorial.GuideText1;
            break;

        case 1:
            talk = Tutorial.GuideText2;
            break;

        case 2:
            talk = Tutorial.GuideText3;
            break;

        case 3:
            talk = Tutorial.GuideText4;
            break;

        case 4:
            talk = Tutorial.GuideText5;
            break;
        }

        if (talk.Contains("\\\\\n"))
        {
            talk = talk.Replace("\\\\\n", "\n");
        }
        else if (talk.Contains("\\\\n"))
        {
            talk = talk.Replace("\\\\n", "\n");
        }
        else if (talk.Contains("\\\n"))
        {
            talk = talk.Replace("\\\n", "\n");
        }
        else if (talk.Contains("\\n"))
        {
            talk = talk.Replace("\\n", "\n");
        }

        if (talk.Contains("{0}"))
        {
            uint id     = 0;
            uint charId = NetData.instance.GetUserInfo()._userCharIndex;
            if (charId == 13000)
            {
                id = 672;
            }
            else
            {
                id = 671;
            }

            talk = string.Format(talk, _LowDataMgr.instance.GetStringCommon(id));
        }

        GuideObj[0].SetActive(Tutorial.GuideType == 0); //우
        GuideObj[1].SetActive(Tutorial.GuideType == 1); //좌
        GuideText[Tutorial.GuideType].text = talk;

        ++GuideTalkCount;

        TouchEvent.collider.enabled = GuideTalkCount < Tutorial.GuideCount;
        if (Tutorial.GuideCount <= GuideTalkCount)
        {
            SetTarget();
        }
    }