/// <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); }
/// <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); }
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(); }
/// <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(); }
/// <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); } } }