From 2de9e6f4e3d8ac8fdea85f54b53b0a795e9e2707 Mon Sep 17 00:00:00 2001 From: chai Date: Mon, 1 Aug 2022 09:27:48 +0800 Subject: * node --- .../Tools/WorkflowVisualizer/Editor/GUIHelper.cs | 52 ++++++++- .../Assets/Tools/WorkflowVisualizer/Editor/Node.cs | 32 ------ .../Tools/WorkflowVisualizer/Editor/Node.cs.meta | 11 -- .../WorkflowVisualizer/Editor/SingleOutNode.cs | 1 - .../Editor/SingleOutNode.cs.meta | 11 -- .../WorkflowVisualizer/Editor/WorkflowEditor.cs | 121 +++++++++++++-------- .../WorkflowVisualizer/Editor/WorkflowGraph.cs | 19 ---- .../Editor/WorkflowGraph.cs.meta | 11 -- .../Editor/WorkflowGraphInspector.cs | 26 +++++ .../Editor/WorkflowGraphInspector.cs.meta | 11 ++ .../WorkflowVisualizer/Editor/WorkflowResources.cs | 37 ++++--- Erika/Assets/Tools/WorkflowVisualizer/README.txt | 11 +- .../Resources/WorkflowVisualizer/dot.png | Bin 0 -> 18297 bytes .../Resources/WorkflowVisualizer/dot.png.meta | 88 +++++++++++++++ .../Resources/WorkflowVisualizer/dot_outer.png | Bin 0 -> 18346 bytes .../WorkflowVisualizer/dot_outer.png.meta | 88 +++++++++++++++ Erika/Assets/Tools/WorkflowVisualizer/Scripts.meta | 8 ++ .../WorkflowVisualizer/Scripts/WorkflowGraph.cs | 20 ++++ .../Scripts/WorkflowGraph.cs.meta | 11 ++ .../WorkflowVisualizer/Scripts/WorkflowNode.cs | 58 ++++++++++ .../Scripts/WorkflowNode.cs.meta | 11 ++ Erika/Assets/WorkflowGraphs/README.txt | 1 - Erika/Assets/WorkflowGraphs/README.txt.meta | 7 -- Erika/Assets/WorkflowGraphs/Scripts.meta | 8 ++ .../Assets/WorkflowGraphs/Scripts/SkillWorkflow.cs | 23 ++++ .../WorkflowGraphs/Scripts/SkillWorkflow.cs.meta | 11 ++ Erika/Assets/WorkflowGraphs/Skill.asset | 14 +++ Erika/Assets/WorkflowGraphs/Skill.asset.meta | 8 ++ .../Examples/StateMachine/New State Graph.asset | 6 +- Other/NodeEditorExamples/Docs/xNodeEditor.xlsx | Bin 410203 -> 526721 bytes Other/NodeEditorExamples/Docs/~$xNodeEditor.xlsx | Bin 0 -> 165 bytes 31 files changed, 542 insertions(+), 163 deletions(-) delete mode 100644 Erika/Assets/Tools/WorkflowVisualizer/Editor/Node.cs delete mode 100644 Erika/Assets/Tools/WorkflowVisualizer/Editor/Node.cs.meta delete mode 100644 Erika/Assets/Tools/WorkflowVisualizer/Editor/SingleOutNode.cs delete mode 100644 Erika/Assets/Tools/WorkflowVisualizer/Editor/SingleOutNode.cs.meta delete mode 100644 Erika/Assets/Tools/WorkflowVisualizer/Editor/WorkflowGraph.cs delete mode 100644 Erika/Assets/Tools/WorkflowVisualizer/Editor/WorkflowGraph.cs.meta create mode 100644 Erika/Assets/Tools/WorkflowVisualizer/Editor/WorkflowGraphInspector.cs create mode 100644 Erika/Assets/Tools/WorkflowVisualizer/Editor/WorkflowGraphInspector.cs.meta create mode 100644 Erika/Assets/Tools/WorkflowVisualizer/Resources/WorkflowVisualizer/dot.png create mode 100644 Erika/Assets/Tools/WorkflowVisualizer/Resources/WorkflowVisualizer/dot.png.meta create mode 100644 Erika/Assets/Tools/WorkflowVisualizer/Resources/WorkflowVisualizer/dot_outer.png create mode 100644 Erika/Assets/Tools/WorkflowVisualizer/Resources/WorkflowVisualizer/dot_outer.png.meta create mode 100644 Erika/Assets/Tools/WorkflowVisualizer/Scripts.meta create mode 100644 Erika/Assets/Tools/WorkflowVisualizer/Scripts/WorkflowGraph.cs create mode 100644 Erika/Assets/Tools/WorkflowVisualizer/Scripts/WorkflowGraph.cs.meta create mode 100644 Erika/Assets/Tools/WorkflowVisualizer/Scripts/WorkflowNode.cs create mode 100644 Erika/Assets/Tools/WorkflowVisualizer/Scripts/WorkflowNode.cs.meta delete mode 100644 Erika/Assets/WorkflowGraphs/README.txt delete mode 100644 Erika/Assets/WorkflowGraphs/README.txt.meta create mode 100644 Erika/Assets/WorkflowGraphs/Scripts.meta create mode 100644 Erika/Assets/WorkflowGraphs/Scripts/SkillWorkflow.cs create mode 100644 Erika/Assets/WorkflowGraphs/Scripts/SkillWorkflow.cs.meta create mode 100644 Erika/Assets/WorkflowGraphs/Skill.asset create mode 100644 Erika/Assets/WorkflowGraphs/Skill.asset.meta create mode 100644 Other/NodeEditorExamples/Docs/~$xNodeEditor.xlsx diff --git a/Erika/Assets/Tools/WorkflowVisualizer/Editor/GUIHelper.cs b/Erika/Assets/Tools/WorkflowVisualizer/Editor/GUIHelper.cs index 2b3c3449..cb56f411 100644 --- a/Erika/Assets/Tools/WorkflowVisualizer/Editor/GUIHelper.cs +++ b/Erika/Assets/Tools/WorkflowVisualizer/Editor/GUIHelper.cs @@ -1,4 +1,5 @@ -using System.Collections; +using System; +using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor; @@ -18,5 +19,54 @@ namespace Workflow return GUILayout.Button(name, EditorStyles.toolbarDropDown, GUILayout.Width(width)); } + + public static void DrawPortHandle(Rect rect, Color backgroundColor, Color typeColor) + { + Color col = GUI.color; + GUI.color = backgroundColor; + GUI.DrawTexture(rect, Res.tex_dot_outer); + GUI.color = typeColor; + GUI.DrawTexture(rect, Res.tex_dot); + GUI.color = col; + } + + /// + /// 从start的右中点到end的左中 + /// + /// + /// + public static void DrawNodeCurve(Rect start, Rect end) + { + Vector3 startPos = new Vector3(start.x + start.width, start.y + start.height / 2, 0); + Vector3 endPos = new Vector3(end.x, end.y + end.height / 2, 0); + Vector3 startTan = startPos + Vector3.right * 50; + Vector3 endTan = endPos + Vector3.left * 50; + Color shadowCol = new Color(0, 0, 0, 0.06f); + for (int i = 0; i < 3; i++) // Draw a shadow + Handles.DrawBezier(startPos, endPos, startTan, endTan, shadowCol, null, (i + 1) * 5); + Handles.DrawBezier(startPos, endPos, startTan, endTan, Color.black, null, 1); + } + + } + + + public static class Utils + { + public static IEnumerable GetAllSubclassOf(Type parent) + { + foreach (var a in AppDomain.CurrentDomain.GetAssemblies()) + foreach (var t in a.GetTypes()) + if (t.IsSubclassOf(parent)) yield return t; + } + + public static T GetAttribute(Type classType) where T : Attribute + { + T[] attrs = classType.GetCustomAttributes(typeof(T), true) as T[]; + if (attrs == null || attrs.Length == 0) + return null; + return attrs[0]; + } + } + } diff --git a/Erika/Assets/Tools/WorkflowVisualizer/Editor/Node.cs b/Erika/Assets/Tools/WorkflowVisualizer/Editor/Node.cs deleted file mode 100644 index ab27e02e..00000000 --- a/Erika/Assets/Tools/WorkflowVisualizer/Editor/Node.cs +++ /dev/null @@ -1,32 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -namespace Workflow -{ - - public struct NodePosition - { - public Vector2 position; - public Vector2 size; - } - - /// - /// 节点 - /// - public class Node : ScriptableObject - { - // 节点名(包括路径,如Animation/RootMotion) - public virtual string name { get { return ""; } } - - // 图标路径,相对Resources目录 - public virtual string iconPath { get { return null; } } - - // 注解 - public virtual string note { get { return null; } } - - public List children; - - } - -} diff --git a/Erika/Assets/Tools/WorkflowVisualizer/Editor/Node.cs.meta b/Erika/Assets/Tools/WorkflowVisualizer/Editor/Node.cs.meta deleted file mode 100644 index 810f42a2..00000000 --- a/Erika/Assets/Tools/WorkflowVisualizer/Editor/Node.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 542448ace01cd034c9cbf3d11ac73f66 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Erika/Assets/Tools/WorkflowVisualizer/Editor/SingleOutNode.cs b/Erika/Assets/Tools/WorkflowVisualizer/Editor/SingleOutNode.cs deleted file mode 100644 index 5f282702..00000000 --- a/Erika/Assets/Tools/WorkflowVisualizer/Editor/SingleOutNode.cs +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/Erika/Assets/Tools/WorkflowVisualizer/Editor/SingleOutNode.cs.meta b/Erika/Assets/Tools/WorkflowVisualizer/Editor/SingleOutNode.cs.meta deleted file mode 100644 index 76262c25..00000000 --- a/Erika/Assets/Tools/WorkflowVisualizer/Editor/SingleOutNode.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: d2d9b579e0562b2418478a1b97b77e13 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Erika/Assets/Tools/WorkflowVisualizer/Editor/WorkflowEditor.cs b/Erika/Assets/Tools/WorkflowVisualizer/Editor/WorkflowEditor.cs index 074843d9..b3068dbd 100644 --- a/Erika/Assets/Tools/WorkflowVisualizer/Editor/WorkflowEditor.cs +++ b/Erika/Assets/Tools/WorkflowVisualizer/Editor/WorkflowEditor.cs @@ -9,11 +9,18 @@ namespace Workflow public class WorkflowEditor : EditorWindow { [MenuItem("Erika/Workflow")] - static void OpenWorkflow() + public static void OpenWorkflow(WorkflowGraph graph) { - var w = EditorWindow.CreateInstance(); - w.titleContent = new GUIContent("Workflow"); - w.Show(); + if(editor == null) + { + editor = EditorWindow.CreateInstance(); + editor.Show(); + } + + currentWorkflow = graph; + + editor.titleContent = new GUIContent("[Workflow] " + graph.name); + editor.OnChangeGraph(); } public const float kToolbarButtonWidth = 50f; @@ -26,6 +33,10 @@ namespace Workflow private Vector2 m_ZoomAdjustment; private Vector2 m_Offset; + // 当前显示的workflow graph + private static WorkflowGraph currentWorkflow; + + private static WorkflowEditor editor; /// /// The size of the window. @@ -48,6 +59,21 @@ namespace Workflow } } + private void OnEnable() + { + editor = this; + } + + private void OnDisable() + { + editor = null; + } + + private void OnChangeGraph() + { + + } + private void OnGUI() { @@ -65,21 +91,11 @@ namespace Workflow CreateEditMenu(); } - if (GUIHelper.DropdownButton("View", kToolbarButtonWidth)) - { - CreateViewMenu(); - } - if (GUIHelper.DropdownButton("Settings", kToolbarButtonWidth + 10f)) { CreateSettingsMenu(); } - if (GUIHelper.DropdownButton("Tools", kToolbarButtonWidth)) - { - CreateToolsMenu(); - } - // Make the toolbar extend all throughout the window extension. GUILayout.FlexibleSpace(); @@ -119,21 +135,13 @@ namespace Workflow menu.AddItem(new GUIContent("Undo"), false, null); menu.AddItem(new GUIContent("Redo"), false, null); + menu.AddSeparator(""); + + GenericaMenu_AddNode(menu); menu.DropDown(new Rect(55f, kToolbarHeight, 0f, 0f)); } - private void CreateViewMenu() - { - var menu = new GenericMenu(); - - menu.AddItem(new GUIContent("Home"), false, null); - //menu.AddItem(new GUIContent("Zoom In"), false, () => { editor.Zoom(-1); }); - //menu.AddItem(new GUIContent("Zoom Out"), false, () => { editor.Zoom(1); }); - - menu.DropDown(new Rect(105f, kToolbarHeight, 0f, 0f)); - } - private void CreateSettingsMenu() { var menu = new GenericMenu(); @@ -143,16 +151,6 @@ namespace Workflow menu.DropDown(new Rect(155f, kToolbarHeight, 0f, 0f)); } - private void CreateToolsMenu() - { - var menu = new GenericMenu(); - - //menu.AddItem(new GUIContent("Add Test Nodes"), false, addTestNodes); - //menu.AddItem(new GUIContent("Clear Nodes"), false, clearNodes); - - menu.DropDown(new Rect(215f, kToolbarHeight, 0f, 0f)); - } - public void Pan(Vector2 delta) { panOffset += delta * zoomScale * panSpeed; @@ -169,6 +167,23 @@ namespace Workflow m_Zoom.Set(cap, cap); } + void GenericaMenu_AddNode(GenericMenu nodeMenu) + { + foreach(var nodeType in Utils.GetAllSubclassOf(typeof(WorkflowNode))) + { + WorkflowNodeAttribute attr = Utils.GetAttribute(nodeType); + if (attr == null) + continue; + string path = "Add Node/" + attr.path; + nodeMenu.AddItem(new GUIContent(path), false, OnAddNode, nodeType); + } + } + + void OnAddNode(object type) + { + + } + //------------------------------------------------------------------------------- // Node area //------------------------------------------------------------------------------- @@ -187,21 +202,21 @@ namespace Workflow float zoom = zoomScale; // Offset from origin in tile units - float xOffset = -(center.x * zoom + panOffset.x) / Res.gridTex.width; - float yOffset = ((center.y - size.y) * zoom + panOffset.y) / Res.gridTex.height; + float xOffset = -(center.x * zoom + panOffset.x) / Res.tex_grid.width; + float yOffset = ((center.y - size.y) * zoom + panOffset.y) / Res.tex_grid.height; Vector2 tileOffset = new Vector2(xOffset, yOffset); - m_Offset = Vector2.Scale(tileOffset, new Vector2(-Res.gridTex.width, Res.gridTex.height)); + m_Offset = Vector2.Scale(tileOffset, new Vector2(-Res.tex_grid.width, Res.tex_grid.height)); // Amount of tiles - float tileAmountX = Mathf.Round(size.x * zoom) / Res.gridTex.width; - float tileAmountY = Mathf.Round(size.y * zoom) / Res.gridTex.height; + float tileAmountX = Mathf.Round(size.x * zoom) / Res.tex_grid.width; + float tileAmountY = Mathf.Round(size.y * zoom) / Res.tex_grid.height; Vector2 tileAmount = new Vector2(tileAmountX, tileAmountY); // Draw tiled background - GUI.DrawTextureWithTexCoords(Size, Res.gridTex, new Rect(tileOffset, tileAmount)); + GUI.DrawTextureWithTexCoords(Size, Res.tex_grid, new Rect(tileOffset, tileAmount)); } @@ -225,19 +240,33 @@ namespace Workflow { Color defaultColor = GUI.color; - GUILayout.BeginArea(new Rect(m_Offset, new Vector2(200, 4000))); + GUILayout.BeginArea(new Rect(m_Offset, new Vector2(300, 4000))); - GUIStyle style = new GUIStyle(Res.nodeBody); - GUI.color = new Color32(90, 97, 105, 255); + GUIStyle style = new GUIStyle(Res.style_node_body); + GUI.color = new Color32(177, 184, 204, 255); GUILayout.BeginVertical(style); - GUILayout.Label("Title", Res.nodeHeader, GUILayout.Height(30)); + GUI.color = defaultColor; + + GUILayout.Label("Title", Res.style_node_header, GUILayout.Height(30)); - GUILayout.Label("buttonbuttonbuttonbuttonbuttonbuttonbuttonbutton"); + GUILayout.Label("ok"); + + var size = GUILayoutUtility.GetLastRect(); + + GUILayout.Label("ok"); GUILayout.EndVertical(); + + GUIHelper.DrawPortHandle(new Rect(0, size.y , 15, 15), Color.black, Color.yellow); + + size = GUILayoutUtility.GetLastRect(); + GUILayout.EndArea(); + GUIHelper.DrawNodeCurve(new Rect(m_Offset.x + size.x, m_Offset.y + size.y, 15, 15) + , new Rect(m_Offset.x + size.x + 100, m_Offset.y + size.y + 100, 15, 15)); + GUI.color = defaultColor; } diff --git a/Erika/Assets/Tools/WorkflowVisualizer/Editor/WorkflowGraph.cs b/Erika/Assets/Tools/WorkflowVisualizer/Editor/WorkflowGraph.cs deleted file mode 100644 index bb50bff2..00000000 --- a/Erika/Assets/Tools/WorkflowVisualizer/Editor/WorkflowGraph.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; -using UnityEditor; - -namespace Workflow -{ - - /// - /// 流程图 - /// - public class WorkflowGraph : ScriptableObject - { - - - - } - -} diff --git a/Erika/Assets/Tools/WorkflowVisualizer/Editor/WorkflowGraph.cs.meta b/Erika/Assets/Tools/WorkflowVisualizer/Editor/WorkflowGraph.cs.meta deleted file mode 100644 index 7f449997..00000000 --- a/Erika/Assets/Tools/WorkflowVisualizer/Editor/WorkflowGraph.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 8d15234d39bd47e4d93a5d48161055be -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Erika/Assets/Tools/WorkflowVisualizer/Editor/WorkflowGraphInspector.cs b/Erika/Assets/Tools/WorkflowVisualizer/Editor/WorkflowGraphInspector.cs new file mode 100644 index 00000000..af00ac61 --- /dev/null +++ b/Erika/Assets/Tools/WorkflowVisualizer/Editor/WorkflowGraphInspector.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; + +namespace Workflow +{ + + [CustomEditor(typeof(WorkflowGraph))] + public class WorkflowGraphInspector : Editor + { + + public override void OnInspectorGUI() + { + + if (GUILayout.Button("Workflow Editor", GUILayout.Height(50))) + { + WorkflowEditor.OpenWorkflow(this.target as WorkflowGraph); + } + + } + + } + +} diff --git a/Erika/Assets/Tools/WorkflowVisualizer/Editor/WorkflowGraphInspector.cs.meta b/Erika/Assets/Tools/WorkflowVisualizer/Editor/WorkflowGraphInspector.cs.meta new file mode 100644 index 00000000..3aa29b14 --- /dev/null +++ b/Erika/Assets/Tools/WorkflowVisualizer/Editor/WorkflowGraphInspector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0bdaff1bd42ead845a58e846e989ef17 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Erika/Assets/Tools/WorkflowVisualizer/Editor/WorkflowResources.cs b/Erika/Assets/Tools/WorkflowVisualizer/Editor/WorkflowResources.cs index 48214089..dccaf5ba 100644 --- a/Erika/Assets/Tools/WorkflowVisualizer/Editor/WorkflowResources.cs +++ b/Erika/Assets/Tools/WorkflowVisualizer/Editor/WorkflowResources.cs @@ -9,12 +9,13 @@ namespace Workflow public static class Res { - public static Texture2D gridTex; - public static Texture2D nodeBgTex; - - public static GUIStyle nodeBody; - public static GUIStyle nodeHeader; + public static Texture2D tex_grid; + public static Texture2D tex_node_bg; + public static Texture2D tex_dot; + public static Texture2D tex_dot_outer; + public static GUIStyle style_node_body; + public static GUIStyle style_node_header; public static bool loaded = false; @@ -26,23 +27,23 @@ namespace Workflow //[UnityEditor.Callbacks.DidReloadScripts] static void LoadAllResources() { - if (loaded) - return ; + if (loaded) return; loaded = true; + tex_grid = UnityEngine.Resources.Load("WorkflowVisualizer/Grid"); + tex_node_bg = UnityEngine.Resources.Load("WorkflowVisualizer/node_background"); + tex_dot = UnityEngine.Resources.Load("WorkflowVisualizer/dot"); + tex_dot_outer = UnityEngine.Resources.Load("WorkflowVisualizer/dot_outer"); - gridTex = UnityEngine.Resources.Load("WorkflowVisualizer/Grid"); - nodeBgTex = UnityEngine.Resources.Load("WorkflowVisualizer/node_background"); - - nodeBody = new GUIStyle(); - nodeBody.normal.background = nodeBgTex; - nodeBody.border = new RectOffset(32, 32, 32, 32); - nodeBody.padding = new RectOffset(16, 16, 4, 16); + style_node_body = new GUIStyle(); + style_node_body.normal.background = tex_node_bg; + style_node_body.border = new RectOffset(32, 32, 32, 32); + style_node_body.padding = new RectOffset(16, 16, 4, 16); - nodeHeader = new GUIStyle(); - nodeHeader.alignment = TextAnchor.MiddleCenter; - nodeHeader.fontStyle = FontStyle.Bold; - nodeHeader.normal.textColor = Color.white; + style_node_header = new GUIStyle(); + style_node_header.alignment = TextAnchor.MiddleCenter; + style_node_header.fontStyle = FontStyle.Bold; + style_node_header.normal.textColor = Color.white; } diff --git a/Erika/Assets/Tools/WorkflowVisualizer/README.txt b/Erika/Assets/Tools/WorkflowVisualizer/README.txt index 06d0b39f..74417b04 100644 --- a/Erika/Assets/Tools/WorkflowVisualizer/README.txt +++ b/Erika/Assets/Tools/WorkflowVisualizer/README.txt @@ -1,2 +1,9 @@ -流程可视化 -Workflow Visualizer \ No newline at end of file +流程可视化工具 +Workflow Visualizer + +提供工作流专用的图表工具 + * 可视化展示工作流的每一步 + * 每一步的工具引用 + * 步骤之间的数据转移 + * 同属于一个职能的步骤合为一个集合 + diff --git a/Erika/Assets/Tools/WorkflowVisualizer/Resources/WorkflowVisualizer/dot.png b/Erika/Assets/Tools/WorkflowVisualizer/Resources/WorkflowVisualizer/dot.png new file mode 100644 index 00000000..36c0ce93 Binary files /dev/null and b/Erika/Assets/Tools/WorkflowVisualizer/Resources/WorkflowVisualizer/dot.png differ diff --git a/Erika/Assets/Tools/WorkflowVisualizer/Resources/WorkflowVisualizer/dot.png.meta b/Erika/Assets/Tools/WorkflowVisualizer/Resources/WorkflowVisualizer/dot.png.meta new file mode 100644 index 00000000..f10747e2 --- /dev/null +++ b/Erika/Assets/Tools/WorkflowVisualizer/Resources/WorkflowVisualizer/dot.png.meta @@ -0,0 +1,88 @@ +fileFormatVersion: 2 +guid: 1da06810ba4765c4b82be31ddbde7768 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 9 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Erika/Assets/Tools/WorkflowVisualizer/Resources/WorkflowVisualizer/dot_outer.png b/Erika/Assets/Tools/WorkflowVisualizer/Resources/WorkflowVisualizer/dot_outer.png new file mode 100644 index 00000000..538cc9fa Binary files /dev/null and b/Erika/Assets/Tools/WorkflowVisualizer/Resources/WorkflowVisualizer/dot_outer.png differ diff --git a/Erika/Assets/Tools/WorkflowVisualizer/Resources/WorkflowVisualizer/dot_outer.png.meta b/Erika/Assets/Tools/WorkflowVisualizer/Resources/WorkflowVisualizer/dot_outer.png.meta new file mode 100644 index 00000000..980f9864 --- /dev/null +++ b/Erika/Assets/Tools/WorkflowVisualizer/Resources/WorkflowVisualizer/dot_outer.png.meta @@ -0,0 +1,88 @@ +fileFormatVersion: 2 +guid: 73c65a9634c1a3047a99ae6a88705632 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 9 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Erika/Assets/Tools/WorkflowVisualizer/Scripts.meta b/Erika/Assets/Tools/WorkflowVisualizer/Scripts.meta new file mode 100644 index 00000000..1bf7debb --- /dev/null +++ b/Erika/Assets/Tools/WorkflowVisualizer/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e3013c572c09f1240a990fbddbd682d0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Erika/Assets/Tools/WorkflowVisualizer/Scripts/WorkflowGraph.cs b/Erika/Assets/Tools/WorkflowVisualizer/Scripts/WorkflowGraph.cs new file mode 100644 index 00000000..c4e4604d --- /dev/null +++ b/Erika/Assets/Tools/WorkflowVisualizer/Scripts/WorkflowGraph.cs @@ -0,0 +1,20 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; + +namespace Workflow +{ + + /// + /// 流程图 + /// + [CreateAssetMenu(fileName = "New Workflow", menuName = "Workflow")] + public class WorkflowGraph : ScriptableObject + { + + + + } + +} diff --git a/Erika/Assets/Tools/WorkflowVisualizer/Scripts/WorkflowGraph.cs.meta b/Erika/Assets/Tools/WorkflowVisualizer/Scripts/WorkflowGraph.cs.meta new file mode 100644 index 00000000..41b8fbd2 --- /dev/null +++ b/Erika/Assets/Tools/WorkflowVisualizer/Scripts/WorkflowGraph.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e6ad085c3b8c2f046a1b3d9a77fd457c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Erika/Assets/Tools/WorkflowVisualizer/Scripts/WorkflowNode.cs b/Erika/Assets/Tools/WorkflowVisualizer/Scripts/WorkflowNode.cs new file mode 100644 index 00000000..67325c32 --- /dev/null +++ b/Erika/Assets/Tools/WorkflowVisualizer/Scripts/WorkflowNode.cs @@ -0,0 +1,58 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace Workflow +{ + + public struct NodePosition + { + public Vector2 position; + public Vector2 size; + } + + + /// + /// 节点 + /// + [Serializable] + public class WorkflowNode : ScriptableObject + { + // 节点名(包括路径,如Animation/RootMotion) + public virtual string title { get { return ""; } } + + // 图标路径,相对Resources目录 + public virtual string iconPath { get { return ""; } } + + // 注解 + public virtual string note { get { return ""; } } + + public virtual void OnDraw() { } + + } + + /// + /// 目录 + /// + public class WorkflowNodeAttribute : Attribute + { + public string path; + public WorkflowNodeAttribute(string path) + { + this.path = path; + } + } + + /// + /// 连接线 + /// + [Serializable] + public class WorkflowNodeLink : ScriptableObject + { + public WorkflowNode from; + public WorkflowNode to; + + } + +} \ No newline at end of file diff --git a/Erika/Assets/Tools/WorkflowVisualizer/Scripts/WorkflowNode.cs.meta b/Erika/Assets/Tools/WorkflowVisualizer/Scripts/WorkflowNode.cs.meta new file mode 100644 index 00000000..d54183f2 --- /dev/null +++ b/Erika/Assets/Tools/WorkflowVisualizer/Scripts/WorkflowNode.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9e66560e0e8c1e249bb43483f135bc34 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Erika/Assets/WorkflowGraphs/README.txt b/Erika/Assets/WorkflowGraphs/README.txt deleted file mode 100644 index af287d96..00000000 --- a/Erika/Assets/WorkflowGraphs/README.txt +++ /dev/null @@ -1 +0,0 @@ -流程图 \ No newline at end of file diff --git a/Erika/Assets/WorkflowGraphs/README.txt.meta b/Erika/Assets/WorkflowGraphs/README.txt.meta deleted file mode 100644 index 4bab09de..00000000 --- a/Erika/Assets/WorkflowGraphs/README.txt.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 0bbe120df72b7584c8a5babe278fc815 -TextScriptImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Erika/Assets/WorkflowGraphs/Scripts.meta b/Erika/Assets/WorkflowGraphs/Scripts.meta new file mode 100644 index 00000000..53d79748 --- /dev/null +++ b/Erika/Assets/WorkflowGraphs/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 35f19121978d0d94f84371c3d56d4f35 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Erika/Assets/WorkflowGraphs/Scripts/SkillWorkflow.cs b/Erika/Assets/WorkflowGraphs/Scripts/SkillWorkflow.cs new file mode 100644 index 00000000..8d4b87fe --- /dev/null +++ b/Erika/Assets/WorkflowGraphs/Scripts/SkillWorkflow.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using Workflow; + +namespace SkillWorkflow +{ + + [WorkflowNode("Skill Workflow/Rootmotion")] + public class RootmotionNode : WorkflowNode + { + + public override void OnDraw() + { + base.OnDraw(); + + + } + + } + +} diff --git a/Erika/Assets/WorkflowGraphs/Scripts/SkillWorkflow.cs.meta b/Erika/Assets/WorkflowGraphs/Scripts/SkillWorkflow.cs.meta new file mode 100644 index 00000000..6217ccc0 --- /dev/null +++ b/Erika/Assets/WorkflowGraphs/Scripts/SkillWorkflow.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b10b8dd0b218d0d43920825928db0f01 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Erika/Assets/WorkflowGraphs/Skill.asset b/Erika/Assets/WorkflowGraphs/Skill.asset new file mode 100644 index 00000000..ad7b9c15 --- /dev/null +++ b/Erika/Assets/WorkflowGraphs/Skill.asset @@ -0,0 +1,14 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e6ad085c3b8c2f046a1b3d9a77fd457c, type: 3} + m_Name: Skill + m_EditorClassIdentifier: diff --git a/Erika/Assets/WorkflowGraphs/Skill.asset.meta b/Erika/Assets/WorkflowGraphs/Skill.asset.meta new file mode 100644 index 00000000..5da143e4 --- /dev/null +++ b/Erika/Assets/WorkflowGraphs/Skill.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0c7eee3abcec8bd4185bf92167adc59d +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Other/NodeEditorExamples/Assets/xNode-examples/Examples/StateMachine/New State Graph.asset b/Other/NodeEditorExamples/Assets/xNode-examples/Examples/StateMachine/New State Graph.asset index d475d3f7..7812ad44 100644 --- a/Other/NodeEditorExamples/Assets/xNode-examples/Examples/StateMachine/New State Graph.asset +++ b/Other/NodeEditorExamples/Assets/xNode-examples/Examples/StateMachine/New State Graph.asset @@ -18,7 +18,7 @@ MonoBehaviour: - {fileID: 114232340257100334} - {fileID: 114484137410015790} - {fileID: 114067607725051884} - current: {fileID: 114471802820302434} + current: {fileID: 114319284393922042} --- !u!114 &114067607725051884 MonoBehaviour: m_ObjectHideFlags: 0 @@ -112,7 +112,7 @@ MonoBehaviour: m_Name: State Node m_EditorClassIdentifier: graph: {fileID: 11400000} - position: {x: -312, y: -376} + position: {x: -328, y: -360} ports: keys: - enter @@ -198,7 +198,7 @@ MonoBehaviour: m_Name: State m_EditorClassIdentifier: graph: {fileID: 11400000} - position: {x: 8, y: -184} + position: {x: 24, y: -168} ports: keys: - enter diff --git a/Other/NodeEditorExamples/Docs/xNodeEditor.xlsx b/Other/NodeEditorExamples/Docs/xNodeEditor.xlsx index c520eb30..c49127ec 100644 Binary files a/Other/NodeEditorExamples/Docs/xNodeEditor.xlsx and b/Other/NodeEditorExamples/Docs/xNodeEditor.xlsx differ diff --git a/Other/NodeEditorExamples/Docs/~$xNodeEditor.xlsx b/Other/NodeEditorExamples/Docs/~$xNodeEditor.xlsx new file mode 100644 index 00000000..6e8f159e Binary files /dev/null and b/Other/NodeEditorExamples/Docs/~$xNodeEditor.xlsx differ -- cgit v1.1-26-g67d0