[Unity實戰]劇情對話(二),unity實戰劇情對話

來源:互聯網
上載者:User

[Unity實戰]劇情對話(二),unity實戰劇情對話

在上一篇文章中,我們在CommandManager中直接寫入一個個的指令,實際上這樣是很不好的,因為一個遊戲可能會出現很多的劇情動畫,那麼不就是要寫n個類嗎?而且修改起來也不是很好的。所以一個比較好的方法就是寫一個編輯器類。


以下是本人寫的一個編輯器類,功能還不是很完善,例如可以加入"插入命令","從文本中讀取命令"等等等的功能,不過,先將就用了。。

using UnityEngine;using UnityEditor;using System.Collections.Generic;public enum Option{    CommandDestory,    CommandDialogue,    CommandDialogueModeEnter,    CommandDialogueModeExit,    CommandGenerate,    CommandMove,    CommandMusic,    CommandPlayAnim,    CommandRotate,    CommandWait}public class Window : EditorWindow{    List<Option> options = new List<Option>();    List<string[]> strings = new List<string[]>();    List<int[]> ints = new List<int[]>();    List<float[]> floats = new List<float[]>();    List<Vector3[]> vector3s = new List<Vector3[]>();    Vector2 v2 = new Vector2(0, 0);//捲軸參數    [MenuItem("Window/My Window")]    static void Init()    {        EditorWindow.GetWindow(typeof(Window));    }    void OnGUI()    {        if (GUILayout.Button("儲存命令"))        {         }        if (GUILayout.Button("添加命令"))        {            Option x = Option.CommandDialogueModeEnter;            options.Add(x);            string[] a = new string[5];            strings.Add(a);            int[] b = new int[5];            ints.Add(b);            float[] c = new float[5];            floats.Add(c);            Vector3[] d = new Vector3[5];            vector3s.Add(d);        }        if (GUILayout.Button("刪除命令"))        {            options.RemoveAt(options.Count - 1);            strings.RemoveAt(options.Count - 1);            ints.RemoveAt(options.Count - 1);            floats.RemoveAt(options.Count - 1);            vector3s.RemoveAt(options.Count - 1);        }        v2 = EditorGUILayout.BeginScrollView(v2,false,true,null);        for (int i = 0; i < options.Count; i++)        {            options[i] = (Option)EditorGUILayout.EnumPopup("選項" + i, options[i]);            switch (options[i])            {                case Option.CommandDestory:                    strings[i][0] = EditorGUILayout.TextField("物體名字", strings[i][0]);                    break;                case Option.CommandDialogue:                    strings[i][0] = EditorGUILayout.TextField("xml文本名字", strings[i][0]);                    ints[i][0] = EditorGUILayout.IntField("開始序號", ints[i][0]);                    ints[i][1] = EditorGUILayout.IntField("結束序號", ints[i][1]);                    ints[i][2] = EditorGUILayout.IntField("點擊後執行的步驟數", ints[i][2]);                    break;                case Option.CommandDialogueModeEnter:                    break;                case Option.CommandDialogueModeExit:                    break;                case Option.CommandGenerate:                    strings[i][0] = EditorGUILayout.TextField("物體名字", strings[i][0]);                    vector3s[i][0] = EditorGUILayout.Vector3Field("產生位置", vector3s[i][0]);                    vector3s[i][1] = EditorGUILayout.Vector3Field("產生角度", vector3s[i][1]);                    break;                case Option.CommandMove:                    strings[i][0] = EditorGUILayout.TextField("物體名字", strings[i][0]);                    vector3s[i][0] = EditorGUILayout.Vector3Field("終點位置", vector3s[i][0]);                    floats[i][0] = EditorGUILayout.FloatField("所用時間", floats[i][0]);                    break;                case Option.CommandMusic:                    strings[i][0] = EditorGUILayout.TextField("音樂名字", strings[i][0]);                    break;                case Option.CommandPlayAnim:                    strings[i][0] = EditorGUILayout.TextField("物體名字", strings[i][0]);                    ints[i][0] = EditorGUILayout.IntField("動畫狀態", ints[i][0]);                    break;                case Option.CommandRotate:                    strings[i][0] = EditorGUILayout.TextField("物體名字", strings[i][0]);                    vector3s[i][0] = EditorGUILayout.Vector3Field("終點角度", vector3s[i][0]);                    floats[i][0] = EditorGUILayout.FloatField("所用時間", floats[i][0]);                    break;                case Option.CommandWait:                    floats[i][0] = EditorGUILayout.FloatField("等待時間", floats[i][0]);                    break;                default:                    break;            }        }        EditorGUILayout.EndScrollView();    }}


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.