コード例 #1
0
        /// <summary>
        /// 绘制基础属性
        /// </summary>
        /// <returns>绘制高度</returns>
        private int OnBaseGUI(HTFFunc <string, string> getWord, bool isLockID)
        {
            int height = 0;

            GUILayout.BeginHorizontal();
            GUILayout.Label(getWord("ID") + ":", GUILayout.Width(50));
            if (IsSelected)
            {
                GUI.enabled = !isLockID;
                GUID        = EditorGUILayout.TextField(GUID);
                GUI.enabled = true;
            }
            else
            {
                EditorGUILayout.LabelField(GUID);
            }
            GUILayout.EndHorizontal();

            height += 20;

            GUILayout.BeginHorizontal();
            GUILayout.Label(getWord("Name") + ":", GUILayout.Width(50));
            if (IsSelected)
            {
                Name = EditorGUILayout.TextField(Name);
            }
            else
            {
                EditorGUILayout.LabelField(Name);
            }
            GUILayout.EndHorizontal();

            height += 20;

            GUILayout.BeginHorizontal();
            GUILayout.Label(getWord("Details") + ":", GUILayout.Width(50));
            if (IsSelected)
            {
                Details = EditorGUILayout.TextField(Details);
            }
            else
            {
                EditorGUILayout.LabelField(Details);
            }
            GUILayout.EndHorizontal();

            height += 20;

            TaskGameObject.DrawField(Target, getWord("Target") + ":", 50, Anchor.width, getWord("Copy"), getWord("Paste"));

            height += 20;

            return(height);
        }
コード例 #2
0
        /// <summary>
        /// 绘制基础属性
        /// </summary>
        /// <returns>绘制高度</returns>
        private int OnBaseGUI(HTFFunc <string, string> getWord, bool isLockID)
        {
            int height = 0;

            GUILayout.BeginHorizontal();
            GUILayout.Label(getWord("ID") + ":", GUILayout.Width(50));
            GUI.enabled = !isLockID;
            GUID        = EditorGUILayout.TextField(GUID);
            GUI.enabled = true;
            GUILayout.EndHorizontal();

            height += 20;

            GUILayout.BeginHorizontal();
            GUILayout.Label(getWord("Name") + ":", GUILayout.Width(50));
            Name = EditorGUILayout.TextField(Name);
            GUILayout.EndHorizontal();

            height += 20;

            GUILayout.BeginHorizontal();
            GUILayout.Label(getWord("Details") + ":", GUILayout.Width(50));
            Details = EditorGUILayout.TextField(Details);
            GUILayout.EndHorizontal();

            height += 20;

            GUILayout.BeginHorizontal();
            GUILayout.Label(getWord("Points") + ":", GUILayout.Width(50));
            GUILayout.Label(Points.Count.ToString());
            GUILayout.EndHorizontal();

            height += 20;

            TaskGameObject.DrawField(Target, getWord("Target") + ":", 50, _width, getWord("Copy"), getWord("Paste"));

            height += 20;

            return(height);
        }
コード例 #3
0
ファイル: TaskPointBase.cs プロジェクト: sambsp/HTFramework
        protected void TaskGameObjectField(ref TaskGameObject taskGameObject, string name, float nameWidth)
        {
            if (taskGameObject == null)
            {
                taskGameObject = new TaskGameObject();
            }

            GUILayout.BeginHorizontal();

            GUIContent gUIContent = new GUIContent(name);

            gUIContent.tooltip = "GUID: " + taskGameObject.GUID;
            GUILayout.Label(gUIContent, GUILayout.Width(nameWidth));

            GUI.color = taskGameObject.AgentEntity ? Color.white : Color.gray;
            GameObject newEntity = EditorGUILayout.ObjectField(taskGameObject.AgentEntity, typeof(GameObject), true, GUILayout.Width(Anchor.width - nameWidth - 35)) as GameObject;

            if (newEntity != taskGameObject.AgentEntity)
            {
                if (newEntity != null)
                {
                    TaskTarget target = newEntity.GetComponent <TaskTarget>();
                    if (!target)
                    {
                        target = newEntity.AddComponent <TaskTarget>();
                    }
                    if (target.GUID == "<None>")
                    {
                        target.GUID = Guid.NewGuid().ToString();
                    }
                    taskGameObject.AgentEntity = newEntity;
                    taskGameObject.GUID        = target.GUID;
                    taskGameObject.Path        = newEntity.transform.FullName();
                }
            }
            GUI.color = Color.white;

            if (taskGameObject.AgentEntity == null && taskGameObject.GUID != "<None>")
            {
                taskGameObject.AgentEntity = GameObject.Find(taskGameObject.Path);
                if (taskGameObject.AgentEntity == null)
                {
                    TaskTarget[] targets = FindObjectsOfType <TaskTarget>();
                    foreach (TaskTarget target in targets)
                    {
                        if (taskGameObject.GUID == target.GUID)
                        {
                            taskGameObject.AgentEntity = target.gameObject;
                            taskGameObject.Path        = target.transform.FullName();
                            break;
                        }
                    }
                }
                else
                {
                    TaskTarget target = taskGameObject.AgentEntity.GetComponent <TaskTarget>();
                    if (!target)
                    {
                        target      = taskGameObject.AgentEntity.AddComponent <TaskTarget>();
                        target.GUID = taskGameObject.GUID;
                    }
                }
            }

            gUIContent         = EditorGUIUtility.IconContent("TreeEditor.Trash");
            gUIContent.tooltip = "Delete";
            GUI.enabled        = taskGameObject.GUID != "<None>";
            if (GUILayout.Button(gUIContent, "InvisibleButton", GUILayout.Width(20), GUILayout.Height(20)))
            {
                taskGameObject.AgentEntity = null;
                taskGameObject.GUID        = "<None>";
                taskGameObject.Path        = "";
            }
            GUI.enabled = true;

            GUILayout.EndHorizontal();
        }
コード例 #4
0
        /// <summary>
        /// 绘制字段
        /// </summary>
        /// <param name="taskGameObject">目标物体</param>
        /// <param name="name">绘制名称</param>
        /// <param name="nameWidth">名称宽度</param>
        /// <param name="totalWidth">总宽度</param>
        /// <param name="copy">复制菜单的名称</param>
        /// <param name="paste">粘贴菜单的名称</param>
        public static void DrawField(TaskGameObject taskGameObject, string name, float nameWidth, float totalWidth, string copy = "Copy", string paste = "Paste")
        {
            if (taskGameObject == null)
            {
                return;
            }

            GUILayout.BeginHorizontal();

            GUIContent gUIContent = new GUIContent(name);

            gUIContent.tooltip = "GUID: " + taskGameObject.GUID;
            if (GUILayout.Button(gUIContent, "Label", GUILayout.Width(nameWidth)))
            {
                GenericMenu gm = new GenericMenu();
                if (taskGameObject.GUID == "<None>")
                {
                    gm.AddDisabledItem(new GUIContent(copy));
                }
                else
                {
                    gm.AddItem(new GUIContent(copy), false, () =>
                    {
                        GUIUtility.systemCopyBuffer = taskGameObject.GUID;
                    });
                }
                if (string.IsNullOrEmpty(GUIUtility.systemCopyBuffer))
                {
                    gm.AddDisabledItem(new GUIContent(paste));
                }
                else
                {
                    gm.AddItem(new GUIContent(paste), false, () =>
                    {
                        taskGameObject.GUID = GUIUtility.systemCopyBuffer;
                    });
                }
                gm.ShowAsContext();
            }

            GUI.color = (taskGameObject.GUID != "<None>") ? Color.white : Color.gray;
            GameObject newEntity = EditorGUILayout.ObjectField(taskGameObject.AgentEntity, typeof(GameObject), true, GUILayout.Width(totalWidth - nameWidth - 35)) as GameObject;

            if (newEntity != taskGameObject.AgentEntity)
            {
                if (newEntity != null)
                {
                    TaskTarget target = newEntity.GetComponent <TaskTarget>();
                    if (!target)
                    {
                        target = newEntity.AddComponent <TaskTarget>();
                        EditorUtility.SetDirty(newEntity);
                    }
                    if (target.GUID == "<None>")
                    {
                        target.GUID = Guid.NewGuid().ToString();
                        EditorUtility.SetDirty(target);
                    }
                    taskGameObject.AgentEntity = newEntity;
                    taskGameObject.GUID        = target.GUID;
                    taskGameObject.Path        = newEntity.transform.FullName();
                }
            }
            GUI.color = Color.white;

            SearchTaskTarget(taskGameObject);

            gUIContent.text    = null;
            gUIContent.image   = EditorGUIUtility.IconContent("TreeEditor.Trash").image;
            gUIContent.tooltip = "Delete";
            GUI.enabled        = taskGameObject.GUID != "<None>";
            if (GUILayout.Button(gUIContent, "InvisibleButton", GUILayout.Width(20), GUILayout.Height(20)))
            {
                taskGameObject.AgentEntity = null;
                taskGameObject.GUID        = "<None>";
                taskGameObject.Path        = "";
            }
            GUI.enabled = true;

            GUILayout.EndHorizontal();
        }
コード例 #5
0
        /// <summary>
        /// 在场景中搜索任务目标
        /// </summary>
        private static void SearchTaskTarget(TaskGameObject taskGameObject)
        {
            if (taskGameObject.GUID == "<None>")
            {
                return;
            }

            if (taskGameObject.AgentEntity != null)
            {
                return;
            }

            PrefabStage prefabStage = PrefabStageUtility.GetCurrentPrefabStage();

            if (prefabStage != null)
            {
                taskGameObject.AgentEntity = prefabStage.prefabContentsRoot.FindChildren(taskGameObject.Path);
                if (taskGameObject.AgentEntity == null)
                {
                    TaskTarget[] targets = prefabStage.prefabContentsRoot.GetComponentsInChildren <TaskTarget>(true);
                    foreach (TaskTarget target in targets)
                    {
                        if (taskGameObject.GUID == target.GUID)
                        {
                            taskGameObject.AgentEntity = target.gameObject;
                            taskGameObject.Path        = target.transform.FullName();
                            taskGameObject.Path        = taskGameObject.Path.Substring(taskGameObject.Path.IndexOf("/") + 1);
                            break;
                        }
                    }
                }
            }
            else
            {
                taskGameObject.AgentEntity = GameObject.Find(taskGameObject.Path);
                if (taskGameObject.AgentEntity == null)
                {
                    TaskTarget[] targets = UnityEngine.Object.FindObjectsOfType <TaskTarget>();
                    foreach (TaskTarget target in targets)
                    {
                        if (taskGameObject.GUID == target.GUID)
                        {
                            taskGameObject.AgentEntity = target.gameObject;
                            taskGameObject.Path        = target.transform.FullName();
                            break;
                        }
                    }
                }
            }

            if (taskGameObject.AgentEntity != null)
            {
                TaskTarget target = taskGameObject.AgentEntity.GetComponent <TaskTarget>();
                if (!target)
                {
                    target      = taskGameObject.AgentEntity.AddComponent <TaskTarget>();
                    target.GUID = taskGameObject.GUID;
                    EditorUtility.SetDirty(taskGameObject.AgentEntity);
                }
            }
        }