예제 #1
0
 void DrawTyperWord(TyperRhythm word, float width)
 {
     EditorGUILayout.BeginVertical();
     EditorGUILayout.TextField(word.Word.ToString(), _wordTextStyle, GUILayout.Width(width), GUILayout.Height(width));
     word.WaitTime = EditorGUILayout.FloatField(word.WaitTime, GUILayout.Width(width));
     EditorGUILayout.EndVertical();
 }
예제 #2
0
    void DrawDialogueView(DialogueAsset asset)
    {
        EditorGUILayout.BeginHorizontal();
        EditorGUIUtility.labelWidth = 60;
        asset.DialogType            = (E_DialogType)EditorGUILayout.EnumPopup("对话框类型", asset.DialogType);
        if (asset.DialogType == E_DialogType.FullScreen)
        {
            EditorGUIUtility.labelWidth = 90;
            asset.IsNewTalk             = EditorGUILayout.Toggle("是否为新段落", asset.IsNewTalk);
            asset.IsNewPage             = EditorGUILayout.Toggle("是否为新的一页", asset.IsNewPage);
        }
        else
        {
            asset.TalkType = (E_TalkType)EditorGUILayout.EnumPopup("内容类型", asset.TalkType);
        }
        asset.MaskType = (E_MaskType)EditorGUILayout.EnumPopup("显示动画", asset.MaskType);
        GUILayout.Label("背景");
        asset.Background = (GameObject)EditorGUILayout.ObjectField(asset.Background, typeof(GameObject), false);
        asset.Bgm        = (AudioClip)EditorGUILayout.ObjectField("背景音乐", asset.Bgm, typeof(AudioClip), false);
        EditorGUILayout.EndHorizontal();


        if (asset.DialogType == E_DialogType.Normal)
        {
            EditorGUIUtility.labelWidth = 60;

            EditorGUILayout.BeginHorizontal();
            asset.LeftBody         = (GameObject)EditorGUILayout.ObjectField("立绘(左)", asset.LeftBody, typeof(GameObject), false);
            asset.LeftBodyShowType = (E_BodyShowType)EditorGUILayout.EnumPopup("显示类型", asset.LeftBodyShowType);
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.BeginHorizontal();
            asset.RightBody         = (GameObject)EditorGUILayout.ObjectField("立绘(右)", asset.RightBody, typeof(GameObject), false);
            asset.RightBodyShowType = (E_BodyShowType)EditorGUILayout.EnumPopup("显示类型", asset.RightBodyShowType);
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.BeginHorizontal();
            asset.CenterBody         = (GameObject)EditorGUILayout.ObjectField("立绘(中)", asset.CenterBody, typeof(GameObject), false);
            asset.CenterBodyShowType = (E_BodyShowType)EditorGUILayout.EnumPopup("显示类型", asset.CenterBodyShowType);
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.BeginHorizontal();
            asset.BottomBody         = (GameObject)EditorGUILayout.ObjectField("立绘(下)", asset.BottomBody, typeof(GameObject), false);
            asset.BottomBodyShowType = (E_BodyShowType)EditorGUILayout.EnumPopup("显示类型", asset.BottomBodyShowType);
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.BeginHorizontal();
            EditorGUIUtility.labelWidth = 60;
            asset.NamePos    = (E_NamePos)EditorGUILayout.EnumPopup("名字位置", asset.NamePos);
            asset.TalkerName = EditorGUILayout.TextField("角色名", asset.TalkerName);

            EditorGUIUtility.labelWidth = 90;
            asset.DubDelay = EditorGUILayout.IntField("配音等待字数", asset.DubDelay);
            asset.Dub      = (AudioClip)EditorGUILayout.ObjectField("角色配音", asset.Dub, typeof(AudioClip), false);
            EditorGUILayout.EndHorizontal();
        }
        EditorGUILayout.BeginHorizontal();
        asset.LanguageType = (E_LanguageType)EditorGUILayout.EnumPopup("语言类型", asset.LanguageType);
        if (asset.LanguageType != _lastLanguageType)
        {
            _lastLanguageType = asset.LanguageType;
        }
        EditorGUILayout.EndHorizontal();

        GUILayout.Label("事件列表");
        _eventScrollPos = EditorGUILayout.BeginScrollView(_eventScrollPos, GUILayout.Height(90));
        _talkEventList?.DoLayoutList();
        EditorGUILayout.EndScrollView();


        GUILayout.Label("对话内容");
        EditorGUILayout.BeginHorizontal();
        asset.LanguageDict.TryGetValue(asset.LanguageType, out ContentData data);
        data.Content = EditorGUILayout.TextArea(data.Content, GUILayout.Height(80));
        if (GUILayout.Button("生成", GUILayout.Width(80), GUILayout.Height(80)))
        {
            data.WordList = new List <TyperRhythm>();


            for (int i = 0; i < data.Content.Length; i++)
            {
                bool   isDirective = false;
                string word        = null;
                if (data.Content[i] == '<')
                {
                    int count = 0;
                    for (int j = i; j < data.Content.Length; j++)
                    {
                        word += data.Content[j];
                        if (data.Content[j] == '>')
                        {
                            Regex reg = new Regex(@"<c=[0-9a-fA-F]{6}");
                            if (word.Equals("<b>") || word.Equals("</b>") || reg.IsMatch(word) || word.Equals("</c>"))
                            {
                                isDirective = true;
                            }
                            break;
                        }
                        count++;
                    }
                    if (isDirective)
                    {
                        i += count;
                    }
                    else
                    {
                        word = data.Content[i].ToString();
                    }
                }
                else
                {
                    word = data.Content[i].ToString();
                }
                TyperRhythm typerWord = new TyperRhythm(word, 0.1f, isDirective);
                data.WordList.Add(typerWord);
            }

            //SaveDialogAsset(_curDialogAsset, _curDialogAsset);
        }
        EditorGUILayout.EndHorizontal();
        if (data.WordList.Count > 0)
        {
            DrawTyperWordList(data.WordList);
        }
    }