summaryrefslogtreecommitdiff
path: root/Assets/Tools
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2021-09-15 12:50:26 +0800
committerchai <chaifix@163.com>2021-09-15 12:50:26 +0800
commit98f31f197a126850a5878cd6e583ae6dbf64ab3d (patch)
tree207f726fb027c227d2fd58bd1bc340cb3a7eaf67 /Assets/Tools
parentad950c25abdf7f5a2f0428863d4035e9eb168fd5 (diff)
*rename
Diffstat (limited to 'Assets/Tools')
-rw-r--r--Assets/Tools/ActionTool.meta8
-rw-r--r--Assets/Tools/ActionTool/ActionTool Settings.asset52
-rw-r--r--Assets/Tools/ActionTool/ActionTool Settings.asset.meta8
-rw-r--r--Assets/Tools/ActionTool/ActionToolGizmos.cs139
-rw-r--r--Assets/Tools/ActionTool/ActionToolGizmos.cs.meta11
-rw-r--r--Assets/Tools/ActionTool/ActionToolScene.unity357
-rw-r--r--Assets/Tools/ActionTool/ActionToolScene.unity.meta7
-rw-r--r--Assets/Tools/ActionTool/ActionToolSettings.cs20
-rw-r--r--Assets/Tools/ActionTool/ActionToolSettings.cs.meta11
-rw-r--r--Assets/Tools/ActionTool/ActionTool_Ground_Shader.shader351
-rw-r--r--Assets/Tools/ActionTool/ActionTool_Ground_Shader.shader.meta9
-rw-r--r--Assets/Tools/ActionTool/DarkPlane.mat77
-rw-r--r--Assets/Tools/ActionTool/DarkPlane.mat.meta8
-rw-r--r--Assets/Tools/ActionTool/Editor.meta8
-rw-r--r--Assets/Tools/ActionTool/Editor/ActionColliderEditor.cs346
-rw-r--r--Assets/Tools/ActionTool/Editor/ActionColliderEditor.cs.meta11
-rw-r--r--Assets/Tools/ActionTool/Editor/ActionColliderFrameEditor.cs109
-rw-r--r--Assets/Tools/ActionTool/Editor/ActionColliderFrameEditor.cs.meta11
-rw-r--r--Assets/Tools/ActionTool/Editor/ActionData.cs390
-rw-r--r--Assets/Tools/ActionTool/Editor/ActionData.cs.meta11
-rw-r--r--Assets/Tools/ActionTool/Editor/ActionEditor.cs262
-rw-r--r--Assets/Tools/ActionTool/Editor/ActionEditor.cs.meta11
-rw-r--r--Assets/Tools/ActionTool/Editor/ActionEditorStyles.cs171
-rw-r--r--Assets/Tools/ActionTool/Editor/ActionEditorStyles.cs.meta11
-rw-r--r--Assets/Tools/ActionTool/Editor/ActionEditorUI.cs99
-rw-r--r--Assets/Tools/ActionTool/Editor/ActionEditorUI.cs.meta11
-rw-r--r--Assets/Tools/ActionTool/Editor/ActionEventEditor.cs368
-rw-r--r--Assets/Tools/ActionTool/Editor/ActionEventEditor.cs.meta11
-rw-r--r--Assets/Tools/ActionTool/Editor/ActionInfoEditor.cs47
-rw-r--r--Assets/Tools/ActionTool/Editor/ActionInfoEditor.cs.meta11
-rw-r--r--Assets/Tools/ActionTool/Editor/ActionManager.cs548
-rw-r--r--Assets/Tools/ActionTool/Editor/ActionManager.cs.meta11
-rw-r--r--Assets/Tools/ActionTool/Editor/ActionNoteEditor.cs40
-rw-r--r--Assets/Tools/ActionTool/Editor/ActionNoteEditor.cs.meta11
-rw-r--r--Assets/Tools/ActionTool/Editor/ActionPreviewEditor.cs1027
-rw-r--r--Assets/Tools/ActionTool/Editor/ActionPreviewEditor.cs.meta11
-rw-r--r--Assets/Tools/ActionTool/Editor/ActionRootMotionEditor.cs121
-rw-r--r--Assets/Tools/ActionTool/Editor/ActionRootMotionEditor.cs.meta11
-rw-r--r--Assets/Tools/ActionTool/Editor/ActionToolSettingsEditor.cs62
-rw-r--r--Assets/Tools/ActionTool/Editor/ActionToolSettingsEditor.cs.meta11
-rw-r--r--Assets/Tools/ActionTool/Editor/AnimationCurveEditor.cs54
-rw-r--r--Assets/Tools/ActionTool/Editor/AnimationCurveEditor.cs.meta11
-rw-r--r--Assets/Tools/ActionTool/Editor/AnimationParameterEditor.cs54
-rw-r--r--Assets/Tools/ActionTool/Editor/AnimationParameterEditor.cs.meta11
-rw-r--r--Assets/Tools/ActionTool/Editor/AnimationPropertyEditor.cs54
-rw-r--r--Assets/Tools/ActionTool/Editor/AnimationPropertyEditor.cs.meta11
-rw-r--r--Assets/Tools/ActionTool/Editor/AnimationToggleEditor.cs69
-rw-r--r--Assets/Tools/ActionTool/Editor/AnimationToggleEditor.cs.meta11
-rw-r--r--Assets/Tools/ActionTool/EmptyAction.anim53
-rw-r--r--Assets/Tools/ActionTool/EmptyAction.anim.meta8
-rw-r--r--Assets/Tools/ActionTool/Resources.meta8
-rw-r--r--Assets/Tools/ActionTool/Resources/blockbox.pngbin0 -> 245 bytes
-rw-r--r--Assets/Tools/ActionTool/Resources/blockbox.png.meta88
-rw-r--r--Assets/Tools/ActionTool/Resources/button_control_end.pngbin0 -> 608 bytes
-rw-r--r--Assets/Tools/ActionTool/Resources/button_control_end.png.meta88
-rw-r--r--Assets/Tools/ActionTool/Resources/button_control_next.pngbin0 -> 476 bytes
-rw-r--r--Assets/Tools/ActionTool/Resources/button_control_next.png.meta88
-rw-r--r--Assets/Tools/ActionTool/Resources/button_control_pause.pngbin0 -> 461 bytes
-rw-r--r--Assets/Tools/ActionTool/Resources/button_control_pause.png.meta88
-rw-r--r--Assets/Tools/ActionTool/Resources/button_control_play.pngbin0 -> 277 bytes
-rw-r--r--Assets/Tools/ActionTool/Resources/button_control_play.png.meta88
-rw-r--r--Assets/Tools/ActionTool/Resources/button_control_previous.pngbin0 -> 513 bytes
-rw-r--r--Assets/Tools/ActionTool/Resources/button_control_previous.png.meta88
-rw-r--r--Assets/Tools/ActionTool/Resources/button_control_record.pngbin0 -> 824 bytes
-rw-r--r--Assets/Tools/ActionTool/Resources/button_control_record.png.meta88
-rw-r--r--Assets/Tools/ActionTool/Resources/button_control_start.pngbin0 -> 598 bytes
-rw-r--r--Assets/Tools/ActionTool/Resources/button_control_start.png.meta88
-rw-r--r--Assets/Tools/ActionTool/Resources/button_control_stop.pngbin0 -> 304 bytes
-rw-r--r--Assets/Tools/ActionTool/Resources/button_control_stop.png.meta88
-rw-r--r--Assets/Tools/ActionTool/Resources/button_control_takerecord.pngbin0 -> 1111 bytes
-rw-r--r--Assets/Tools/ActionTool/Resources/button_control_takerecord.png.meta88
-rw-r--r--Assets/Tools/ActionTool/Resources/defendbox.pngbin0 -> 192 bytes
-rw-r--r--Assets/Tools/ActionTool/Resources/defendbox.png.meta88
-rw-r--r--Assets/Tools/ActionTool/Resources/hitbox.pngbin0 -> 194 bytes
-rw-r--r--Assets/Tools/ActionTool/Resources/hitbox.png.meta88
-rw-r--r--Assets/Tools/ActionTool/Resources/hurtbox.pngbin0 -> 247 bytes
-rw-r--r--Assets/Tools/ActionTool/Resources/hurtbox.png.meta88
-rw-r--r--Assets/Tools/ActionTool/Resources/savefile.pngbin0 -> 357 bytes
-rw-r--r--Assets/Tools/ActionTool/Resources/savefile.png.meta88
-rw-r--r--Assets/Tools/ActionTool/Resources/select_dark.pngbin0 -> 239 bytes
-rw-r--r--Assets/Tools/ActionTool/Resources/select_dark.png.meta88
-rw-r--r--Assets/Tools/ActionTool/Resources/select_white.pngbin0 -> 246 bytes
-rw-r--r--Assets/Tools/ActionTool/Resources/select_white.png.meta88
-rw-r--r--Assets/Tools/ActionTool/Resources/throwbox.pngbin0 -> 195 bytes
-rw-r--r--Assets/Tools/ActionTool/Resources/throwbox.png.meta88
-rw-r--r--Assets/Tools/ActionTool/controller_saionji.controller1325
-rw-r--r--Assets/Tools/ActionTool/controller_saionji.controller.meta8
-rw-r--r--Assets/Tools/ActionTool/controller_temp.controller72
-rw-r--r--Assets/Tools/ActionTool/controller_temp.controller.meta8
-rw-r--r--Assets/Tools/Editor.meta8
-rw-r--r--Assets/Tools/Editor/EditorIcons.cs647
-rw-r--r--Assets/Tools/Editor/EditorIcons.cs.meta11
-rw-r--r--Assets/Tools/Editor/ErikaScenes.cs32
-rw-r--r--Assets/Tools/Editor/ErikaScenes.cs.meta11
-rw-r--r--Assets/Tools/Editor/ExtractAnimationTool.cs68
-rw-r--r--Assets/Tools/Editor/ExtractAnimationTool.cs.meta11
-rw-r--r--Assets/Tools/Editor/GUIStyleViwer.cs59
-rw-r--r--Assets/Tools/Editor/GUIStyleViwer.cs.meta11
-rw-r--r--Assets/Tools/Editor/Optimization.meta8
-rw-r--r--Assets/Tools/Editor/Optimization/AnimationOptimize.cs18
-rw-r--r--Assets/Tools/Editor/Optimization/AnimationOptimize.cs.meta11
-rw-r--r--Assets/Tools/Editor/PhysicsPrimitiveEditor.cs17
-rw-r--r--Assets/Tools/Editor/PhysicsPrimitiveEditor.cs.meta11
-rw-r--r--Assets/Tools/Editor/ShortcutHelper.cs31
-rw-r--r--Assets/Tools/Editor/ShortcutHelper.cs.meta11
105 files changed, 9017 insertions, 0 deletions
diff --git a/Assets/Tools/ActionTool.meta b/Assets/Tools/ActionTool.meta
new file mode 100644
index 00000000..bf017e06
--- /dev/null
+++ b/Assets/Tools/ActionTool.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: b1e8d3ccf37b58549b8b9f0c6990505a
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Tools/ActionTool/ActionTool Settings.asset b/Assets/Tools/ActionTool/ActionTool Settings.asset
new file mode 100644
index 00000000..0e104412
--- /dev/null
+++ b/Assets/Tools/ActionTool/ActionTool Settings.asset
@@ -0,0 +1,52 @@
+%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: 7a4c92544e0489b499e3339f34c1ff00, type: 3}
+ m_Name: ActionTool Settings
+ m_EditorClassIdentifier:
+ eventNames:
+ - EventCamera_Zoom
+ - EventCamera_Shake
+ - EventCamera_Blur
+ - EventCamera_WhiteOut
+ - EventMesh_AfterImage
+ - EventMesh_Fade
+ - EventMesh_Gloss
+ - EventEnv_Dark
+ - EventEnv_Exposure
+ - EventUI_Drift
+ - EventUI_Blur
+ - EventProjectile
+ - EventEffect
+ - EventSound
+ - EventBulletTime
+ - EventMesh_FadeIn
+ - EventMesh_FadeOut
+ - EventGame_TimeScale
+ eventColors:
+ - {r: 0, g: 0, b: 0, a: 1}
+ - {r: 0, g: 0, b: 0, a: 1}
+ - {r: 0, g: 0, b: 0, a: 1}
+ - {r: 0, g: 0, b: 0, a: 1}
+ - {r: 0.5343158, g: 0.3037113, b: 0.8584906, a: 1}
+ - {r: 0, g: 0, b: 0, a: 1}
+ - {r: 0, g: 0, b: 0, a: 1}
+ - {r: 0, g: 0, b: 0, a: 1}
+ - {r: 0, g: 0, b: 0, a: 1}
+ - {r: 0, g: 0, b: 0, a: 1}
+ - {r: 0.6037736, g: 0.3275187, b: 0.5568827, a: 1}
+ - {r: 0.9528302, g: 0.013483422, b: 0.013483422, a: 1}
+ - {r: 1, g: 0, b: 0.9345741, a: 1}
+ - {r: 0, g: 0, b: 0, a: 1}
+ - {r: 0, g: 0, b: 0, a: 1}
+ - {r: 0.3773585, g: 0.21537913, b: 0.21537913, a: 1}
+ - {r: 0.16981131, g: 0.16981131, b: 0.16981131, a: 1}
+ - {r: 0, g: 0, b: 0, a: 1}
diff --git a/Assets/Tools/ActionTool/ActionTool Settings.asset.meta b/Assets/Tools/ActionTool/ActionTool Settings.asset.meta
new file mode 100644
index 00000000..4a7f2686
--- /dev/null
+++ b/Assets/Tools/ActionTool/ActionTool Settings.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: ad7c850066198a844a2c34bb5ee73fc8
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 11400000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Tools/ActionTool/ActionToolGizmos.cs b/Assets/Tools/ActionTool/ActionToolGizmos.cs
new file mode 100644
index 00000000..938d2c51
--- /dev/null
+++ b/Assets/Tools/ActionTool/ActionToolGizmos.cs
@@ -0,0 +1,139 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEditor;
+
+namespace ActionTool
+{
+
+ public class ActionToolGizmos : MonoBehaviour
+ {
+ AnimationData m_AnimationData;
+
+ AnimationClip m_Clip;
+
+ AnimationClip clip
+ {
+ get
+ {
+ if (m_AnimationData == null)
+ return null;
+ if (m_Clip != null && m_Clip.name == m_AnimationData.animationName)
+ return m_Clip;
+ m_Clip = AssetDatabase.LoadAssetAtPath< AnimationClip>(m_AnimationData.animationPath);
+ return m_Clip;
+ }
+ }
+
+ float m_CurAnimFrame;
+
+ bool m_IsShowRootMotion;
+
+ GameObject m_UnitRoot;
+
+ public void Initialize(GameObject unitRoot)
+ {
+ m_UnitRoot = unitRoot;
+ }
+
+ public void SetAnimationData(AnimationData data)
+ {
+ m_AnimationData = data;
+ }
+
+ public void ShowRootMotionGizmos(bool show)
+ {
+ m_IsShowRootMotion = show;
+ }
+
+ public void SetCurAnimFrame(float frame)
+ {
+ m_CurAnimFrame = frame;
+ }
+
+ void OnDrawGizmos()
+ {
+ DrawRoot();
+ DrawAxis();
+ DrawColliders();
+
+ DrawRootMotion();
+ }
+
+ void DrawRoot()
+ {
+ Gizmos.color = Color.yellow;
+ Gizmos.DrawCube(m_UnitRoot.transform.position, new Vector3(0.1f, 0.1f, 0.1f));
+ }
+
+ void DrawAxis()
+ {
+ Gizmos.color = Color.red;
+ Gizmos.DrawLine(-Vector3.right * 1000, Vector3.right * 1000);
+ Gizmos.color = Color.green;
+ Gizmos.DrawLine(Vector3.zero, Vector3.up * 1000);
+ Gizmos.color = Color.blue;
+ Gizmos.DrawLine(Vector3.zero, Vector3.forward * 1000);
+ }
+
+ void DrawColliders()
+ {
+ if (m_AnimationData == null)
+ return;
+ DrawBoxes(m_AnimationData.hurtBoxes, Color.green);
+ DrawBoxes(m_AnimationData.hitBoxes, Color.red);
+ }
+
+ void DrawBoxes(List<ColliderData> boxes, Color color)
+ {
+ if (boxes != null && boxes.Count > 0)
+ {
+ for (int i = 0; i < boxes.Count; ++i)
+ {
+ var box = boxes[i];
+ if (box != null)
+ {
+ var info = box.GetColliderInfo(m_CurAnimFrame);
+ if (!info.active)
+ continue;
+ Vector3 pos = info.position;
+ switch (box.pivot)
+ {
+ case ColliderBox.Pivot.MiddleBottom:
+ pos.y += info.size.y / 2;
+ break;
+ }
+ pos += m_UnitRoot.transform.position;
+ Gizmos.color = color * 0.5f;
+ Gizmos.DrawCube(pos, info.size);
+ }
+ }
+ }
+ }
+
+ void DrawRootMotion()
+ {
+ if (m_AnimationData == null)
+ return;
+ if (!m_AnimationData.overrideRootMotion)
+ return;
+ if (!m_IsShowRootMotion)
+ return;
+ if (clip == null)
+ return;
+ var rm = m_AnimationData.rootMotionOverrideData;
+ float frames = clip.length * AnimationData.FPS;
+ float step = 0.05f;
+ Vector3 prev = rm.GetPosition(0);
+ Vector3 cur = prev;
+ Gizmos.color = Color.white;
+ for (float f = step; f <= frames + step; f+= step)
+ {
+ cur = rm.GetPosition(f);
+ Gizmos.DrawLine(prev, cur);
+ prev = cur;
+ }
+ }
+
+ }
+}
diff --git a/Assets/Tools/ActionTool/ActionToolGizmos.cs.meta b/Assets/Tools/ActionTool/ActionToolGizmos.cs.meta
new file mode 100644
index 00000000..1339ea05
--- /dev/null
+++ b/Assets/Tools/ActionTool/ActionToolGizmos.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: f2a6b1bbe8a21fe44b9a3626c5c94ec2
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Tools/ActionTool/ActionToolScene.unity b/Assets/Tools/ActionTool/ActionToolScene.unity
new file mode 100644
index 00000000..39e78d42
--- /dev/null
+++ b/Assets/Tools/ActionTool/ActionToolScene.unity
@@ -0,0 +1,357 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!29 &1
+OcclusionCullingSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 2
+ m_OcclusionBakeSettings:
+ smallestOccluder: 5
+ smallestHole: 0.25
+ backfaceThreshold: 100
+ m_SceneGUID: 00000000000000000000000000000000
+ m_OcclusionCullingData: {fileID: 0}
+--- !u!104 &2
+RenderSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 9
+ m_Fog: 0
+ m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
+ m_FogMode: 3
+ m_FogDensity: 0.01
+ m_LinearFogStart: 0
+ m_LinearFogEnd: 300
+ m_AmbientSkyColor: {r: 0.1, g: 0.1, b: 0.1, a: 1}
+ m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
+ m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
+ m_AmbientIntensity: 1
+ m_AmbientMode: 4
+ m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
+ m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0}
+ m_HaloStrength: 0.5
+ m_FlareStrength: 1
+ m_FlareFadeSpeed: 3
+ m_HaloTexture: {fileID: 0}
+ m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
+ m_DefaultReflectionMode: 0
+ m_DefaultReflectionResolution: 128
+ m_ReflectionBounces: 1
+ m_ReflectionIntensity: 1
+ m_CustomReflection: {fileID: 0}
+ m_Sun: {fileID: 0}
+ m_IndirectSpecularColor: {r: 0.18028378, g: 0.22571412, b: 0.30692285, a: 1}
+ m_UseRadianceAmbientProbe: 0
+--- !u!157 &3
+LightmapSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 11
+ m_GIWorkflowMode: 0
+ m_GISettings:
+ serializedVersion: 2
+ m_BounceScale: 1
+ m_IndirectOutputScale: 1
+ m_AlbedoBoost: 1
+ m_EnvironmentLightingMode: 0
+ m_EnableBakedLightmaps: 1
+ m_EnableRealtimeLightmaps: 1
+ m_LightmapEditorSettings:
+ serializedVersion: 10
+ m_Resolution: 2
+ m_BakeResolution: 40
+ m_AtlasSize: 1024
+ m_AO: 0
+ m_AOMaxDistance: 1
+ m_CompAOExponent: 1
+ m_CompAOExponentDirect: 0
+ m_Padding: 2
+ m_LightmapParameters: {fileID: 0}
+ m_LightmapsBakeMode: 1
+ m_TextureCompression: 1
+ m_FinalGather: 0
+ m_FinalGatherFiltering: 1
+ m_FinalGatherRayCount: 256
+ m_ReflectionCompression: 2
+ m_MixedBakeMode: 2
+ m_BakeBackend: 1
+ m_PVRSampling: 1
+ m_PVRDirectSampleCount: 32
+ m_PVRSampleCount: 500
+ m_PVRBounces: 2
+ m_PVRFilterTypeDirect: 0
+ m_PVRFilterTypeIndirect: 0
+ m_PVRFilterTypeAO: 0
+ m_PVRFilteringMode: 1
+ m_PVRCulling: 1
+ m_PVRFilteringGaussRadiusDirect: 1
+ m_PVRFilteringGaussRadiusIndirect: 5
+ m_PVRFilteringGaussRadiusAO: 2
+ m_PVRFilteringAtrousPositionSigmaDirect: 0.5
+ m_PVRFilteringAtrousPositionSigmaIndirect: 2
+ m_PVRFilteringAtrousPositionSigmaAO: 1
+ m_ShowResolutionOverlay: 1
+ m_LightingDataAsset: {fileID: 0}
+ m_UseShadowmask: 1
+--- !u!196 &4
+NavMeshSettings:
+ serializedVersion: 2
+ m_ObjectHideFlags: 0
+ m_BuildSettings:
+ serializedVersion: 2
+ agentTypeID: 0
+ agentRadius: 0.5
+ agentHeight: 2
+ agentSlope: 45
+ agentClimb: 0.4
+ ledgeDropHeight: 0
+ maxJumpAcrossDistance: 0
+ minRegionArea: 2
+ manualCellSize: 0
+ cellSize: 0.16666667
+ manualTileSize: 0
+ tileSize: 256
+ accuratePlacement: 0
+ debug:
+ m_Flags: 0
+ m_NavMeshData: {fileID: 0}
+--- !u!1 &576787327
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 576787329}
+ - component: {fileID: 576787328}
+ m_Layer: 0
+ m_Name: Directional Light
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!108 &576787328
+Light:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 576787327}
+ m_Enabled: 1
+ serializedVersion: 8
+ m_Type: 1
+ m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1}
+ m_Intensity: 1
+ m_Range: 10
+ m_SpotAngle: 30
+ m_CookieSize: 10
+ m_Shadows:
+ m_Type: 2
+ m_Resolution: -1
+ m_CustomResolution: -1
+ m_Strength: 1
+ m_Bias: 0.05
+ m_NormalBias: 0.4
+ m_NearPlane: 0.2
+ m_Cookie: {fileID: 0}
+ m_DrawHalo: 0
+ m_Flare: {fileID: 0}
+ m_RenderMode: 0
+ m_CullingMask:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_Lightmapping: 4
+ m_LightShadowCasterMode: 0
+ m_AreaSize: {x: 1, y: 1}
+ m_BounceIntensity: 1
+ m_ColorTemperature: 6570
+ m_UseColorTemperature: 0
+ m_ShadowRadius: 0
+ m_ShadowAngle: 0
+--- !u!4 &576787329
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 576787327}
+ m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261}
+ m_LocalPosition: {x: 0, y: 3, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_RootOrder: 1
+ m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
+--- !u!1 &861741897
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 861741900}
+ - component: {fileID: 861741899}
+ - component: {fileID: 861741898}
+ m_Layer: 0
+ m_Name: Main Camera
+ m_TagString: MainCamera
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!81 &861741898
+AudioListener:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 861741897}
+ m_Enabled: 1
+--- !u!20 &861741899
+Camera:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 861741897}
+ m_Enabled: 1
+ serializedVersion: 2
+ m_ClearFlags: 2
+ m_BackGroundColor: {r: 0.254717, g: 0.254717, b: 0.254717, a: 0}
+ m_projectionMatrixMode: 1
+ m_SensorSize: {x: 36, y: 24}
+ m_LensShift: {x: 0, y: 0}
+ m_GateFitMode: 2
+ m_FocalLength: 50
+ m_NormalizedViewPortRect:
+ serializedVersion: 2
+ x: 0
+ y: 0
+ width: 1
+ height: 1
+ near clip plane: 0.3
+ far clip plane: 1000
+ field of view: 52.8
+ orthographic: 0
+ orthographic size: 5
+ m_Depth: -1
+ m_CullingMask:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_RenderingPath: -1
+ m_TargetTexture: {fileID: 0}
+ m_TargetDisplay: 0
+ m_TargetEye: 3
+ m_HDR: 1
+ m_AllowMSAA: 1
+ m_AllowDynamicResolution: 0
+ m_ForceIntoRT: 0
+ m_OcclusionCulling: 1
+ m_StereoConvergence: 10
+ m_StereoSeparation: 0.022
+--- !u!4 &861741900
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 861741897}
+ m_LocalRotation: {x: 0.016969634, y: -0.7069037, z: 0.016969668, w: 0.7069026}
+ m_LocalPosition: {x: 9.145469, y: 2.5208502, z: 4.259833}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &2098653157
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 2098653161}
+ - component: {fileID: 2098653160}
+ - component: {fileID: 2098653159}
+ - component: {fileID: 2098653158}
+ m_Layer: 0
+ m_Name: Ground
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!64 &2098653158
+MeshCollider:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2098653157}
+ m_Material: {fileID: 0}
+ m_IsTrigger: 0
+ m_Enabled: 1
+ serializedVersion: 3
+ m_Convex: 0
+ m_CookingOptions: 14
+ m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!23 &2098653159
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2098653157}
+ m_Enabled: 1
+ m_CastShadows: 0
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 0
+ m_MotionVectors: 1
+ m_LightProbeUsage: 2
+ m_ReflectionProbeUsage: 0
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 2100000, guid: 7e20731177f283f4c83d0f75131677f5, type: 2}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 0
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+--- !u!33 &2098653160
+MeshFilter:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2098653157}
+ m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!4 &2098653161
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2098653157}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: -1.0507812, y: 0, z: 5.1894274}
+ m_LocalScale: {x: 1, y: 1, z: 10}
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_RootOrder: 2
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
diff --git a/Assets/Tools/ActionTool/ActionToolScene.unity.meta b/Assets/Tools/ActionTool/ActionToolScene.unity.meta
new file mode 100644
index 00000000..8773778a
--- /dev/null
+++ b/Assets/Tools/ActionTool/ActionToolScene.unity.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: e07af9762c9aef241b5a835285878caf
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Tools/ActionTool/ActionToolSettings.cs b/Assets/Tools/ActionTool/ActionToolSettings.cs
new file mode 100644
index 00000000..62f79ac4
--- /dev/null
+++ b/Assets/Tools/ActionTool/ActionToolSettings.cs
@@ -0,0 +1,20 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+[CreateAssetMenu(fileName = "ActionTool Settings")]
+public class ActionToolSettings : ScriptableObject
+{
+ public List<string> eventNames = new List<string>();
+ public List<Color> eventColors = new List<Color>();
+
+ public Color GetColor(string eventName)
+ {
+ if(eventNames.Contains(eventName))
+ {
+ return eventColors[eventNames.IndexOf(eventName)];
+ }
+ return Color.black;
+ }
+
+}
diff --git a/Assets/Tools/ActionTool/ActionToolSettings.cs.meta b/Assets/Tools/ActionTool/ActionToolSettings.cs.meta
new file mode 100644
index 00000000..bd3da9fa
--- /dev/null
+++ b/Assets/Tools/ActionTool/ActionToolSettings.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 7a4c92544e0489b499e3339f34c1ff00
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Tools/ActionTool/ActionTool_Ground_Shader.shader b/Assets/Tools/ActionTool/ActionTool_Ground_Shader.shader
new file mode 100644
index 00000000..2fe0c438
--- /dev/null
+++ b/Assets/Tools/ActionTool/ActionTool_Ground_Shader.shader
@@ -0,0 +1,351 @@
+// Unity built-in shader source. Copyright (c) 2016 Unity Technologies. MIT license (see license.txt)
+
+Shader "ActionTool/ActionTool_Ground_Shader"
+{
+ Properties
+ {
+ _Color("Color", Color) = (1,1,1,1)
+ _MainTex("Albedo", 2D) = "white" {}
+
+ _Cutoff("Alpha Cutoff", Range(0.0, 1.0)) = 0.5
+
+ _Glossiness("Smoothness", Range(0.0, 1.0)) = 0.5
+ _GlossMapScale("Smoothness Scale", Range(0.0, 1.0)) = 1.0
+ [Enum(Metallic Alpha,0,Albedo Alpha,1)] _SmoothnessTextureChannel("Smoothness texture channel", Float) = 0
+
+ [Gamma] _Metallic("Metallic", Range(0.0, 1.0)) = 0.0
+ _MetallicGlossMap("Metallic", 2D) = "white" {}
+
+ [ToggleOff] _SpecularHighlights("Specular Highlights", Float) = 1.0
+ [ToggleOff] _GlossyReflections("Glossy Reflections", Float) = 1.0
+
+ _BumpScale("Scale", Float) = 1.0
+ _BumpMap("Normal Map", 2D) = "bump" {}
+
+ _Parallax("Height Scale", Range(0.005, 0.08)) = 0.02
+ _ParallaxMap("Height Map", 2D) = "black" {}
+
+ _OcclusionStrength("Strength", Range(0.0, 1.0)) = 1.0
+ _OcclusionMap("Occlusion", 2D) = "white" {}
+
+ _EmissionColor("Color", Color) = (0,0,0)
+ _EmissionMap("Emission", 2D) = "white" {}
+
+ _DetailMask("Detail Mask", 2D) = "white" {}
+
+ _DetailAlbedoMap("Detail Albedo x2", 2D) = "grey" {}
+ _DetailNormalMapScale("Scale", Float) = 1.0
+ _DetailNormalMap("Normal Map", 2D) = "bump" {}
+
+ [Enum(UV0,0,UV1,1)] _UVSec("UV Set for secondary textures", Float) = 0
+
+
+ // Blending state
+ [HideInInspector] _Mode("__mode", Float) = 0.0
+ [HideInInspector] _SrcBlend("__src", Float) = 1.0
+ [HideInInspector] _DstBlend("__dst", Float) = 0.0
+ //_ZWrite("__zw", Float) = 1.0
+ }
+
+ CGINCLUDE
+#define UNITY_SETUP_BRDF_INPUT MetallicSetup
+ ENDCG
+
+ SubShader
+ {
+ Tags { "RenderType" = "Opaque" "PerformanceChecks" = "False" }
+ LOD 300
+
+
+ ZWrite On
+
+
+ // ------------------------------------------------------------------
+ // Base forward pass (directional light, emission, lightmaps, ...)
+ Pass
+ {
+ Name "FORWARD"
+ Tags { "LightMode" = "ForwardBase" }
+
+ Blend[_SrcBlend][_DstBlend]
+ ZWrite On
+
+ CGPROGRAM
+ #pragma target 3.0
+
+ // -------------------------------------
+
+ #pragma shader_feature _NORMALMAP
+ #pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON
+ #pragma shader_feature _EMISSION
+ #pragma shader_feature _METALLICGLOSSMAP
+ #pragma shader_feature ___ _DETAIL_MULX2
+ #pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
+ #pragma shader_feature _ _SPECULARHIGHLIGHTS_OFF
+ #pragma shader_feature _ _GLOSSYREFLECTIONS_OFF
+ #pragma shader_feature _PARALLAXMAP
+
+ #pragma multi_compile_fwdbase
+ #pragma multi_compile_fog
+ #pragma multi_compile_instancing
+ // Uncomment the following line to enable dithering LOD crossfade. Note: there are more in the file to uncomment for other passes.
+ //#pragma multi_compile _ LOD_FADE_CROSSFADE
+
+ #pragma vertex vertBase
+ #pragma fragment fragBase
+ #include "UnityStandardCoreForward.cginc"
+
+ ENDCG
+ }
+ // ------------------------------------------------------------------
+ // Additive forward pass (one light per pass)
+ Pass
+ {
+ Name "FORWARD_DELTA"
+ Tags { "LightMode" = "ForwardAdd" }
+ Blend[_SrcBlend] One
+ Fog { Color(0,0,0,0) } // in additive pass fog should be black
+ ZWrite On
+ ZTest LEqual
+
+ CGPROGRAM
+ #pragma target 3.0
+
+ // -------------------------------------
+
+
+ #pragma shader_feature _NORMALMAP
+ #pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON
+ #pragma shader_feature _METALLICGLOSSMAP
+ #pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
+ #pragma shader_feature _ _SPECULARHIGHLIGHTS_OFF
+ #pragma shader_feature ___ _DETAIL_MULX2
+ #pragma shader_feature _PARALLAXMAP
+
+ #pragma multi_compile_fwdadd_fullshadows
+ #pragma multi_compile_fog
+ // Uncomment the following line to enable dithering LOD crossfade. Note: there are more in the file to uncomment for other passes.
+ //#pragma multi_compile _ LOD_FADE_CROSSFADE
+
+ #pragma vertex vertAdd
+ #pragma fragment fragAdd
+ #include "UnityStandardCoreForward.cginc"
+
+ ENDCG
+ }
+ // ------------------------------------------------------------------
+ // Shadow rendering pass
+ Pass {
+ Name "ShadowCaster"
+ Tags { "LightMode" = "ShadowCaster" }
+
+ ZWrite On ZTest LEqual
+
+ CGPROGRAM
+ #pragma target 3.0
+
+ // -------------------------------------
+
+
+ #pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON
+ #pragma shader_feature _METALLICGLOSSMAP
+ #pragma shader_feature _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
+ #pragma shader_feature _PARALLAXMAP
+ #pragma multi_compile_shadowcaster
+ #pragma multi_compile_instancing
+ // Uncomment the following line to enable dithering LOD crossfade. Note: there are more in the file to uncomment for other passes.
+ //#pragma multi_compile _ LOD_FADE_CROSSFADE
+
+ #pragma vertex vertShadowCaster
+ #pragma fragment fragShadowCaster
+
+ #include "UnityStandardShadow.cginc"
+
+ ENDCG
+ }
+ // ------------------------------------------------------------------
+ // Deferred pass
+ Pass
+ {
+ Name "DEFERRED"
+ Tags { "LightMode" = "Deferred" }
+
+ CGPROGRAM
+ #pragma target 3.0
+ #pragma exclude_renderers nomrt
+
+
+ // -------------------------------------
+
+ #pragma shader_feature _NORMALMAP
+ #pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON
+ #pragma shader_feature _EMISSION
+ #pragma shader_feature _METALLICGLOSSMAP
+ #pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
+ #pragma shader_feature _ _SPECULARHIGHLIGHTS_OFF
+ #pragma shader_feature ___ _DETAIL_MULX2
+ #pragma shader_feature _PARALLAXMAP
+
+ #pragma multi_compile_prepassfinal
+ #pragma multi_compile_instancing
+ // Uncomment the following line to enable dithering LOD crossfade. Note: there are more in the file to uncomment for other passes.
+ //#pragma multi_compile _ LOD_FADE_CROSSFADE
+
+ #pragma vertex vertDeferred
+ #pragma fragment fragDeferred
+
+ #include "UnityStandardCore.cginc"
+
+ ENDCG
+ }
+
+ // ------------------------------------------------------------------
+ // Extracts information for lightmapping, GI (emission, albedo, ...)
+ // This pass it not used during regular rendering.
+ Pass
+ {
+ Name "META"
+ Tags { "LightMode" = "Meta" }
+
+ Cull Off
+
+ CGPROGRAM
+ #pragma vertex vert_meta
+ #pragma fragment frag_meta
+
+ #pragma shader_feature _EMISSION
+ #pragma shader_feature _METALLICGLOSSMAP
+ #pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
+ #pragma shader_feature ___ _DETAIL_MULX2
+ #pragma shader_feature EDITOR_VISUALIZATION
+
+ #include "UnityStandardMeta.cginc"
+ ENDCG
+ }
+ }
+
+ SubShader
+ {
+ Tags { "RenderType" = "Opaque" "PerformanceChecks" = "False" }
+ LOD 150
+
+ // ------------------------------------------------------------------
+ // Base forward pass (directional light, emission, lightmaps, ...)
+ Pass
+ {
+ Name "FORWARD"
+ Tags { "LightMode" = "ForwardBase" }
+
+ Blend[_SrcBlend][_DstBlend]
+ ZWrite On
+
+ CGPROGRAM
+ #pragma target 2.0
+
+ #pragma shader_feature _NORMALMAP
+ #pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON
+ #pragma shader_feature _EMISSION
+ #pragma shader_feature _METALLICGLOSSMAP
+ #pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
+ #pragma shader_feature _ _SPECULARHIGHLIGHTS_OFF
+ #pragma shader_feature _ _GLOSSYREFLECTIONS_OFF
+ // SM2.0: NOT SUPPORTED shader_feature ___ _DETAIL_MULX2
+ // SM2.0: NOT SUPPORTED shader_feature _PARALLAXMAP
+
+ #pragma skip_variants SHADOWS_SOFT DIRLIGHTMAP_COMBINED
+
+ #pragma multi_compile_fwdbase
+ #pragma multi_compile_fog
+
+ #pragma vertex vertBase
+ #pragma fragment fragBase
+ #include "UnityStandardCoreForward.cginc"
+
+ ENDCG
+ }
+ // ------------------------------------------------------------------
+ // Additive forward pass (one light per pass)
+ Pass
+ {
+ Name "FORWARD_DELTA"
+ Tags { "LightMode" = "ForwardAdd" }
+ Blend[_SrcBlend] One
+ Fog { Color(0,0,0,0) } // in additive pass fog should be black
+ ZWrite On
+ ZTest LEqual
+
+ CGPROGRAM
+ #pragma target 2.0
+
+ #pragma shader_feature _NORMALMAP
+ #pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON
+ #pragma shader_feature _METALLICGLOSSMAP
+ #pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
+ #pragma shader_feature _ _SPECULARHIGHLIGHTS_OFF
+ #pragma shader_feature ___ _DETAIL_MULX2
+ // SM2.0: NOT SUPPORTED shader_feature _PARALLAXMAP
+ #pragma skip_variants SHADOWS_SOFT
+
+ #pragma multi_compile_fwdadd_fullshadows
+ #pragma multi_compile_fog
+
+ #pragma vertex vertAdd
+ #pragma fragment fragAdd
+ #include "UnityStandardCoreForward.cginc"
+
+ ENDCG
+ }
+ // ------------------------------------------------------------------
+ // Shadow rendering pass
+ Pass {
+ Name "ShadowCaster"
+ Tags { "LightMode" = "ShadowCaster" }
+
+ ZWrite On ZTest LEqual
+
+ CGPROGRAM
+ #pragma target 2.0
+
+ #pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON
+ #pragma shader_feature _METALLICGLOSSMAP
+ #pragma shader_feature _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
+ #pragma skip_variants SHADOWS_SOFT
+ #pragma multi_compile_shadowcaster
+
+ #pragma vertex vertShadowCaster
+ #pragma fragment fragShadowCaster
+
+ #include "UnityStandardShadow.cginc"
+
+ ENDCG
+ }
+
+ // ------------------------------------------------------------------
+ // Extracts information for lightmapping, GI (emission, albedo, ...)
+ // This pass it not used during regular rendering.
+ Pass
+ {
+ Name "META"
+ Tags { "LightMode" = "Meta" }
+
+ Cull Off
+
+ CGPROGRAM
+ #pragma vertex vert_meta
+ #pragma fragment frag_meta
+
+ #pragma shader_feature _EMISSION
+ #pragma shader_feature _METALLICGLOSSMAP
+ #pragma shader_feature _ _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A
+ #pragma shader_feature ___ _DETAIL_MULX2
+ #pragma shader_feature EDITOR_VISUALIZATION
+
+ #include "UnityStandardMeta.cginc"
+ ENDCG
+ }
+ }
+
+
+ FallBack "VertexLit"
+ CustomEditor "StandardShaderGUI"
+}
diff --git a/Assets/Tools/ActionTool/ActionTool_Ground_Shader.shader.meta b/Assets/Tools/ActionTool/ActionTool_Ground_Shader.shader.meta
new file mode 100644
index 00000000..74f27b5e
--- /dev/null
+++ b/Assets/Tools/ActionTool/ActionTool_Ground_Shader.shader.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: b1a9eb5bb0cae704b85619a5da9355ae
+ShaderImporter:
+ externalObjects: {}
+ defaultTextures: []
+ nonModifiableTextures: []
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Tools/ActionTool/DarkPlane.mat b/Assets/Tools/ActionTool/DarkPlane.mat
new file mode 100644
index 00000000..823e783d
--- /dev/null
+++ b/Assets/Tools/ActionTool/DarkPlane.mat
@@ -0,0 +1,77 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!21 &2100000
+Material:
+ serializedVersion: 6
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: DarkPlane
+ m_Shader: {fileID: 4800000, guid: b1a9eb5bb0cae704b85619a5da9355ae, type: 3}
+ m_ShaderKeywords:
+ m_LightmapFlags: 4
+ m_EnableInstancingVariants: 0
+ m_DoubleSidedGI: 0
+ m_CustomRenderQueue: -1
+ stringTagMap: {}
+ disabledShaderPasses: []
+ m_SavedProperties:
+ serializedVersion: 3
+ m_TexEnvs:
+ - _BumpMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailAlbedoMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailMask:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _DetailNormalMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _EmissionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MainTex:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _MetallicGlossMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _OcclusionMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ - _ParallaxMap:
+ m_Texture: {fileID: 0}
+ m_Scale: {x: 1, y: 1}
+ m_Offset: {x: 0, y: 0}
+ m_Floats:
+ - _BumpScale: 1
+ - _Cutoff: 0.5
+ - _DetailNormalMapScale: 1
+ - _DstBlend: 0
+ - _GlossMapScale: 1
+ - _Glossiness: 0.5
+ - _GlossyReflections: 1
+ - _Metallic: 0
+ - _Mode: 0
+ - _OcclusionStrength: 1
+ - _Parallax: 0.02
+ - _SmoothnessTextureChannel: 0
+ - _SpecularHighlights: 1
+ - _SrcBlend: 1
+ - _UVSec: 0
+ - _ZWrite: 1
+ m_Colors:
+ - _Color: {r: 0.3207547, g: 0.3207547, b: 0.3207547, a: 1}
+ - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
diff --git a/Assets/Tools/ActionTool/DarkPlane.mat.meta b/Assets/Tools/ActionTool/DarkPlane.mat.meta
new file mode 100644
index 00000000..9f220667
--- /dev/null
+++ b/Assets/Tools/ActionTool/DarkPlane.mat.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 7e20731177f283f4c83d0f75131677f5
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 2100000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Tools/ActionTool/Editor.meta b/Assets/Tools/ActionTool/Editor.meta
new file mode 100644
index 00000000..1f2132d1
--- /dev/null
+++ b/Assets/Tools/ActionTool/Editor.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 23b21512cd7cfed4ea8eb19164cb1e42
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Tools/ActionTool/Editor/ActionColliderEditor.cs b/Assets/Tools/ActionTool/Editor/ActionColliderEditor.cs
new file mode 100644
index 00000000..adb8819f
--- /dev/null
+++ b/Assets/Tools/ActionTool/Editor/ActionColliderEditor.cs
@@ -0,0 +1,346 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Reflection;
+using UnityEngine;
+using UnityEditor;
+
+namespace ActionTool
+{
+
+ // 编辑事件
+ public class ActionColliderEditor : EditorWindow
+ {
+ EditorWindow sceneView;
+ ActionEditorStyles styles;
+
+ ColliderBox collider;
+
+ Dictionary<string, bool> m_Foldout = new Dictionary<string, bool> ();
+
+ int indent = 0;
+
+ private void OnEnable()
+ {
+ titleContent = new GUIContent("Collider Editor");
+ m_Foldout.Clear();
+ }
+
+ private void OnDisable()
+ {
+ m_Foldout.Clear();
+ ActionManager.colliderData = null;
+ ActionManager.ColliderWindow = null;
+ if(ActionManager.PreviewWindow != null)
+ ActionManager.PreviewWindow.Repaint();
+ }
+
+ private void Update()
+ {
+ }
+
+ Vector2 scroll;
+ private void OnGUI()
+ {
+ if (ActionManager.colliderData == null)
+ {
+ this.Close();
+ return;
+ }
+
+ collider = ActionManager.colliderData.collider;
+ if (collider == null)
+ return;
+
+ if (styles == null) styles = ActionEditorStyles.Get();
+
+ GUILayout.Space(2);
+
+ EditorGUILayout.LabelField(collider.type.ToString() + " " + ActionManager.colliderIndex, styles.textBoldBig, GUILayout.Height(25));
+
+ GUILayout.Space(2);
+
+ EditorGUILayout.BeginHorizontal();
+ if (GUILayout.Button("Save"))
+ {
+
+ }
+ if (GUILayout.Button("Revert"))
+ {
+
+ }
+ Color prevColor = GUI.backgroundColor;
+ GUI.backgroundColor = Color.red;
+ if (GUILayout.Button("Delete"))
+ {
+ ActionManager.DeleteCurBox();
+ }
+ GUI.backgroundColor = prevColor;
+ EditorGUILayout.EndHorizontal();
+
+ GUILayout.Space(5);
+
+ scroll = EditorGUILayout.BeginScrollView(scroll);
+
+ Type type = collider.GetType();
+ FieldInfo[] fields = type.GetFields(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly);
+ if (fields != null && fields.Length > 0)
+ {
+ int collliderType = -1;
+ FoldoutAttribute foldout = null;
+ int foldoutElementCount = 0;
+ for (int i = 0; i < fields.Length; ++i)
+ {
+ FieldInfo field = fields[i];
+ string name = field.Name + " (" + field.FieldType.Name + ")";
+ string tooltip = "";
+ bool skip = false;
+ foreach (var attr in field.GetCustomAttributes())
+ {
+ if (attr.GetType() == typeof(ColliderTypeAttribute))
+ {
+ ColliderTypeAttribute t = attr as ColliderTypeAttribute;
+ collliderType = (int)t.type;
+ }
+ }
+ if (collliderType != -1 && collliderType != (int)collider.type)
+ {
+ skip = true;
+ }
+ if (skip)
+ {
+ continue;
+ }
+ foreach (var attr in field.GetCustomAttributes())
+ {
+ if (attr.GetType() == typeof(WhenAttribute))
+ {
+ WhenAttribute when = attr as WhenAttribute;
+ string conditionName = when.conditionName;
+ FieldInfo condition = type.GetField(conditionName);
+ if ((float)condition.GetValue(collider) != when.value)
+ {
+ skip = true;
+ break;
+ }
+ }
+ else if (attr.GetType() == typeof(WhenNotAttribute))
+ {
+ WhenNotAttribute when = attr as WhenNotAttribute;
+ string conditionName = when.conditionName;
+ FieldInfo condition = type.GetField(conditionName);
+ if ((float)condition.GetValue(collider) == when.value)
+ {
+ skip = true;
+ break;
+ }
+ }
+ else if(attr.GetType() == typeof(IfAttribute))
+ {
+ IfAttribute when = attr as IfAttribute;
+ string conditionName = when.conditionName;
+ FieldInfo condition = type.GetField(conditionName);
+ if (!(bool)condition.GetValue(collider))
+ {
+ skip = true;
+ break;
+ }
+ }
+ else if (attr.GetType() == typeof(IfNotAttribute))
+ {
+ IfNotAttribute when = attr as IfNotAttribute;
+ string conditionName = when.conditionName;
+ FieldInfo condition = type.GetField(conditionName);
+ if ((bool)condition.GetValue(collider))
+ {
+ skip = true;
+ break;
+ }
+ }
+ else if (attr.GetType() == typeof(FoldoutAttribute))
+ {
+ if(collliderType == -1 || collliderType == (int)collider.type)
+ {
+ foldout = attr as FoldoutAttribute;
+ if (!m_Foldout.ContainsKey(foldout.title))
+ m_Foldout.Add(foldout.title, false);
+ m_Foldout[foldout.title] = EditorGUILayout.Foldout(m_Foldout[foldout.title], foldout.title);
+ foldoutElementCount = 0;
+ indent = 13;
+ }
+ }
+ else if (attr.GetType() == typeof(CommentAttribute))
+ {
+ CommentAttribute comment = attr as CommentAttribute;
+ GUIStyle style = GUI.skin.GetStyle("Label");
+ TextAnchor preanchor = style.alignment;
+ style.alignment = comment.alignment;
+ GUI_Label(new GUIContent(comment.comment), style);
+ style.alignment = preanchor;
+ }
+ }
+ if(foldout != null && (++foldoutElementCount) <= foldout.count)
+ {
+ skip |= !m_Foldout[foldout.title];
+ }
+ if (skip)
+ {
+ if (foldout != null && foldoutElementCount == foldout.count)
+ {
+ foldout = null;
+ foldoutElementCount = 0;
+ indent = 0;
+ }
+ GUI.enabled = true;
+ continue;
+ }
+
+ foreach (var attr in field.GetCustomAttributes())
+ {
+ if (attr.GetType() == typeof(TooltipAttribute))
+ {
+ TooltipAttribute tooltipattr = attr as TooltipAttribute;
+ if (tooltip != null)
+ {
+ tooltip = tooltipattr.tooltip;
+ }
+ }
+ else if (attr.GetType() == typeof(DisallowModifiyInGUI))
+ {
+ GUI.enabled = false;
+ }
+ else if (attr.GetType() == typeof(SpaceAttribute))
+ {
+ SpaceAttribute space = attr as SpaceAttribute;
+ GUILayout.Space(space.height);
+ }
+ }
+
+ GUI_Label(new GUIContent(name, tooltip), styles.textBold);
+
+ if (field.FieldType == typeof(Vector3))
+ {
+ field.SetValue(collider, GUI_Vector3((Vector3)field.GetValue(collider)));
+ }
+ else if (field.FieldType == typeof(Vector2))
+ {
+ field.SetValue(collider, GUI_Vector2((Vector2)field.GetValue(collider)));
+ }
+ else if(field.FieldType == typeof(Color))
+ {
+ field.SetValue(collider, GUI_Color((Color)field.GetValue(collider)));
+ }
+ else if (field.FieldType == typeof(string))
+ {
+ field.SetValue(collider, GUI_String((string)field.GetValue(collider)));
+ }
+ else if (field.FieldType == typeof(bool))
+ {
+ field.SetValue(collider, GUI_Bool((bool)field.GetValue(collider)));
+ }
+ else if (field.FieldType == typeof(AnimationCurve))
+ {
+ field.SetValue(collider, GUI_Curve(field.GetValue(collider) as AnimationCurve));
+ }
+ else if (field.FieldType.IsEnum)
+ {
+ field.SetValue(collider, GUI_Enum((Enum)field.GetValue(collider)));
+ }
+ else if (field.FieldType == typeof(float))
+ {
+ field.SetValue(collider, GUI_Float((float)field.GetValue(collider)));
+ }
+ else if (field.FieldType == typeof(int))
+ {
+ field.SetValue(collider, GUI_Int((int)field.GetValue(collider)));
+ }
+ GUI.enabled = true;
+ GUILayout.Space(5);
+
+ if (foldout != null && foldoutElementCount == foldout.count)
+ {
+ foldout = null;
+ foldoutElementCount = 0;
+ indent = 0;
+ }
+ }
+ }
+ EditorGUILayout.EndScrollView();
+ }
+
+ Rect GetControlRect()
+ {
+ Rect rect = EditorGUILayout.GetControlRect();
+ rect.x += indent;
+ rect.width -= indent;
+ return rect;
+ }
+
+ void GUI_Label(GUIContent label, GUIStyle style)
+ {
+ Rect rect = GetControlRect();
+ EditorGUI.LabelField(rect, label, style);
+ }
+
+ Vector3 GUI_Vector3(Vector3 value)
+ {
+ Rect rect = GetControlRect();
+ return EditorGUI.Vector3Field(rect, "", value);
+ }
+
+ Vector2 GUI_Vector2(Vector2 value)
+ {
+ Rect rect = GetControlRect();
+ return EditorGUI.Vector2Field(rect, "", value);
+ }
+
+ string GUI_String(string value)
+ {
+ Rect rect = GetControlRect();
+ return EditorGUI.TextField(rect, "", value);
+ }
+
+ bool GUI_Bool(bool value)
+ {
+ Rect rect = GetControlRect();
+ return GUI.Toggle(rect, value, "Check");
+ }
+
+ void GUI_Enum(string value)
+ {
+ Rect rect = GetControlRect();
+ GUI.Label(rect, value);
+ }
+
+ float GUI_Float(float value)
+ {
+ Rect rect = GetControlRect();
+ return EditorGUI.FloatField(rect, "", value);
+ }
+
+ int GUI_Int(int value)
+ {
+ Rect rect = GetControlRect();
+ return EditorGUI.IntField(rect, "", value);
+ }
+
+ AnimationCurve GUI_Curve(AnimationCurve curve)
+ {
+ Rect rect = GetControlRect();
+ return EditorGUI.CurveField(rect, "", curve);
+ }
+
+ Enum GUI_Enum(Enum enumValue)
+ {
+ Rect rect = GetControlRect();
+ return EditorGUI.EnumPopup(rect, "", enumValue);
+ }
+
+ Color GUI_Color(Color col)
+ {
+ Rect rect = GetControlRect();
+ return EditorGUI.ColorField(rect, col);
+ }
+
+ }
+} \ No newline at end of file
diff --git a/Assets/Tools/ActionTool/Editor/ActionColliderEditor.cs.meta b/Assets/Tools/ActionTool/Editor/ActionColliderEditor.cs.meta
new file mode 100644
index 00000000..2fd8e91f
--- /dev/null
+++ b/Assets/Tools/ActionTool/Editor/ActionColliderEditor.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 8507f595519bce344b9b7f27fa2f0f32
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Tools/ActionTool/Editor/ActionColliderFrameEditor.cs b/Assets/Tools/ActionTool/Editor/ActionColliderFrameEditor.cs
new file mode 100644
index 00000000..4efd1f93
--- /dev/null
+++ b/Assets/Tools/ActionTool/Editor/ActionColliderFrameEditor.cs
@@ -0,0 +1,109 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEditor;
+
+namespace ActionTool
+{
+
+ // 编辑collider帧
+ public class ActionColliderFrameEditor : EditorWindow
+ {
+ EditorWindow sceneView;
+
+ private void OnEnable()
+ {
+ titleContent = new GUIContent("Collider Frame Editor");
+ maxSize = new Vector2(300, 180);
+ minSize = maxSize;
+
+ if(!sceneView)
+ sceneView = EditorWindow.GetWindow<SceneView>();
+ }
+
+ private void OnDisable()
+ {
+ // sceneView = null;
+ ActionManager.OnSelectColliderFrame(null);
+ }
+
+ private void Update()
+ {
+ }
+
+ private void OnGUI()
+ {
+ var frame = ActionManager.editColliderFrame;
+ if (frame == null)
+ {
+ this.Close();
+ return;
+ }
+
+ GUI.changed = false;
+
+ GUILayout.Space(5);
+
+ EditorGUILayout.BeginHorizontal();
+ EditorGUILayout.LabelField("frame: ");
+ EditorGUILayout.LabelField(frame.frame.ToString());
+ EditorGUILayout.EndHorizontal();
+
+ EditorGUILayout.BeginHorizontal();
+ EditorGUILayout.LabelField("active: ");
+ frame.active = EditorGUILayout.Toggle(frame.active);
+ EditorGUILayout.EndHorizontal();
+
+ EditorGUILayout.LabelField("position: ");
+ frame.position = EditorGUILayout.Vector3Field("", frame.position);
+
+ EditorGUILayout.LabelField("size: ");
+ frame.size = EditorGUILayout.Vector3Field("", frame.size);
+
+ GUILayout.Space(10);
+
+ GUILayout.BeginHorizontal();
+
+ if(GUILayout.Button("Left abit"))
+ {
+ ActionData action = ActionManager.actionData;
+ float normaltime = frame.frame / action.totalFrame;
+ action.curAnimTimeNormal = normaltime - 0.001f;
+ }
+
+ if (GUILayout.Button("Right abit"))
+ {
+ ActionData action = ActionManager.actionData;
+ float normaltime = frame.frame / action.totalFrame;
+ action.curAnimTimeNormal = normaltime + 0.001f;
+ }
+
+ if (GUILayout.Button("Current"))
+ {
+ ActionData action = ActionManager.actionData;
+ float normaltime = frame.frame / action.totalFrame;
+ action.curAnimTimeNormal = normaltime;
+ }
+
+ GUILayout.EndHorizontal();
+
+ GUILayout.Space(10);
+
+ Color prevColor = GUI.backgroundColor;
+ GUI.backgroundColor = Color.red;
+ if (GUILayout.Button("Delete"))
+ {
+ ActionManager.DeleteCurFrame();
+ }
+ GUI.backgroundColor = prevColor;
+
+ if (GUI.changed)
+ {
+ if (sceneView != null)
+ sceneView.Repaint();
+ if (ActionManager.PreviewWindow != null)
+ ActionManager.PreviewWindow.Repaint();
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/Assets/Tools/ActionTool/Editor/ActionColliderFrameEditor.cs.meta b/Assets/Tools/ActionTool/Editor/ActionColliderFrameEditor.cs.meta
new file mode 100644
index 00000000..393c3deb
--- /dev/null
+++ b/Assets/Tools/ActionTool/Editor/ActionColliderFrameEditor.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 3fcd174d4fc741a4986f1a08413e6ada
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Tools/ActionTool/Editor/ActionData.cs b/Assets/Tools/ActionTool/Editor/ActionData.cs
new file mode 100644
index 00000000..3da31388
--- /dev/null
+++ b/Assets/Tools/ActionTool/Editor/ActionData.cs
@@ -0,0 +1,390 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Reflection;
+using System.Linq;
+using UnityEngine;
+using UnityEditor;
+
+namespace ActionTool
+{
+ // 正在编辑的动画
+ public class ActionData
+ {
+ private Animator m_Animator;
+ private AnimationClip m_Clip;
+
+ private AnimationData m_AnimData; // asset
+
+ private List<AnimationEventBase> m_EventList { get { return m_AnimData != null ? m_AnimData.animationEvents : null; } }
+
+ private AnimationEventBase m_CurEventInfo; // 当前正在编辑的event
+
+ private TimelineEventProxy m_TimelineEventProxy;
+
+ private static List<Projectile> m_Projectiles = new List<Projectile>();
+ private static List<FxClear> m_ParticleSystems = new List<FxClear>();
+
+ #region metadata
+ private float m_TotalFrame; //timeline采样的总帧数
+ public float totalFrame { get { return m_TotalFrame; } }
+ private float m_SampleRate; // 每次采样的时间间隔
+ public float sampleRate { get { return m_SampleRate; } }
+ #endregion
+
+ public float curAnimFrame { get { return m_CurAnimFrame; } }
+
+ public float curAnimTimeNormal
+ {
+ get
+ {
+ return m_CurAnimFrame / m_TotalFrame;
+ }
+ set
+ {
+ float v = value % m_TotalFrame;
+ m_CurAnimFrame = v * m_TotalFrame;
+ }
+ }
+
+ private int m_PrevFrame;
+ private float m_CurAnimFrame;
+ private double m_PrevLocalTime;
+ private float m_PrevNormalTime;
+
+ private int m_PrevAnimEventFrame; // 上次的帧数(整数)
+
+ private bool m_NotApplyCurves;
+ public bool applyCurves { get { return !m_NotApplyCurves; } set { m_NotApplyCurves = !value; } } // 是否开启curve控制速度
+ private bool m_NotApplyCurve;
+ public bool applyCurve { get { return !m_NotApplyCurve; } set { m_NotApplyCurve = !value; } } // 是否开启curve控制速度
+ private bool m_NotApplyRM;
+ public bool applyRootMotion { get { return !m_NotApplyRM; } set { m_NotApplyRM = !value; } }
+
+ private const string kStateName = "Action";
+
+ public RootMotionData rootMotion { get{ return m_RootMotion; } }
+ private RootMotionData m_RootMotion;
+
+ public string rootMotionPath
+ {
+ get
+ {
+ return AssetDatabase.GetAssetPath(m_RootMotion);
+ }
+ }
+
+ public void Initialize(Animator animator, AnimationClip clip, RootMotionData rootmotion)
+ {
+ m_Animator = animator;
+ m_Clip = clip;
+ if(m_Clip != null)
+ {
+ m_TotalFrame = m_Clip.length * ActionManager.FPS;
+ m_SampleRate = m_Clip.length / m_TotalFrame;
+ }
+ m_PrevFrame = -1;
+ m_CurAnimFrame = 0;
+ m_PrevLocalTime = 0;
+ m_Animator.Play(kStateName, 0, 0);
+ m_RootMotion = rootmotion;
+
+ m_TimelineEventProxy = new TimelineEventProxy(ActionManager.unitRoot.transform);
+ m_TimelineEventProxy.isInEditMode = true;
+ m_TimelineEventProxy.registerProjectile = RegisterProjectile;
+ m_TimelineEventProxy.registerParticleSystem = RegisterParticleSystem;
+ }
+
+ public void SetCurrentAnimTime(float time)
+ {
+ m_CurAnimFrame = time;
+ }
+
+ public void SetCurrentEvent(int index)
+ {
+ if(index < 0)
+ {
+ m_CurEventInfo = null;
+ }
+ else if(m_EventList != null)
+ {
+ m_CurEventInfo = m_EventList[index];
+ }
+ else
+ {
+ m_CurEventInfo = null;
+ }
+ }
+
+ public AnimationEventBase GetEvent(int index)
+ {
+ if(m_EventList != null && index >= 0 && index < m_EventList.Count)
+ {
+ return m_EventList[index];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ public int GetEventCount()
+ {
+ if (m_EventList != null)
+ return m_EventList.Count;
+ return 0;
+ }
+
+ public void RemoveCurrentEvent()
+ {
+ if(m_EventList != null)
+ {
+ m_EventList.Remove(m_CurEventInfo);
+ m_CurEventInfo = null;
+ }
+ }
+
+ public void RemoveAllEvent()
+ {
+ if(m_EventList != null)
+ {
+ m_EventList.Clear();
+ m_CurEventInfo = null;
+ }
+ }
+
+ public void StartFrame()
+ {
+ m_PrevFrame = -1;
+ m_PrevLocalTime = EditorApplication.timeSinceStartup;
+ }
+
+ public void UpdateFrame()
+ {
+ float dt = (float)(EditorApplication.timeSinceStartup - m_PrevLocalTime);
+
+ if (ActionManager.IsPlay)
+ {
+ float deltaFrame = dt * ActionManager.FPS * ActionManager.Speed;
+
+ if (applyCurve)
+ {
+ float normalizeTime = m_CurAnimFrame / m_TotalFrame;
+ AnimationData animData = ActionManager.animationData;
+ if (animData)
+ {
+ AnimationCurve curve = animData.speedCurve;
+ deltaFrame *= curve.Evaluate(normalizeTime);
+ }
+ }
+
+ m_CurAnimFrame += deltaFrame;
+
+ if (m_CurAnimFrame > m_TotalFrame)
+ {
+ ActionManager.ResetUnitRootPosAndRot();
+ m_PrevNormalTime = 0;
+ }
+ m_CurAnimFrame %= m_TotalFrame;
+ }
+
+ UpdateParticles(dt);
+
+ UpdateProjectiles(dt);
+
+ ActionManager.gizmos.SetCurAnimFrame(m_CurAnimFrame);
+
+ SampleFrame();
+
+ RunEvent();
+
+ m_PrevLocalTime = EditorApplication.timeSinceStartup;
+ }
+
+ // 播放当前帧
+ public void SampleFrame()
+ {
+ if (m_Animator == null)
+ return;
+
+ float normalizeTime = m_CurAnimFrame / m_TotalFrame;
+
+ if(applyRootMotion)
+ {
+ var animData = ActionManager.animationData;
+ bool overrideRM = animData != null && animData.overrideRootMotion == true;
+
+ if(!overrideRM && m_RootMotion)
+ {
+ // Action Tool这里需要转换一下root motion的轴
+ ActionManager.unitRoot.transform.position = RootMotionUtility.ExchangeXZ(m_RootMotion.GetRootMotion(normalizeTime));
+ }
+ else if(overrideRM)
+ {
+ if(!ActionRootMotionEditor.IsRecord)
+ {
+ ActionManager.unitRoot.transform.position = animData.rootMotionOverrideData.GetPosition(m_CurAnimFrame);
+ }
+ else // 只在第一次播到这一帧的时候设置位置,否则场景里没法编辑位置
+ {
+ int curAnimEventFrame = (int)m_CurAnimFrame;
+ normalizeTime = curAnimEventFrame / m_TotalFrame;
+ if (curAnimEventFrame != m_PrevAnimEventFrame)
+ {
+ ActionManager.unitRoot.transform.position = animData.rootMotionOverrideData.GetPosition(curAnimEventFrame);
+ }
+ m_PrevAnimEventFrame = curAnimEventFrame;
+ }
+ }
+ }
+
+ m_Animator.speed = 1;
+ m_Animator.Play(kStateName, 0, normalizeTime);
+ m_Animator.Update(0);
+ m_Animator.speed = 0;
+
+ }
+
+ public int GetCurrentFrame()
+ {
+ float animTime = sampleRate * m_CurAnimFrame;
+ int curFrame = Mathf.RoundToInt(animTime * ActionManager.FPS);
+ return curFrame;
+ }
+
+ public void RunEvent()
+ {
+ if (m_TimelineEventProxy != null)
+ m_TimelineEventProxy.ExecuteAnimationEvents(ActionManager.animationData, m_CurAnimFrame);
+ }
+
+ public void CreateEvent(TimelineEventProxy.EEventType eventtype, int startFrame)
+ {
+ var classes = Assembly
+ .GetAssembly(typeof(AnimationEventBase))
+ .GetTypes()
+ .Where(t => t.IsSubclassOf(typeof(AnimationEventBase)));
+ Type type = null;
+ foreach (var itor in classes)
+ {
+ string name = itor.Name;
+ if(itor.Name == eventtype.ToString())
+ {
+ type = itor;
+ break;
+ }
+ }
+ if(type != null)
+ {
+ var e = Activator.CreateInstance(type) as AnimationEventBase;
+ //e.type = eventtype;
+ e.startFrame = startFrame;
+ AddEvent(e);
+ }
+ else
+ {
+ Debug.LogError("[ActionTool] 没有对应类型的event" + eventtype.ToString());
+ }
+ }
+
+ public void AddEvent(AnimationEventBase evnt)
+ {
+ if (m_AnimData == null || m_EventList == null)
+ {
+ Debug.LogError("[ActionTool] 没有对应的action数据,是否在" + ActionManager.unitAnimationDataFolder + "创建");
+ return;
+ }
+ m_EventList.Add(evnt);
+ }
+
+ public void SaveActionData()
+ {
+ if (m_AnimData == null)
+ return;
+ EditorUtility.SetDirty(m_AnimData);
+ AssetDatabase.SaveAssets();
+ }
+
+ public void Clear()
+ {
+ m_Animator = null;
+ m_Clip = null;
+ m_AnimData = null;
+ m_CurEventInfo = null;
+ m_TotalFrame = 0;
+ m_CurAnimFrame = 0;
+ m_PrevFrame = 0;
+ m_PrevLocalTime = 0;
+ m_SampleRate = 0;
+ }
+
+ public static void RegisterProjectile(Projectile projectile)
+ {
+ m_Projectiles.Add(projectile);
+ }
+
+ public static void RegisterParticleSystem(FxClear vfx)
+ {
+ m_ParticleSystems.Add(vfx);
+ }
+
+ void UpdateProjectiles(float dt)
+ {
+ List<Projectile> removed = ListPool<Projectile>.Get();
+ // 更新projectile
+ for (int i = 0; i < m_Projectiles.Count; ++i)
+ {
+ if (m_Projectiles[i] == null)
+ continue;
+ m_Projectiles[i].Update(dt);
+ if (m_Projectiles[i] != null)
+ {
+ TransformEx.DoRecursively(m_Projectiles[i].transform, (t) => {
+ ParticleSystem ps = t.GetComponent<ParticleSystem>();
+ if (ps != null)
+ {
+ ps.Simulate(m_Projectiles[i].time);
+ }
+ }, true);
+ }
+ else
+ {
+ removed.Add(m_Projectiles[i]);
+ }
+ }
+ ListPool<Projectile>.Release(removed);
+ }
+
+ void UpdateParticles(float dt)
+ {
+ List<FxClear> removed = ListPool<FxClear>.Get();
+ // 更新粒子系统
+ for (int i = 0; i < m_ParticleSystems.Count; ++i)
+ {
+ if (m_ParticleSystems[i] == null)
+ continue;
+ if (m_ParticleSystems[i] != null)
+ {
+ m_ParticleSystems[i].UpdateFunc(dt);
+ if (m_ParticleSystems[i] != null)
+ {
+ TransformEx.DoRecursively(m_ParticleSystems[i].transform, (t) => {
+ ParticleSystem ps = t.GetComponent<ParticleSystem>();
+ if (ps != null)
+ {
+ ps.Simulate(m_ParticleSystems[i].time);
+ }
+ }, true);
+ }
+ else
+ {
+ removed.Add(m_ParticleSystems[i]);
+ }
+ }
+ }
+ ListPool<FxClear>.Release(removed);
+ }
+
+ }
+
+}
diff --git a/Assets/Tools/ActionTool/Editor/ActionData.cs.meta b/Assets/Tools/ActionTool/Editor/ActionData.cs.meta
new file mode 100644
index 00000000..4e6fe1ca
--- /dev/null
+++ b/Assets/Tools/ActionTool/Editor/ActionData.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: eccac258cc2e3a94cb5b1c569b96c366
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Tools/ActionTool/Editor/ActionEditor.cs b/Assets/Tools/ActionTool/Editor/ActionEditor.cs
new file mode 100644
index 00000000..b06ef89b
--- /dev/null
+++ b/Assets/Tools/ActionTool/Editor/ActionEditor.cs
@@ -0,0 +1,262 @@
+using System.IO;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEditor;
+using UnityEngine;
+using UnityEditor.SceneManagement;
+
+namespace ActionTool
+{
+
+ public class ActionEditor : EditorWindow
+ {
+ [MenuItem("Erika/ActionTool/Open")]
+ static void OpenTools()
+ {
+ ActionManager.AnimationWindow = GetWindow<ActionEditor>();
+ }
+
+ string m_SearchText = "";
+ ActionEditorStyles styles;
+ ActionEditorUI ui;
+ int currentPickerWindow;
+
+ IEnumerator coLoadAnimationAssets;
+ Dictionary<string, Object> animationAssets = new Dictionary<string, Object>();
+
+ public void OnEnable()
+ {
+ titleContent = new GUIContent("Action Editor");
+
+ EditorApplication.update += OnUpdate;
+ ActionManager.onSelectObj += OnSelectObj;
+ }
+
+ void OnUpdate()
+ {
+ if(coLoadAnimationAssets != null)
+ {
+ if (!coLoadAnimationAssets.MoveNext())
+ {
+ coLoadAnimationAssets = null;
+ }
+ }
+ }
+
+ public void OnDisable()
+ {
+ EditorApplication.update -= OnUpdate;
+ ActionManager.onSelectObj -= OnSelectObj;
+ }
+
+ public void OnGUI()
+ {
+ if (styles == null) styles = ActionEditorStyles.Get();
+ if (ui == null) ui = ActionEditorUI.Get();
+ if (ActionManager.CurrentUnit == null)
+ ActionManager.Release();
+
+ GUILayout.Space(5);
+ GUI_SelectUnit();
+ GUILayout.Space(5);
+ GUI_AnimationList();
+ GUILayout.Space(5);
+ }
+
+ private void GUI_SelectUnit()
+ {
+ GUILayout.BeginHorizontal();
+
+ GameObject selectObj = EditorGUILayout.ObjectField(ActionManager.CurrentUnit, typeof(GameObject), false, GUILayout.Width(position.width - 160)) as GameObject;
+
+ if (selectObj != null && selectObj != ActionManager.CurrentUnit)
+ {
+ ActionManager.OnSelectObj(selectObj);
+ if (ActionManager.AnimationWindow != null)
+ {
+ ActionManager.AnimationWindow.Repaint();
+ }
+ }
+
+ if (GUILayout.Button("Select", GUILayout.Width(70)))
+ {
+ currentPickerWindow = EditorGUIUtility.GetControlID(FocusType.Passive) + 100;
+ EditorGUIUtility.ShowObjectPicker<GameObject>(ActionManager.CurrentUnit, false, "l:UnitPrefab", currentPickerWindow);
+ }
+
+ string commandName = Event.current.commandName;
+ if(/*commandName.Equals("ObjectSelectorUpdated") || */commandName.Equals("ObjectSelectorClosed"))
+ {
+ GameObject go = EditorGUIUtility.GetObjectPickerObject() as GameObject;
+ if (/*go != null && */ActionManager.CurrentUnit != go)
+ {
+ ActionManager.OnSelectObj(go);
+ this.Repaint();
+ }
+ }
+
+ if (GUILayout.Button("Reimport", GUILayout.Width(70)))
+ {
+ ActionManager.OnSelectObj(ActionManager.CurrentUnit);
+ }
+
+ GUILayout.EndHorizontal();
+
+ //var scene = EditorSceneManager.GetActiveScene();
+ //if (scene == null || scene.path != ActionManager.scenePath)
+ //{
+ // if(GUILayout.Button("打开ActionToolScene"))
+ // {
+ // EditorSceneManager.OpenScene(ActionManager.scenePath);
+ // }
+ //}
+
+ if (ActionManager.CurrentUnit == null)
+ {
+ EditorGUILayout.HelpBox("选择角色prefab", MessageType.Warning);
+ }
+
+ }
+
+ private Vector2 m_AnimtionListScroll;
+ private void GUI_AnimationList()
+ {
+ if (!ActionManager.HasSelectObj())
+ return;
+
+ EditorGUILayout.LabelField("Animation List");
+
+ m_SearchText = GUILayout.TextField(m_SearchText, "SearchTextField", GUILayout.Width(position.width - 20)).ToLower();
+
+ string animFolder = ActionManager.unitAnimationClipFolder;
+
+ string[] animfiles = Directory.GetFiles(animFolder);
+
+ if (animfiles != null && animfiles.Length > 0)
+ {
+ GUIStyle style = GUI.skin.GetStyle("Button");
+ TextAnchor prevAnchor = style.alignment;
+ TextClipping prevClipping = style.clipping;
+ bool prevRichText = style.richText;
+ style.alignment = TextAnchor.MiddleCenter;
+ style.clipping = TextClipping.Clip;
+ style.richText = false;
+
+ m_AnimtionListScroll = EditorGUILayout.BeginScrollView(m_AnimtionListScroll);
+
+ for (int i = 0; i < animfiles.Length; ++i)
+ {
+ string file = animfiles[i];
+ if (file.Contains(".meta"))
+ continue;
+ string animName = Path.GetFileNameWithoutExtension(file);
+ bool show = m_SearchText == string.Empty || m_SearchText == "" || animName.ToLower().Contains(m_SearchText);
+ if (!show)
+ continue;
+ bool bChecked = ActionManager.CurrentAnimationName == animName;
+ EditorGUILayout.BeginHorizontal();
+
+ bool check = GUILayout.Toggle(bChecked, animName, style, GUILayout.Width(position.width - 60));
+ if (check && ActionManager.CurrentAnimationName != animName)
+ ActionManager.OnSelectAnimation(animName);
+
+ bool isFavorite = false;
+ if (animationAssets != null && animationAssets.ContainsKey(file))
+ {
+ isFavorite = IsFavoritAnimation(animationAssets[file]);
+ }
+ if ((!animationAssets.ContainsKey(file) || animationAssets[file] == null) && coLoadAnimationAssets == null)
+ {
+ coLoadAnimationAssets = CoLoadAnimationAssets();
+ }
+ Color bgColor = GUI.backgroundColor;
+ GUI.backgroundColor = isFavorite ? Color.yellow : Color.gray;
+ if (GUILayout.Button("", styles.starButton, GUILayout.Width(12), GUILayout.Height(13)))
+ {
+ isFavorite = !isFavorite;
+ if(animationAssets.ContainsKey(file))
+ {
+ if(!isFavorite)
+ {
+ AssetDatabase.SetLabels(animationAssets[file], new string[0]);
+ }
+ else
+ {
+ AssetDatabase.SetLabels(animationAssets[file], new string[1] { "GoodAnimation" });
+ }
+ }
+ }
+ GUI.backgroundColor = bgColor;
+
+ if (GUILayout.Button("", styles.selectObj, GUILayout.Width(15), GUILayout.Height(15)))
+ {
+ ui.SelectObject(file);
+ }
+
+ EditorGUILayout.EndHorizontal();
+ }
+
+ EditorGUILayout.EndScrollView();
+
+ style.alignment = prevAnchor;
+ style.clipping = prevClipping;
+ style.richText = prevRichText;
+ }
+ }
+
+ bool IsFavoritAnimation(Object animationFile)
+ {
+ var labels = AssetDatabase.GetLabels(animationFile);
+ for (int j = 0; j < labels.Length; ++j)
+ {
+ if (labels[j] == "GoodAnimation")
+ return true;
+ }
+ return false;
+ }
+
+ IEnumerator CoLoadAnimationAssets()
+ {
+ if (!ActionManager.HasSelectObj())
+ yield break;
+
+ if (animationAssets != null)
+ animationAssets.Clear();
+ else
+ animationAssets = new Dictionary<string, Object>();
+
+ string animFolder = ActionManager.unitAnimationClipFolder;
+
+ string[] animfiles = Directory.GetFiles(animFolder);
+
+ for (int i = 0; i < animfiles.Length; ++i)
+ {
+ string file = animfiles[i];
+ if (file.Contains(".meta"))
+ continue;
+ var animFile = AssetDatabase.LoadMainAssetAtPath(file);
+ if (animationAssets.ContainsKey(file))
+ {
+ animationAssets[file] = animFile;
+ }
+ else
+ {
+ animationAssets.Add(file, animFile);
+ }
+ if (IsFavoritAnimation(animFile))
+ {
+ this.Repaint();
+ }
+ yield return null;
+ }
+ }
+
+ void OnSelectObj(params object[] objs)
+ {
+ animationAssets.Clear();
+ coLoadAnimationAssets = CoLoadAnimationAssets();
+ }
+
+ }
+
+} \ No newline at end of file
diff --git a/Assets/Tools/ActionTool/Editor/ActionEditor.cs.meta b/Assets/Tools/ActionTool/Editor/ActionEditor.cs.meta
new file mode 100644
index 00000000..4c2ff1fe
--- /dev/null
+++ b/Assets/Tools/ActionTool/Editor/ActionEditor.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: ce7158026a0c5f74eb9acc71dea8288c
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Tools/ActionTool/Editor/ActionEditorStyles.cs b/Assets/Tools/ActionTool/Editor/ActionEditorStyles.cs
new file mode 100644
index 00000000..08993560
--- /dev/null
+++ b/Assets/Tools/ActionTool/Editor/ActionEditorStyles.cs
@@ -0,0 +1,171 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEditor;
+
+namespace ActionTool
+{
+ internal class ActionEditorStyles
+ {
+ public GUIStyle textBoldBig;
+ public GUIStyle textBoldSmall;
+ public GUIStyle textBoldSmallMid;
+ public GUIStyle textBold;
+ public GUIStyle selectObj;
+ public GUIStyle textSmall;
+ public GUIStyle textMiddle;
+ public GUIStyle textMiddleBold;
+ public GUIStyle boxToggle;
+ public GUIStyle keyFrameButton;
+
+ public GUIStyle toggleSmallBold;
+
+ public GUIStyle foldout;
+
+ public GUIStyle keyButton;
+
+ public GUIStyle starButton;
+ public GUIStyle starButton2;
+
+ public GUIStyle infoButton;
+
+ public Texture2D selectIcon;
+ public Texture2D keyFrameIcon;
+ public Texture2D addFileIcon;
+ public Texture2D saveFileIcon;
+ public Texture2D deleteIcon;
+ public Texture2D infoIcon;
+ public Texture2D keyIcon;
+ public Texture2D recordIcon;
+ public Texture2D starIcon;
+ public Texture2D starIcon2;
+
+ private static ActionEditorStyles s_instance;
+ public static ActionEditorStyles Get()
+ {
+ bool flag = s_instance == null;
+ if (flag)
+ {
+ s_instance = new ActionEditorStyles();
+ }
+ return s_instance;
+ }
+
+ private ActionEditorStyles()
+ {
+ selectIcon = (Texture2D)Resources.Load<Texture2D>("select_white");
+ selectIcon.filterMode = FilterMode.Point;
+
+ //selectIcon = EditorGUIUtility.FindTexture("ClothInspector.SelectTool");
+
+ keyFrameIcon = EditorGUIUtility.FindTexture("animationkeyframe");
+ addFileIcon = EditorGUIUtility.FindTexture("d_Collab.FileAdded");
+ saveFileIcon = EditorGUIUtility.FindTexture("d_Collab.FileUpdated");
+ deleteIcon = EditorGUIUtility.FindTexture("d_P4_DeletedLocal");
+ infoIcon = EditorGUIUtility.FindTexture("UnityEditor.InspectorWindow");
+ keyIcon = EditorGUIUtility.FindTexture("d_animationkeyframe");
+ starIcon = EditorGUIUtility.FindTexture("Favorite");
+ starIcon2 = EditorGUIUtility.FindTexture("Favorite Icon");
+ recordIcon = EditorGUIUtility.FindTexture("d_Animation.Record");
+
+ InitStyle(out textBoldBig, GUI.skin.label, s => {
+ s.fontStyle = FontStyle.Bold;
+ s.fontSize = 18;
+ s.alignment = TextAnchor.MiddleCenter;
+ });
+
+ InitStyle(out textBold, GUI.skin.label, s => {
+ s.fontStyle = FontStyle.Bold;
+ });
+ InitStyle(out textBoldSmall, GUI.skin.label, s => {
+ s.fontSize = 9;
+ s.fontStyle = FontStyle.Bold;
+ });
+ InitStyle(out textBoldSmallMid, GUI.skin.label, s => {
+ s.fontSize = 9;
+ s.fontStyle = FontStyle.Bold;
+ s.alignment = TextAnchor.MiddleCenter;
+ });
+ InitStyle(out selectObj, GUI.skin.button, s => {
+ s.normal.background = selectIcon;
+ s.active.background = selectIcon;
+ s.focused.background = selectIcon;
+ s.hover.background = selectIcon;
+ });
+ InitStyle(out textSmall, GUI.skin.label, s => {
+ s.fontSize = 8;
+ });
+ InitStyle(out textMiddle, GUI.skin.label, s => {
+ s.fontSize = 10;
+ });
+ InitStyle(out textMiddleBold, GUI.skin.label, s => {
+ s.fontSize = 10;
+ s.fontStyle = FontStyle.Bold;
+ });
+ InitStyle(out boxToggle, EditorStyles.miniButtonLeft, s => {
+ s.fontSize = 8;
+ s.normal.textColor = Color.white;
+ s.onNormal.textColor = Color.white;
+ s.active.textColor = Color.white;
+ s.onActive.textColor = Color.white;
+ });
+ InitStyle(out keyFrameButton, GUI.skin.button, s => {
+ s.fontSize = 9;
+ s.clipping = TextClipping.Overflow;
+ s.alignment = TextAnchor.MiddleCenter;
+ s.fontStyle = FontStyle.Bold;
+ s.normal.textColor = Color.yellow;
+ s.active.textColor = Color.yellow;
+ s.focused.textColor = Color.yellow;
+ s.hover.textColor = Color.yellow;
+ });
+ InitStyle(out keyButton, GUI.skin.button, s =>
+ {
+ s.normal.background = keyIcon;
+ s.active.background = keyIcon;
+ s.hover.background = keyIcon;
+ s.focused.background = keyIcon;
+ });
+ InitStyle(out starButton, GUI.skin.button, s =>
+ {
+ s.normal.background = starIcon;
+ s.active.background = starIcon;
+ s.hover.background = starIcon;
+ s.focused.background = starIcon;
+ });
+ InitStyle(out starButton2, GUI.skin.button, s =>
+ {
+ s.normal.background = starIcon2;
+ s.active.background = starIcon2;
+ s.hover.background = starIcon2;
+ s.focused.background = starIcon2;
+ });
+ InitStyle(out infoButton, GUI.skin.button, s =>
+ {
+ s.normal.background = infoIcon;
+ s.active.background = infoIcon;
+ s.hover.background = infoIcon;
+ s.focused.background = infoIcon;
+ });
+ InitStyle(out toggleSmallBold, GUI.skin.toggle, s => {
+ s.fontSize = 10;
+ //s.fontStyle = FontStyle.Bold;
+ });
+ InitStyle(out foldout, EditorStyles.foldout, s => {
+ });
+ }
+
+ private delegate void Initter(GUIStyle style);
+ private static void InitStyle(out GUIStyle normal, GUIStyle other, Initter initter)
+ {
+ normal = new GUIStyle(other);
+ initter(normal);
+ }
+ private static void InitStyle(out GUIStyle normal, Initter initter)
+ {
+ normal = new GUIStyle();
+ initter(normal);
+ }
+
+ }
+} \ No newline at end of file
diff --git a/Assets/Tools/ActionTool/Editor/ActionEditorStyles.cs.meta b/Assets/Tools/ActionTool/Editor/ActionEditorStyles.cs.meta
new file mode 100644
index 00000000..8adef727
--- /dev/null
+++ b/Assets/Tools/ActionTool/Editor/ActionEditorStyles.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 13b6cd36eabea4b42aadd96b3a816fe3
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Tools/ActionTool/Editor/ActionEditorUI.cs b/Assets/Tools/ActionTool/Editor/ActionEditorUI.cs
new file mode 100644
index 00000000..a1e2ba36
--- /dev/null
+++ b/Assets/Tools/ActionTool/Editor/ActionEditorUI.cs
@@ -0,0 +1,99 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEditor;
+
+namespace ActionTool
+{
+ internal class ActionEditorUI
+ {
+ static ActionEditorUI s_instance;
+
+ static Material m_material;
+
+ public Material defaultUIMaterail { get { return m_material; } }
+
+ public static ActionEditorUI Get()
+ {
+ bool flag = s_instance == null;
+ if (flag)
+ {
+ s_instance = new ActionEditorUI();
+ }
+ return s_instance;
+ }
+
+ private ActionEditorUI()
+ {
+ m_material = new Material(Shader.Find("Hidden/Internal-Colored"));
+ m_material.hideFlags = HideFlags.HideAndDontSave;
+ }
+
+ public void DrawVerticalLineFast(float x, float minY, float maxY, Color color)
+ {
+ // GL画线在GenericMenu弹出来时会有问题
+ //bool bWin = Application.platform == RuntimePlatform.WindowsEditor;
+ //if (bWin)
+ //{
+ // GL.Color(color);
+ // GL.Vertex(new Vector3(x - 0.5f, minY, 0f));
+ // GL.Vertex(new Vector3(x + 0.5f, minY, 0f));
+ // GL.Vertex(new Vector3(x + 0.5f, maxY, 0f));
+ // GL.Vertex(new Vector3(x - 0.5f, maxY, 0f));
+ //}
+ //else
+ //{
+ // GL.Color(color);
+ // GL.Vertex(new Vector3(x, minY, 0f));
+ // GL.Vertex(new Vector3(x, maxY, 0f));
+ //}
+ Rect rect = new Rect(x-0.5f, minY, 1, maxY - minY);
+ EditorGUI.DrawRect(rect, color);
+ }
+
+ public void DrawHorizontalLineFast(float y, float minX, float maxX, Color color)
+ {
+ //bool bWin = Application.platform == RuntimePlatform.WindowsEditor;
+ //if (bWin)
+ //{
+ // GL.Color(color);
+ // GL.Vertex(new Vector3(minX, y - 0.5f, 0f));
+ // GL.Vertex(new Vector3(minX, y + 0.5f, 0f));
+ // GL.Vertex(new Vector3(maxX, y + 0.5f, 0f));
+ // GL.Vertex(new Vector3(maxX, y - 0.5f, 0f));
+ //}
+ //else
+ //{
+ // GL.Color(color);
+ // GL.Vertex(new Vector3(minX, y, 0f));
+ // GL.Vertex(new Vector3(maxX, y, 0f));
+ //}
+ Rect rect = new Rect(minX, y - 0.5f, maxX - minX, 1);
+ EditorGUI.DrawRect(rect, color);
+ }
+
+ public void DrawRectFrame(Rect rect, Color col)
+ {
+ DrawHorizontalLineFast(rect.y, rect.x, rect.x + rect.width, col);
+ DrawHorizontalLineFast(rect.y + rect.height, rect.x, rect.x + rect.width, col);
+ DrawVerticalLineFast(rect.x, rect.y, rect.y + rect.height, col);
+ DrawVerticalLineFast(rect.x + rect.width, rect.y, rect.y + rect.height, col);
+ }
+
+ public void SelectObject(Object obj)
+ {
+ Selection.activeObject = obj;
+ EditorGUIUtility.PingObject(obj);
+ }
+
+ public void SelectObject(string path)
+ {
+ Object obj = AssetDatabase.LoadAssetAtPath(path, typeof(Object)) as Object;
+ if(obj)
+ {
+ SelectObject(obj);
+ }
+ }
+
+ }
+} \ No newline at end of file
diff --git a/Assets/Tools/ActionTool/Editor/ActionEditorUI.cs.meta b/Assets/Tools/ActionTool/Editor/ActionEditorUI.cs.meta
new file mode 100644
index 00000000..6d66f438
--- /dev/null
+++ b/Assets/Tools/ActionTool/Editor/ActionEditorUI.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: c0e7eed5cfcabd24f980de3b9fc699ac
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Tools/ActionTool/Editor/ActionEventEditor.cs b/Assets/Tools/ActionTool/Editor/ActionEventEditor.cs
new file mode 100644
index 00000000..b0eb86cf
--- /dev/null
+++ b/Assets/Tools/ActionTool/Editor/ActionEventEditor.cs
@@ -0,0 +1,368 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Reflection;
+using UnityEngine;
+using UnityEditor;
+
+namespace ActionTool
+{
+
+ // 编辑事件
+ public class ActionEventEditor : EditorWindow
+ {
+ EditorWindow sceneView;
+ ActionEditorStyles styles;
+ AnimationEventBase animEvent;
+
+ private void OnEnable()
+ {
+ titleContent = new GUIContent("Event Editor");
+ }
+
+ private void OnDisable()
+ {
+ ActionManager.OnSelectAnimationEvent(null);
+ }
+
+ private void Update()
+ {
+ }
+
+ Vector2 scroll;
+ private void OnGUI()
+ {
+ animEvent = ActionManager.animationEvent;
+ if (animEvent == null)
+ {
+ this.Close();
+ return;
+ }
+
+ if (styles == null) styles = ActionEditorStyles.Get();
+
+ string eventName = animEvent.name;
+ int frame = animEvent.startFrame;
+
+ Type type = animEvent.GetType();
+
+ GUILayout.Space(2);
+
+ EditorGUILayout.LabelField(eventName, styles.textBoldBig, GUILayout.Height(25));
+
+ GUILayout.Space(2);
+
+ EditorGUILayout.BeginHorizontal();
+ if (GUILayout.Button("Save"))
+ {
+
+ }
+ if (GUILayout.Button("Revert"))
+ {
+
+ }
+ Color prevColor = GUI.backgroundColor;
+ GUI.backgroundColor = Color.red;
+ if (GUILayout.Button("Delete"))
+ {
+ ActionManager.DeleteEvent(animEvent);
+ ActionManager.OnSelectAnimationEvent(null);
+ }
+ GUI.backgroundColor = prevColor;
+ EditorGUILayout.EndHorizontal();
+
+ GUILayout.Space(5);
+
+ EditorGUILayout.BeginHorizontal();
+ if (GUILayout.Button("Copy"))
+ {
+ ActionManager.CopyAnimationEvent(animEvent);
+ }
+ EditorGUILayout.EndHorizontal();
+
+ GUILayout.Space(5);
+
+ EditorGUILayout.LabelField("startFrame (int)", styles.textBold);
+ GUI.enabled = false;
+ EditorGUILayout.TextField(frame.ToString());
+ GUI.enabled = true;
+
+ GUILayout.Space(5);
+
+ scroll = EditorGUILayout.BeginScrollView(scroll);
+
+ GUILayout.Space(5);
+
+ FieldInfo[] fields = type.GetFields(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly);
+ if(fields != null && fields.Length > 0)
+ {
+ for(int i = 0; i < fields.Length; ++i)
+ {
+ FieldInfo field = fields[i];
+ string name = field.Name + " (" + field.FieldType.Name + ")";
+ string tooltip = "";
+ bool skip = false;
+ bool isHDR = false;
+ foreach (var attr in field.GetCustomAttributes())
+ {
+ if(attr.GetType() == typeof(TooltipAttribute))
+ {
+ TooltipAttribute tooltipattr = attr as TooltipAttribute;
+ if(tooltip != null)
+ {
+ tooltip = tooltipattr.tooltip;
+ }
+ }
+ else if (attr.GetType() == typeof(DisallowModifiyInGUI))
+ {
+ GUI.enabled = false;
+ }
+ else if (attr.GetType() == typeof(WhenAttribute))
+ {
+ WhenAttribute when = attr as WhenAttribute;
+ string conditionName = when.conditionName;
+ FieldInfo condition = type.GetField(conditionName);
+ if (!when.IsSatisfied((int)condition.GetValue(animEvent)))
+ {
+ skip = true;
+ break;
+ }
+ }
+ else if (attr.GetType() == typeof(AndWhenAttribute))
+ {
+ AndWhenAttribute when = attr as AndWhenAttribute;
+ string conditionName = when.conditionName;
+ FieldInfo condition = type.GetField(conditionName);
+ if (!when.IsSatisfied((int)condition.GetValue(animEvent)))
+ {
+ skip = true;
+ break;
+ }
+ }
+ else if (attr.GetType() == typeof(WhenNotAttribute))
+ {
+ WhenNotAttribute when = attr as WhenNotAttribute;
+ string conditionName = when.conditionName;
+ FieldInfo condition = type.GetField(conditionName);
+ if ((int)condition.GetValue(animEvent) == when.value)
+ {
+ skip = true;
+ break;
+ }
+ }
+ else if (attr.GetType() == typeof(IfAttribute))
+ {
+ IfAttribute when = attr as IfAttribute;
+ string conditionName = when.conditionName;
+ FieldInfo condition = type.GetField(conditionName);
+ if (!(bool)condition.GetValue(animEvent))
+ {
+ skip = true;
+ break;
+ }
+ }
+ else if (attr.GetType() == typeof(IfNotAttribute))
+ {
+ IfNotAttribute when = attr as IfNotAttribute;
+ string conditionName = when.conditionName;
+ FieldInfo condition = type.GetField(conditionName);
+ if ((bool)condition.GetValue(animEvent))
+ {
+ skip = true;
+ break;
+ }
+ }
+ else if (attr.GetType() == typeof(SpaceAttribute))
+ {
+ SpaceAttribute space = attr as SpaceAttribute;
+ GUILayout.Space(space.height);
+ }
+ else if (attr.GetType() == typeof(CommentAttribute))
+ {
+ CommentAttribute comment = attr as CommentAttribute;
+ GUIStyle style = GUI.skin.GetStyle("Label");
+ TextAnchor preanchor = style.alignment;
+ style.alignment = comment.alignment;
+ GUI_Label(new GUIContent(comment.comment), style);
+ style.alignment = preanchor;
+ }
+ else if (attr.GetType() == typeof(WhenAttribute))
+ {
+ WhenAttribute when = attr as WhenAttribute;
+ string conditionName = when.conditionName;
+ FieldInfo condition = type.GetField(conditionName);
+ if ((float)condition.GetValue(animEvent) != when.value)
+ {
+ skip = true;
+ break;
+ }
+ }
+ else if (attr.GetType() == typeof(WhenNotAttribute))
+ {
+ WhenNotAttribute when = attr as WhenNotAttribute;
+ string conditionName = when.conditionName;
+ FieldInfo condition = type.GetField(conditionName);
+ if ((float)condition.GetValue(animEvent) == when.value)
+ {
+ skip = true;
+ break;
+ }
+ }
+ else if (attr.GetType() == typeof(IfAttribute))
+ {
+ IfAttribute when = attr as IfAttribute;
+ string conditionName = when.conditionName;
+ FieldInfo condition = type.GetField(conditionName);
+ if (!(bool)condition.GetValue(animEvent))
+ {
+ skip = true;
+ break;
+ }
+ }
+ else if (attr.GetType() == typeof(IfNotAttribute))
+ {
+ IfNotAttribute when = attr as IfNotAttribute;
+ string conditionName = when.conditionName;
+ FieldInfo condition = type.GetField(conditionName);
+ if ((bool)condition.GetValue(animEvent))
+ {
+ skip = true;
+ break;
+ }
+ }
+ else if(attr.GetType() == typeof(HDRAttribute))
+ {
+ isHDR = true;
+ }
+ }
+ if (skip)
+ {
+ GUI.enabled = true;
+ continue;
+ }
+ EditorGUILayout.LabelField(new GUIContent(name, tooltip), styles.textBold);
+ if (field.FieldType == typeof(Vector3))
+ {
+ field.SetValue(animEvent, GUI_Vector3((Vector3)field.GetValue(animEvent)));
+ }
+ else if (field.FieldType == typeof(Vector2))
+ {
+ field.SetValue(animEvent, GUI_Vector2((Vector2)field.GetValue(animEvent)));
+ }
+ else if (field.FieldType == typeof(string))
+ {
+ field.SetValue(animEvent, GUI_String((string)field.GetValue(animEvent)));
+ }
+ else if (field.FieldType == typeof(bool))
+ {
+ field.SetValue(animEvent, GUI_Bool((bool)field.GetValue(animEvent)));
+ }
+ else if(field.FieldType == typeof(AnimationCurve))
+ {
+ field.SetValue(animEvent, GUI_Curve(field.GetValue(animEvent) as AnimationCurve));
+ }
+ else if(field.FieldType.IsEnum)
+ {
+ field.SetValue(animEvent, GUI_Enum((Enum)field.GetValue(animEvent)));
+ }
+ else if(field.FieldType == typeof(float))
+ {
+ field.SetValue(animEvent, GUI_Float((float)field.GetValue(animEvent)));
+ }
+ else if (field.FieldType == typeof(int))
+ {
+ field.SetValue(animEvent, GUI_Int((int)field.GetValue(animEvent)));
+ }
+ else if(field.FieldType == typeof(Color))
+ {
+ if(isHDR)
+ {
+ field.SetValue(animEvent, GUI_ColorHDR((Color)field.GetValue(animEvent)));
+ }
+ else
+ {
+ field.SetValue(animEvent, GUI_Color((Color)field.GetValue(animEvent)));
+ }
+ }
+ else
+ {
+ Color c = GUI.color;
+ GUI.color = Color.red;
+ GUI_Label(new GUIContent("Unknown Type " + field.FieldType), GUI.skin.GetStyle("Label"));
+ GUI.color = c;
+ }
+ GUILayout.Space(5);
+ }
+ }
+
+ EditorGUILayout.EndScrollView();
+ }
+
+ void GUI_Label(GUIContent label, GUIStyle style)
+ {
+ Rect rect = EditorGUILayout.GetControlRect();
+ EditorGUI.LabelField(rect, label, style);
+ }
+
+ float GUI_Float(float value)
+ {
+ Rect rect = EditorGUILayout.GetControlRect();
+ return EditorGUI.FloatField(rect, "", value);
+ }
+
+ int GUI_Int(int value)
+ {
+ Rect rect = EditorGUILayout.GetControlRect();
+ return EditorGUI.IntField(rect, "", value);
+ }
+
+ AnimationCurve GUI_Curve(AnimationCurve curve)
+ {
+ Rect rect = EditorGUILayout.GetControlRect();
+ return EditorGUI.CurveField(rect, "", curve);
+ }
+
+ Enum GUI_Enum(Enum enumValue)
+ {
+ Rect rect = EditorGUILayout.GetControlRect();
+ return EditorGUI.EnumPopup(rect, "", enumValue);
+ }
+
+ Vector3 GUI_Vector3(Vector3 value)
+ {
+ Rect rect = EditorGUILayout.GetControlRect();
+ return EditorGUI.Vector3Field(rect, "", value);
+ }
+
+ Vector2 GUI_Vector2(Vector2 value)
+ {
+ Rect rect = EditorGUILayout.GetControlRect();
+ return EditorGUI.Vector2Field(rect, "", value);
+ }
+
+ string GUI_String(string value)
+ {
+ Rect rect = EditorGUILayout.GetControlRect();
+ return EditorGUI.TextField(rect, "", value);
+ }
+
+ bool GUI_Bool(bool value)
+ {
+ Rect rect = EditorGUILayout.GetControlRect();
+ return GUI.Toggle(rect, value, "Check");
+ }
+
+ Color GUI_Color(Color col)
+ {
+ Rect rect = EditorGUILayout.GetControlRect();
+ return EditorGUI.ColorField(rect, col);
+ }
+
+ Color GUI_ColorHDR(Color col)
+ {
+ Rect rect = EditorGUILayout.GetControlRect();
+ return EditorGUI.ColorField(rect, new GUIContent(""), col, true, true, true);
+ }
+
+ }
+} \ No newline at end of file
diff --git a/Assets/Tools/ActionTool/Editor/ActionEventEditor.cs.meta b/Assets/Tools/ActionTool/Editor/ActionEventEditor.cs.meta
new file mode 100644
index 00000000..6a130af1
--- /dev/null
+++ b/Assets/Tools/ActionTool/Editor/ActionEventEditor.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 7e3fa648b1f19c141ad717db41c10772
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Tools/ActionTool/Editor/ActionInfoEditor.cs b/Assets/Tools/ActionTool/Editor/ActionInfoEditor.cs
new file mode 100644
index 00000000..0d4a0f4f
--- /dev/null
+++ b/Assets/Tools/ActionTool/Editor/ActionInfoEditor.cs
@@ -0,0 +1,47 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEditor;
+
+namespace ActionTool
+{
+
+ // 编辑collider帧
+ public class ActionInfoEditor : EditorWindow
+ {
+ private static string title;
+ private static string content;
+ private static Vector2 size;
+
+ public static void ShowContent(string tlt, string cnt)
+ {
+ title = tlt;
+ content = cnt;
+ size = GUI.skin.label.CalcSize(new GUIContent(content));
+ var editor = EditorWindow.GetWindow<ActionInfoEditor>(true);
+ editor.titleContent = new GUIContent(title);
+ editor.OnEnable();
+ }
+
+ private void OnEnable()
+ {
+ titleContent = new GUIContent(title);
+ maxSize = new Vector2(50 + size.x, 10 + size.y);
+ minSize = maxSize;
+ }
+
+ private void OnDisable()
+ {
+ }
+
+ private void Update()
+ {
+ }
+
+ private void OnGUI()
+ {
+ Vector2 size= GUI.skin.label.CalcSize(new GUIContent(content));
+ GUI.Label(new Rect(5,5, size.x, size.y), content);
+ }
+ }
+} \ No newline at end of file
diff --git a/Assets/Tools/ActionTool/Editor/ActionInfoEditor.cs.meta b/Assets/Tools/ActionTool/Editor/ActionInfoEditor.cs.meta
new file mode 100644
index 00000000..49da3876
--- /dev/null
+++ b/Assets/Tools/ActionTool/Editor/ActionInfoEditor.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 8121c73011a3e1c4ea6beaf52d54e673
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Tools/ActionTool/Editor/ActionManager.cs b/Assets/Tools/ActionTool/Editor/ActionManager.cs
new file mode 100644
index 00000000..d9279745
--- /dev/null
+++ b/Assets/Tools/ActionTool/Editor/ActionManager.cs
@@ -0,0 +1,548 @@
+using System;
+using System.IO;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEditor;
+using UnityEngine;
+
+namespace ActionTool
+{
+ // ActionTool callback delegates
+ public delegate void CallbackHandler(params object[] objs);
+
+ public static class ActionManager
+ {
+ public enum UnitType
+ {
+ PC,
+ NPC,
+ }
+
+ public static string s_Controller = "Assets/ActionTool/controller_temp.controller";
+ static string s_SettingPath = "Assets/ActionTool/ActionTool Settings.asset";
+ public static string scenePath { get { return "Assets/ActionTool/ActionToolScene.unity"; } }
+
+ //public static string s_AnimFolder = "Assets/Art/Animations/";
+ //public static string s_AnimationDataFolder = "Assets/Data/AnimationData/";
+ //static string s_RootMotionDataFolder = "Assets/Data/RootMotionData/";
+
+ public static ActionEditor AnimationWindow;
+ public static ActionPreviewEditor PreviewWindow;
+ public static ActionEventEditor EventEditWindow;
+ public static ActionColliderFrameEditor ColliderFrameWindow;
+ public static ActionColliderEditor ColliderWindow;
+ public static ActionRootMotionEditor RootMotionEditor;
+
+ public static ActionToolSettings Settings;
+
+ //规定timeline上事件的采样频率是30帧
+ public const int FPS = 30;
+
+ public static float Speed = 1;
+
+ public static GameObject CurrentUnit
+ {
+ get
+ {
+ return s_CurrentUnit;
+ }
+ }
+
+ public static string CurrentAnimationName
+ {
+ get
+ {
+ return s_CurrentAnimationName;
+ }
+ }
+
+ private static GameObject s_CurrentUnit;
+ private static string s_CurrentAnimationName;
+ public static GameObject unitInstance { get { return s_UnitInstance; } }
+ public static GameObject unitRoot { get; private set; }
+ private static GameObject s_UnitInstance;
+ private static Animator s_Animator;
+ private static AnimatorOverrideController s_OverrideContorller;
+
+ private static ActionData s_CurActionData;
+ public static ActionData actionData { get { return s_CurActionData; } }
+
+ public static Vector3 s_InitPosition = Vector3.zero;
+ public static Quaternion s_InitRotation = Quaternion.identity;
+
+ private static RootMotionData s_RootMotion;
+
+ private static AnimationData m_SharedAnimationData; // 资源
+ public static AnimationData sharedAnimationData { get { return m_SharedAnimationData; } }
+ private static AnimationData m_AnimationData;
+ public static AnimationData animationData
+ {
+ get
+ {
+ return m_AnimationData;
+ }
+ set
+ {
+ m_AnimationData = value;
+ if (gizmos)
+ {
+ gizmos.SetAnimationData(value);
+ }
+ }
+ }
+ public static AnimationClip curClip;
+
+ public static string AnimationDataPath
+ {
+ get
+ {
+ return AssetDatabase.GetAssetPath(sharedAnimationData);
+ }
+ }
+
+ private static AnimationEventBase m_CurAnimationEvent;
+ public static AnimationEventBase animationEvent { get { return m_CurAnimationEvent; } }
+
+ private static ColliderData s_CurColliderData;
+ public static ColliderData colliderData { get { return s_CurColliderData; } set { s_CurColliderData = value; } }
+
+ public static ColliderData.ColliderFrame s_CurEditColliderFrame;
+ public static ColliderData.ColliderFrame editColliderFrame { get { return s_CurEditColliderFrame; } }
+ public static ColliderData s_CurEditFrameCollider;
+
+ private static ActionToolGizmos s_Gizmos;
+ public static ActionToolGizmos gizmos { get { return s_Gizmos; } }
+
+ // 是否在自动播放
+ private static bool s_IsPlay;
+ public static bool IsPlay { get { return s_IsPlay; } }
+
+ private static GameObject s_RootActionTool;
+ private const string kRootActionTool = "RootActionTool";
+ private const string kUnitRoot = "UnitRoot";
+
+ private static AnimationEventBase copiedAnimationEvent;
+
+ public static int MaxEventsPerFrame // 所有帧里面事件最多有几个
+ {
+ get
+ {
+ if (animationData == null)
+ return 0;
+ return animationData.GetMaxAnimationEventsCount();
+ }
+ }
+
+ public static int GridRowCount
+ {
+ get
+ {
+ bool hasRM = animationData != null && animationData.overrideRootMotion == true;
+ return (MaxEventsPerFrame + 1) + (animationData != null ? animationData.GetBoxesCount() : 0) + (hasRM ? 1 : 0);
+ }
+ }
+
+ public static string unitFolder;
+ public static string unitAnimationDataFolder { get { return unitFolder + "AnimationData/"; } }
+ public static string unitRootMotionFolder { get { return unitFolder + "RootMotion/"; } }
+ public static string unitAnimationClipFolder { get { return unitFolder + "AnimationClip/"; } }
+ public static string unitDataFolder { get { return unitFolder + "UnitData/"; } }
+
+ public static int colliderIndex;
+
+ public static CallbackHandler onSelectObj;
+
+ public static void OnSelectObj(GameObject obj)
+ {
+ Release();
+ s_CurrentUnit = obj;
+ if(s_CurrentUnit != null)
+ {
+ string path = AssetDatabase.GetAssetPath(obj);
+ string folder = Path.GetDirectoryName(path).Replace('\\', '/');
+ folder = folder.Substring(0, folder.LastIndexOf('/'));
+ unitFolder = folder + "/";
+ s_UnitInstance = GameObject.Instantiate(obj);
+ InitializeUnitInstance(s_UnitInstance);
+ }
+ onSelectObj?.Invoke(obj);
+ }
+
+ public static void OnSelectAnimation(string animation)
+ {
+ s_CurrentAnimationName = animation;
+ if (PreviewWindow == null)
+ PreviewWindow = EditorWindow.GetWindow<ActionPreviewEditor>();
+ PreviewWindow.Repaint();
+
+ string animpath = unitAnimationClipFolder + animation + ".anim";
+ AnimationClip clip = AssetDatabase.LoadAssetAtPath(animpath, typeof(AnimationClip)) as AnimationClip;
+ curClip = clip;
+ if (clip)
+ {
+ s_OverrideContorller["EmptyAction"] = clip;
+ }
+
+ string rootmotionData = unitRootMotionFolder + animation + ".asset";
+ s_RootMotion = AssetDatabase.LoadAssetAtPath<RootMotionData>(rootmotionData);
+ if (s_RootMotion == null)
+ {
+ Debug.LogError("[ActionTool] 没有对应的rootmotion, " + rootmotionData);
+ }
+
+ if (s_CurActionData == null)
+ s_CurActionData = new ActionData();
+ s_CurActionData.Initialize(s_Animator, clip, s_RootMotion);
+
+ string animationDataPath = unitAnimationDataFolder + animation + ".asset";
+ AnimationData asset = AssetDatabase.LoadAssetAtPath<AnimationData>(animationDataPath);
+ m_SharedAnimationData = asset;
+ if(asset != null)
+ animationData = UnityEngine.Object.Instantiate<AnimationData>(asset);
+ else
+ animationData = null;
+
+ OnSelectAnimationEvent(null);
+ OnSelectColliderFrame(null, null);
+ OnSelectBox(null);
+ if (EventEditWindow) EventEditWindow.Close();
+ if (ColliderFrameWindow) ColliderFrameWindow.Close();
+
+ }
+
+ public static bool HasSelectObj()
+ {
+ return s_CurrentUnit != null;
+ }
+
+ public static void Release()
+ {
+ if(s_UnitInstance != null)
+ GameObject.DestroyImmediate(s_UnitInstance);
+ s_UnitInstance = null;
+ s_CurrentUnit = null;
+ s_CurrentAnimationName = null;
+ s_Animator = null;
+ s_RootActionTool = GameObject.Find(kRootActionTool);
+ if (s_RootActionTool)
+ GameObject.DestroyImmediate(s_RootActionTool);
+ s_CurActionData = null;
+ s_CurEditColliderFrame = null;
+ s_CurColliderData = null;
+ s_CurrentAnimationName = null;
+ }
+
+ private static void InitializeUnitInstance(GameObject unit)
+ {
+ if (unit == null)
+ return;
+
+ unit.transform.position = Vector3.zero;
+ unit.transform.rotation = Quaternion.Euler(0, 90, 0);
+
+ var tempUnitRoot = GameObject.Find(kUnitRoot);
+ if (tempUnitRoot)
+ GameObject.DestroyImmediate(tempUnitRoot);
+ unitRoot = new GameObject(kUnitRoot);
+ unitRoot.transform.localScale = Vector3.one;
+ unitRoot.transform.rotation = s_InitRotation;
+ unitRoot.transform.position = s_InitPosition;
+ unit.transform.SetParent(unitRoot.transform);
+
+ s_RootActionTool = GameObject.Find(kRootActionTool);
+ if(s_RootActionTool == null)
+ s_RootActionTool = new GameObject(kRootActionTool);
+
+ unitRoot.transform.SetParent(s_RootActionTool.transform);
+
+ s_Animator = unit.GetComponentInChildren<Animator>();
+ if(s_Animator == null)
+ {
+ Debug.LogError("[ActionTool] 角色prefab下没有animator");
+ return;
+ }
+
+ RuntimeAnimatorController controller = AssetDatabase.LoadAssetAtPath(s_Controller, typeof(RuntimeAnimatorController)) as RuntimeAnimatorController;
+ if(controller == null)
+ {
+ Debug.LogError("[ActionTool] 文件丢失" + s_Controller);
+ return;
+ }
+
+ s_OverrideContorller = new AnimatorOverrideController(controller);
+ s_OverrideContorller.name = "override controller";
+ s_Animator.runtimeAnimatorController = s_OverrideContorller;
+
+ s_Animator.applyRootMotion = false;
+
+ s_Gizmos = s_RootActionTool.AddComponent<ActionToolGizmos>();
+ s_Gizmos.Initialize(unitRoot);
+
+ Settings = AssetDatabase.LoadAssetAtPath<ActionToolSettings>(s_SettingPath);
+ }
+
+ public static void UpdateFrame()
+ {
+ if (s_CurActionData != null)
+ s_CurActionData.UpdateFrame();
+ }
+
+ public static void Pause()
+ {
+ s_IsPlay = !s_IsPlay;
+ if(s_IsPlay && s_CurActionData != null)
+ {
+ s_CurActionData.StartFrame();
+ }
+ }
+
+ public static void Start()
+ {
+ if (s_CurActionData != null)
+ s_CurActionData.curAnimTimeNormal = 0;
+ }
+
+ public static void Stop()
+ {
+ if (s_CurActionData != null)
+ {
+ if (s_IsPlay)
+ Pause();
+ s_CurActionData.curAnimTimeNormal = 0;
+ }
+ }
+
+ public static void Previous()
+ {
+ if (s_IsPlay)
+ Pause();
+ float cur = s_CurActionData.curAnimFrame;
+ float pre = Mathf.Ceil(cur - 1);
+ pre = (int)Mathf.Clamp(pre, 0, s_CurActionData.totalFrame);
+ s_CurActionData.SetCurrentAnimTime(pre);
+ }
+
+ public static void Next()
+ {
+ if (s_IsPlay)
+ Pause();
+ float cur = s_CurActionData.curAnimFrame;
+ float next = Mathf.Floor(cur + 1);
+ next = (int)Mathf.Clamp(next, 0, s_CurActionData.totalFrame);
+ s_CurActionData.SetCurrentAnimTime(next);
+ }
+
+ public static void End()
+ {
+ if (s_CurActionData != null)
+ s_CurActionData.curAnimTimeNormal = 1;
+ }
+
+ public static void CreateAnimationData()
+ {
+ string animation = s_CurrentAnimationName;
+ string animationDataPath = unitAnimationDataFolder + animation + ".asset";
+ string animpath = unitAnimationClipFolder + animation + ".anim";
+ AnimationData animData = new AnimationData();
+ animData.animationName = s_CurrentAnimationName;
+ animData.animationPath = animpath;
+ AssetDatabase.CreateAsset(animData, animationDataPath);
+ AssetDatabase.Refresh();
+ m_SharedAnimationData = animData;
+ animationData = UnityEngine.Object.Instantiate<AnimationData>(animData);
+ }
+
+ public static void SaveAnimationData()
+ {
+ if (animationData == null)
+ {
+ Debug.LogError("[ActionTool] 没有animation data数据");
+ return;
+ }
+ string animation = s_CurrentAnimationName;
+ string animationDataPath = unitAnimationClipFolder + animation + ".asset";
+ EditorUtility.CopySerialized(animationData, m_SharedAnimationData);
+ m_SharedAnimationData.OnSaveToDisk();
+ EditorUtility.SetDirty(m_SharedAnimationData);
+ AssetDatabase.SaveAssets();
+ AssetDatabase.Refresh();
+ }
+
+ public static void NewHurtBox()
+ {
+ if (animationData == null)
+ {
+ Debug.LogError("[ActionTool] 没有animation data数据");
+ return;
+ }
+ ColliderData box = new ColliderData(ColliderBox.EColliderType.HurtBox, ColliderBox.Pivot.MiddleBottom);
+ animationData.AddBox(ref animationData.hurtBoxes, box);
+ }
+
+ public static void NewHitBox()
+ {
+ if (animationData == null)
+ {
+ Debug.LogError("[ActionTool] 没有animation data数据");
+ return;
+ }
+ ColliderData box = new ColliderData(ColliderBox.EColliderType.HitBox, ColliderBox.Pivot.MiddleCenter);
+ animationData.AddBox(ref animationData.hitBoxes, box);
+ }
+
+ public static void DeleteCurBox()
+ {
+ if(animationData != null && s_CurColliderData != null)
+ {
+ animationData.DeleteBox(s_CurColliderData);
+ s_CurColliderData = null;
+ }
+ }
+
+ public static void EditCollider()
+ {
+ if (s_CurColliderData == null)
+ return;
+ if(ColliderWindow == null)
+ ColliderWindow = EditorWindow.GetWindow<ActionColliderEditor>(true);
+ }
+
+ public static void OnSelectBox(ColliderData collider, int index = 0)
+ {
+ s_CurColliderData = collider;
+ if (ColliderWindow != null)
+ ColliderWindow.Repaint();
+ colliderIndex = index;
+ EditCollider();
+ }
+
+ public static void AddNewBoxFrame(object param)
+ {
+ BoxParam frame = (BoxParam)param;
+ int frameIndex = frame.frame;
+ var data = frame.collider;
+ if(data != null)
+ {
+ var frameData = data.AddFrame(frameIndex);
+ OnSelectColliderFrame(frameData, data);
+ }
+ }
+
+ public static void DeleteBoxFrame(object param)
+ {
+ BoxParam frame = (BoxParam)param;
+ int frameIndex = frame.frame;
+ var data = frame.collider;
+ if (data != null)
+ {
+ data.DeleteFrame(frameIndex);
+ }
+ }
+
+ public static void DeleteCurFrame()
+ {
+ if (s_CurEditFrameCollider == null)
+ return;
+ if (s_CurEditColliderFrame == null)
+ return;
+ s_CurEditFrameCollider.DeleteFrame(s_CurEditColliderFrame.frame);
+
+ s_CurEditColliderFrame = null;
+ }
+
+ public static void OnSelectColliderFrame(ColliderData.ColliderFrame frame, ColliderData collider = null)
+ {
+ s_CurEditColliderFrame = frame;
+ s_CurEditFrameCollider = collider;
+
+ if (frame != null)
+ {
+ ColliderFrameWindow = EditorWindow.GetWindow<ActionColliderFrameEditor>(true);
+
+ ActionData action = ActionManager.actionData;
+ float normaltime = frame.frame / action.totalFrame;
+ action.curAnimTimeNormal = normaltime;
+ }
+ }
+
+ public static void AddNewEvent(object param)
+ {
+ EventParam eventParam = (EventParam )param;
+ string eventName = eventParam.eventName; // TimelineEventProxy.EEventType
+ int frame = eventParam.frame;
+ Debug.Log("[ActionTool] Add new event " + eventName);
+ if (animationData == null)
+ {
+ Debug.LogError("[ActionTool] 没有animation data数据");
+ return;
+ }
+ Type type = TimelineEventProxy.GetTypeByName(eventName);
+ if(type == null)
+ {
+ Debug.LogError("[ActionTool] 没有创建对应的类, " + eventName);
+ return;
+ }
+ AnimationEventBase animEvent = Activator.CreateInstance(type) as AnimationEventBase;
+ if(animEvent)
+ {
+ animEvent.name = animEvent.type.ToString();
+ animEvent.startFrame = frame;
+ animationData.AddEvent(animEvent);
+ OnSelectAnimationEvent(animEvent);
+ }
+ else
+ {
+ Debug.LogError("[ActionTool] 实例化失败, " + eventName);
+ return;
+ }
+ }
+
+ public static void PasteEvent(object param)
+ {
+ if (copiedAnimationEvent == null)
+ return;
+ int frame = (int)param;
+ AnimationEventBase animEvent = UnityEngine.Object.Instantiate(copiedAnimationEvent);
+ if(animEvent != null)
+ {
+ animEvent.name = animEvent.type.ToString();
+ animEvent.startFrame = frame;
+ animationData.AddEvent(animEvent);
+ OnSelectAnimationEvent(animEvent);
+ }
+ }
+
+ public static void OnSelectAnimationEvent(AnimationEventBase animEvent)
+ {
+ m_CurAnimationEvent = animEvent;
+ if(animEvent != null)
+ {
+ EventEditWindow = EditorWindow.GetWindow<ActionEventEditor>(true);
+ }
+ }
+
+ public static void DeleteEvent(AnimationEventBase animEvent)
+ {
+ if (animationData == null)
+ return;
+ animationData.DeleteEvent(animEvent);
+ }
+
+ public static void EditRootMotionOverrideData()
+ {
+ RootMotionEditor = EditorWindow.GetWindow<ActionRootMotionEditor>(true);
+ }
+
+ public static void CopyAnimationEvent(AnimationEventBase animEvent)
+ {
+ copiedAnimationEvent = UnityEngine.Object.Instantiate(animEvent);
+ }
+
+ public static void ResetUnitRootPosAndRot()
+ {
+ unitRoot.transform.position = s_InitPosition;
+ unitRoot.transform.rotation = s_InitRotation;
+ }
+
+ }
+} \ No newline at end of file
diff --git a/Assets/Tools/ActionTool/Editor/ActionManager.cs.meta b/Assets/Tools/ActionTool/Editor/ActionManager.cs.meta
new file mode 100644
index 00000000..86dd9397
--- /dev/null
+++ b/Assets/Tools/ActionTool/Editor/ActionManager.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 5edc3f3e858191742a0db785219adbe3
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Tools/ActionTool/Editor/ActionNoteEditor.cs b/Assets/Tools/ActionTool/Editor/ActionNoteEditor.cs
new file mode 100644
index 00000000..d6a0a425
--- /dev/null
+++ b/Assets/Tools/ActionTool/Editor/ActionNoteEditor.cs
@@ -0,0 +1,40 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEditor;
+
+namespace ActionTool
+{
+
+ // 编辑collider帧
+ public class ActionNoteEditor : EditorWindow
+ {
+ private void OnEnable()
+ {
+ titleContent = new GUIContent("Note");
+ maxSize = new Vector2(300, 110);
+ minSize = new Vector2(300, 110);
+ }
+
+ private void OnDisable()
+ {
+ }
+
+ private void Update()
+ {
+ }
+
+ private void OnGUI()
+ {
+ var animData = ActionManager.animationData;
+ if(animData == null)
+ {
+ this.Close();
+ return;
+ }
+ GUILayout.Space(5);
+ animData.note = GUILayout.TextArea(animData.note, GUILayout.Height(100));
+ GUILayout.Space(5);
+ }
+ }
+} \ No newline at end of file
diff --git a/Assets/Tools/ActionTool/Editor/ActionNoteEditor.cs.meta b/Assets/Tools/ActionTool/Editor/ActionNoteEditor.cs.meta
new file mode 100644
index 00000000..a47cc903
--- /dev/null
+++ b/Assets/Tools/ActionTool/Editor/ActionNoteEditor.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 48a105c4026c65b428a22db4c350c5ef
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Tools/ActionTool/Editor/ActionPreviewEditor.cs b/Assets/Tools/ActionTool/Editor/ActionPreviewEditor.cs
new file mode 100644
index 00000000..03858393
--- /dev/null
+++ b/Assets/Tools/ActionTool/Editor/ActionPreviewEditor.cs
@@ -0,0 +1,1027 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEditor;
+
+namespace ActionTool
+{
+
+ public struct BoxParam
+ {
+ public ColliderData collider;
+ public int frame;
+ }
+
+ public struct EventParam
+ {
+ public string eventName;
+ public int frame;
+ }
+
+ public class ActionPreviewEditor : EditorWindow
+ {
+ Texture m_UITextureStop;
+ Texture m_UITexturePause;
+ Texture m_UITexturePlay;
+ Texture m_UITextureNext;
+ Texture m_UITextureEnd;
+ Texture m_UITexturePrevious;
+ Texture m_UITextureStart;
+
+ Texture m_UITextureNewHurtBox;
+ Texture m_UITextureNewHitBox;
+ Texture m_UITextureNewThrowBox;
+ Texture m_UITextureNewBlockBox;
+ Texture m_UITextureNewDefendBox;
+
+ GUIStyle m_StyleBold;
+
+ const float kToolbarControlMargin = 5;
+ const float kToolbarHeight = 50;
+ const float kToolbarControlSize = kToolbarHeight - kToolbarControlMargin * 2;
+ const float kCurveYOffset = 80;
+ const float kTimeLineViewXOffset = 20;
+ float kTimeLineViewYOffset = 110;
+ const float kFrameWidth = 10;
+ const float kFrameHeight = 20;
+
+ float m_GridY = 0;
+ float m_ToolbarOffset = 0; // <= 0
+ bool m_ShowLeftButton;
+ bool m_ShowRightButton;
+ Rect m_LeftRegion;
+ Rect m_RightRegion;
+ bool m_IsLeftOrRightButtonClicked;
+
+ ActionEditorStyles styles;
+ ActionEditorUI ui;
+
+ private void OnEnable()
+ {
+ titleContent = new GUIContent("Action Preview");
+
+ m_UITextureStop = (Texture)Resources.Load("button_control_stop");
+ m_UITexturePause = (Texture)Resources.Load("button_control_pause");
+ m_UITexturePlay = (Texture)Resources.Load("button_control_play");
+ m_UITextureNext = (Texture)Resources.Load("button_control_next");
+ m_UITextureEnd = (Texture)Resources.Load("button_control_end");
+ m_UITexturePrevious = (Texture)Resources.Load("button_control_previous");
+ m_UITextureStart = (Texture)Resources.Load("button_control_start");
+ m_UITextureNewHurtBox = (Texture)Resources.Load("hurtbox");
+ m_UITextureNewHitBox = (Texture)Resources.Load("hitbox");
+ m_UITextureNewThrowBox = (Texture)Resources.Load("throwbox");
+ m_UITextureNewBlockBox = (Texture)Resources.Load("blockbox");
+ m_UITextureNewDefendBox = (Texture)Resources.Load("defendbox");
+
+ m_IsLeftOrRightButtonClicked = false;
+ }
+
+ void Update()
+ {
+ ActionManager.UpdateFrame();
+
+ if(ActionManager.RootMotionEditor != null)
+ ActionManager.RootMotionEditor.Repaint();
+ }
+
+ private void OnDisable()
+ {
+ ActionManager.PreviewWindow = null;
+ }
+
+ private void OnGUI()
+ {
+ //if(ActionManager.actionData == null)
+ //{
+ // this.Close();
+ // return;
+ //}
+
+ styles = ActionEditorStyles.Get();
+
+ if (ActionManager.CurrentAnimationName == null || ActionManager.CurrentAnimationName == "")
+ {
+ EditorGUILayout.HelpBox("选择动画", MessageType.Warning);
+ return;
+ }
+
+ if (styles == null) styles = ActionEditorStyles.Get();
+ if (ui == null) ui = ActionEditorUI.Get();
+
+ GUI_Toolbar();
+
+ float y = kToolbarHeight + 5;
+ GUI_Detail(ref y);
+ GUI_Properties(ref y);
+ GUI_Parameters(ref y);
+ GUI_Toggle(ref y);
+ GUI_Curves(ref y);
+ GUI_Curve(ref y);
+ GUI_PlaybackTime(ref y);
+ y += 5;
+ GUI_Setting(ref y);
+ GUI_TimeLineView(ref y);
+ }
+
+ void GUI_Toolbar()
+ {
+ Event e = Event.current;
+
+ float x = m_ToolbarOffset, y = kToolbarControlMargin;
+ m_IsLeftOrRightButtonClicked = (e.isMouse && ((m_ShowLeftButton && m_LeftRegion.Contains(e.mousePosition)) ||
+ (m_ShowRightButton && m_RightRegion.Contains(e.mousePosition))));
+
+ GUI.enabled = !m_IsLeftOrRightButtonClicked;
+
+ GUI_Toolbar_BG();
+ GUI_Toolbar_Start(ref x, ref y);
+ GUI_Toolbar_Previous(ref x, ref y);
+ GUI_Toolbar_Stop(ref x, ref y);
+ GUI_Toolbar_Pause(ref x, ref y);
+ GUI_Toolbar_Next(ref x, ref y);
+ GUI_Toolbar_End(ref x, ref y);
+
+ GUI_DrawSeperateLine(x + 10 + kToolbarControlMargin, 0, kToolbarHeight);
+ x += 20;
+
+ GUI.enabled = !m_IsLeftOrRightButtonClicked && ActionManager.animationData != null;
+ GUI_Toolbar_NewHurtBox(ref x, ref y);
+ GUI_Toolbar_NewHitBox(ref x, ref y);
+ GUI_Toolbar_NewThrowBox(ref x, ref y);
+ GUI_Toolbar_NewBlockBox(ref x, ref y);
+ GUI_Toolbar_NewDefendBox(ref x, ref y);
+ //GUI_Toolbar_Detail(ref x, ref y);
+ //GUI_Toolbar_Delete(ref x, ref y);
+ GUI.enabled = !m_IsLeftOrRightButtonClicked;
+
+ GUI_DrawSeperateLine(x + 10 + kToolbarControlMargin, 0, kToolbarHeight);
+ x += 20;
+
+ GUI.enabled = !m_IsLeftOrRightButtonClicked && ActionManager.animationData == null;
+ GUI_Toolbar_NewAnimationData(ref x, ref y);
+ GUI.enabled = !m_IsLeftOrRightButtonClicked;
+
+ GUI.enabled = !m_IsLeftOrRightButtonClicked && ActionManager.animationData != null;
+ GUI_Toolbar_Save(ref x, ref y);
+ GUI.enabled = !m_IsLeftOrRightButtonClicked;
+
+ GUI.enabled = true;
+ GUI_Toolbar_Expand(x);
+ }
+
+ void GUI_Toolbar_BG()
+ {
+ GUI.DrawTexture(new Rect(0, 0, position.width, 50), EditorStyles.toolbar.normal.background);
+ }
+
+ void GUI_Toolbar_Start(ref float x, ref float y)
+ {
+ x += kToolbarControlMargin;
+ Rect rect = new Rect(x, y, kToolbarControlSize, kToolbarControlSize);
+ if(GUI.Button(rect, m_UITextureStart))
+ {
+ ActionManager.Start();
+ }
+ x += kToolbarControlSize;
+ }
+
+ void GUI_Toolbar_Previous(ref float x, ref float y)
+ {
+ x += kToolbarControlMargin;
+ Rect rect = new Rect(x, y, kToolbarControlSize, kToolbarControlSize);
+ if (GUI.Button(rect, m_UITexturePrevious))
+ {
+ ActionManager.Previous();
+ }
+ x += kToolbarControlSize;
+ }
+
+ void GUI_Toolbar_Stop(ref float x, ref float y)
+ {
+ x += kToolbarControlMargin;
+ Rect rect = new Rect(x, y, kToolbarControlSize, kToolbarControlSize);
+ if (GUI.Button(rect, m_UITextureStop))
+ {
+ ActionManager.Stop();
+ }
+ x += kToolbarControlSize;
+ }
+
+ void GUI_Toolbar_Pause(ref float x, ref float y)
+ {
+ x += kToolbarControlMargin;
+ Rect rect = new Rect(x, y, kToolbarControlSize, kToolbarControlSize);
+ Texture tex = ActionManager.IsPlay ? m_UITexturePlay : m_UITexturePause;
+ if (GUI.Button(rect, tex))
+ {
+ ActionManager.Pause();
+ }
+ x += kToolbarControlSize;
+ }
+
+ void GUI_Toolbar_Next(ref float x, ref float y)
+ {
+ x += kToolbarControlMargin;
+ Rect rect = new Rect(x, y, kToolbarControlSize, kToolbarControlSize);
+ if (GUI.Button(rect, m_UITextureNext))
+ {
+ ActionManager.Next();
+ }
+ x += kToolbarControlSize;
+ }
+
+ void GUI_Toolbar_End(ref float x, ref float y)
+ {
+ x += kToolbarControlMargin;
+ Rect rect = new Rect(x, y, kToolbarControlSize, kToolbarControlSize);
+ if (GUI.Button(rect, m_UITextureEnd))
+ {
+ ActionManager.End();
+ }
+ x += kToolbarControlSize;
+ }
+
+ void GUI_Detail(ref float y)
+ {
+ var actionData = ActionManager.actionData;
+ var animationData = ActionManager.animationData;
+
+ float xl = 5, xr = xl + 105;
+
+ GUI.Label(new Rect(xl, y, 105, 15), "Animation Name:", styles.textMiddle);
+ float width = styles.textMiddleBold.CalcSize(new GUIContent(ActionManager.CurrentAnimationName)).x;
+ GUI.Label(new Rect(xr, y, width, 15), ActionManager.CurrentAnimationName, styles.textMiddleBold);
+ if(GUI.Button(new Rect(xr + width + 10, y, 50, 15), "Info"))
+ {
+ ActionInfoEditor.ShowContent("Animation Info",
+ "Length: " + ActionManager.curClip.length + "s \n" +
+ "WrapMode: " + ActionManager.curClip.wrapMode + "\n" +
+ "IsLooping: " + ActionManager.curClip.isLooping + "\n" +
+ "FrameRate: " + ActionManager.curClip.frameRate
+ );
+ }
+ if (animationData)
+ {
+ Color bgColor = GUI.backgroundColor;
+ GUI.backgroundColor = animationData.note != null && animationData.note != "" ? bgColor : Color.gray;
+ if (GUI.Button(new Rect(xr + width + 10 + 50 + 10, y, 16, 14), "", styles.infoButton))
+ {
+ EditorWindow.GetWindow<ActionNoteEditor>(true);
+ }
+ GUI.backgroundColor = bgColor;
+ }
+ y += 15;
+
+ GUI.Label(new Rect(xl, y, 105, 15), "AnimationData:", styles.textMiddle);
+ if(ActionManager.animationData != null)
+ {
+ width = styles.textMiddleBold.CalcSize(new GUIContent(ActionManager.AnimationDataPath)).x;
+ GUI.Label(new Rect(xr, y, width, 15), ActionManager.AnimationDataPath, styles.textMiddleBold);
+ if (GUI.Button(new Rect(xr + width + 10, y, 50, 15), "Info"))
+ {
+ AnimationData animData = ActionManager.animationData;
+ ActionInfoEditor.ShowContent("AnimationData Info",
+ "Events: " + (animData.animationEvents == null ? 0 : animData.animationEvents.Count) + "\n" +
+ "HurtBoxes: " + (animData.hurtBoxes == null ? 0 : animData.hurtBoxes.Count) + "\n" +
+ "HitBoxes: " + (animData.hitBoxes == null ? 0 : animData.hitBoxes.Count) + "\n" +
+ "ThrowBoxes: " + (animData.throwBoxes == null ? 0 : animData.throwBoxes.Count) + "\n" +
+ "BlockBoxes: " + (animData.blockBoxes == null ? 0 : animData.blockBoxes.Count) + "\n" +
+ "DefendBoxes: " + (animData.defendBoxes == null ? 0 : animData.defendBoxes.Count)
+ );
+ }
+ }
+ else
+ {
+ GUI.Label(new Rect(xr, y, 100, 15), "None", styles.textMiddleBold);
+ }
+ y += 15;
+
+ GUI.Label(new Rect(xl, y, 105, 15), "RootMotion:", styles.textMiddle);
+ if(actionData.rootMotion != null && (animationData == null || animationData.overrideRootMotion == false))
+ {
+ string content = ActionManager.actionData.rootMotionPath + " (Editor Only)";
+ width = styles.textMiddleBold.CalcSize(new GUIContent(content)).x;
+ GUI.Label(new Rect(xr, y, width, 15), content, styles.textMiddleBold);
+ if (GUI.Button(new Rect(xr + width + 10, y, 50, 15), "Info"))
+ {
+ RootMotionData rootMotion = ActionManager.actionData.rootMotion;
+ ActionInfoEditor.ShowContent("RootMotion Info",
+ "Frame Count: " + rootMotion.frameCount
+ );
+ }
+ if(animationData != null)
+ {
+ if (GUI.Button(new Rect(xr + width + 10 + 60, y, 60, 15), "Override"))
+ {
+ animationData.AddRootMotionOverriderData();
+ }
+ }
+ }
+ else if(animationData != null && animationData.overrideRootMotion == true)
+ {
+ width = styles.textMiddleBold.CalcSize(new GUIContent("Override")).x;
+ GUI.Label(new Rect(xr, y, width, 15), "Override", styles.textMiddleBold);
+ if (GUI.Button(new Rect(xr + width + 10, y, 60, 15), "Edit"))
+ {
+ ActionManager.EditRootMotionOverrideData();
+ }
+ Color bg = GUI.backgroundColor;
+ GUI.backgroundColor = Color.red;
+ if (GUI.Button(new Rect(xr + width + 10 + 70, y, 60, 15), "Delete"))
+ {
+ animationData.DeleteRootMotionOverrideData();
+ }
+ GUI.backgroundColor = bg;
+ }
+ else
+ {
+ GUI.Label(new Rect(xr, y, 50, 15), "None", styles.textMiddleBold);
+ width = styles.textMiddleBold.CalcSize(new GUIContent("None")).x;
+ if (animationData != null)
+ {
+ if (GUI.Button(new Rect(xr + width + 10, y, 60, 15), "Override"))
+ {
+ animationData.AddRootMotionOverriderData();
+ }
+ }
+ }
+ y += 15;
+ }
+
+ void GUI_PlaybackTime(ref float y)
+ {
+ float xl = 5, xr = xl + 105;
+ GUI.Label(new Rect(xl, y, 105, 15), "Playback Frame:", styles.textMiddle);
+ GUI.Label(new Rect(xr, y, 110, 15), ActionManager.actionData.curAnimFrame.ToString("f2"), styles.textMiddleBold);
+ GUI.Label(new Rect(xl + 150, y, 105, 15), "Normalized Time:", styles.textMiddle);
+ GUI.Label(new Rect(xr + 150, y, 110, 15), ActionManager.actionData.curAnimTimeNormal.ToString("f2"), styles.textMiddleBold);
+ GUI.Label(new Rect(xl + 150 * 2, y, 105, 15), "Event Frame:", styles.textMiddle);
+ GUI.Label(new Rect(xr + 150 + 125, y, 110, 15), ((int)ActionManager.actionData.curAnimFrame).ToString(), styles.textMiddleBold);
+ //GUI.Label(new Rect(xl + 150 + 130 + 130, y, 105, 15), "Time:", styles.textMiddle);
+ //GUI.Label(new Rect(xr + 150 + 130 + 70 , y, 510, 15), ((int)ActionManager.actionData.curAnimFrame).ToString(), styles.textMiddleBold);
+ y += 15;
+ }
+
+ void GUI_Curve(ref float y)
+ {
+ AnimationData animData = ActionManager.animationData;
+ if (animData == null)
+ return;
+
+ float x = 5;
+ GUI.Label(new Rect(x, y, 105, 15), "Speed Curve:", styles.textMiddle);
+ x += 105;
+ animData.speedCurve = EditorGUI.CurveField(new Rect(x, y, 210, 15), animData.speedCurve);
+ ui.DrawVerticalLineFast(x + 210 * ActionManager.actionData.curAnimTimeNormal, y , y + 15, Color.red);
+ y += 15;
+ }
+
+ void GUI_Properties(ref float y)
+ {
+ AnimationData animData = ActionManager.animationData;
+ if (animData == null)
+ return;
+ var properties = animData.properties;
+ float x = 5;
+ GUI.Label(new Rect(x, y, 105, 15), "Properties:", styles.textMiddle);
+ x += 105;
+ GUI.Label(new Rect(x, y, 10, 15), (properties != null ? properties.Count : 0).ToString(), styles.textMiddleBold);
+ x += 20;
+ if (GUI.Button(new Rect(x, y, 50, 15), "Edit"))
+ {
+ EditorWindow.GetWindow<AnimationPropertyEditor>(true);
+ }
+ y += 15;
+ }
+
+ void GUI_Parameters(ref float y)
+ {
+ AnimationData animData = ActionManager.animationData;
+ if (animData == null)
+ return;
+ var parameters = animData.parameters;
+ float x = 5;
+ GUI.Label(new Rect(x, y, 105, 15), "Parameters:", styles.textMiddle);
+ x += 105;
+ GUI.Label(new Rect(x, y, 10, 15), (parameters != null ? parameters.Count : 0).ToString(), styles.textMiddleBold);
+ x += 20;
+ if (GUI.Button(new Rect(x, y, 50, 15), "Edit"))
+ {
+ EditorWindow.GetWindow<AnimationParameterEditor>(true);
+ }
+ y += 15;
+ }
+
+ void GUI_Toggle(ref float y)
+ {
+ AnimationData animData = ActionManager.animationData;
+ if (animData == null)
+ return;
+ var toggles = animData.toggles;
+ float x = 5;
+ GUI.Label(new Rect(x, y, 105, 15), "Toggles:", styles.textMiddle);
+ x += 105;
+ GUI.Label(new Rect(x, y, 10, 15), (toggles != null ? toggles.Count : 0).ToString(), styles.textMiddleBold);
+ //if(toggles != null && toggles.Count > 0)
+ //{
+ x += 20;
+ if(GUI.Button(new Rect(x, y, 50, 15), "Edit"))
+ {
+ EditorWindow.GetWindow<AnimationToggleEditor>(true);
+ }
+ //}
+ y += 15;
+ }
+
+ void GUI_Curves(ref float y)
+ {
+ AnimationData animData = ActionManager.animationData;
+ if (animData == null)
+ return;
+ var curves = animData.curves;
+ float x = 5;
+ GUI.Label(new Rect(x, y, 105, 15), "Curves:", styles.textMiddle);
+ x += 105;
+ GUI.Label(new Rect(x, y, 10, 15), (curves != null ? curves.Count : 0).ToString(), styles.textMiddleBold);
+ x += 20;
+ if (GUI.Button(new Rect(x, y, 50, 15), "Edit"))
+ {
+ EditorWindow.GetWindow<AnimationCurveEditor>(true);
+ }
+ y += 15;
+ }
+
+ void GUI_Setting(ref float y)
+ {
+ ActionData action = ActionManager.actionData;
+
+ Rect bgRect = new Rect(3, y - 4, position.width - 6, 15 + 8);
+ EditorGUI.DrawRect(bgRect, new Color32(65, 65, 65, 255));
+
+ float x = 5;
+ action.applyRootMotion = GUI.Toggle(new Rect(x, y, 120, 15), action.applyRootMotion, "Apply RootMotion", styles.toggleSmallBold);
+ x += 130;
+ action.applyCurve = GUI.Toggle(new Rect(x, y, 120, 15), action.applyCurve, "Apply SpeedCurve", styles.toggleSmallBold);
+ x += 130;
+ action.applyCurves = GUI.Toggle(new Rect(x, y, 120, 15), action.applyCurves, "Apply Curves", styles.toggleSmallBold);
+
+ y += 20;
+ }
+
+ Vector2 scrollPos = Vector2.zero;
+ void GUI_TimeLineView(ref float iy)
+ {
+ if (ActionManager.actionData == null)
+ return;
+
+ ActionData action = ActionManager.actionData;
+
+ kTimeLineViewYOffset = iy;
+
+ float y = iy;
+
+ float contentHeight = ActionManager.GridRowCount * kFrameHeight + 40;
+ Rect content = new Rect(0, 0, ((int)Mathf.Ceil(action.totalFrame)) * kFrameWidth + 30, contentHeight);
+ float height = 300;
+ if (position.height - kTimeLineViewYOffset > contentHeight + 15)
+ height = contentHeight + 15;
+ else
+ height = position.height - kTimeLineViewYOffset;
+ Rect viewport = new Rect(0, y, position.width, height);
+ scrollPos = GUI.BeginScrollView(viewport, scrollPos, content);
+
+ y = 0;
+
+ GUI_FrameText(ref y);
+ GUI_Slider(ref y);
+ GUI_Grid(ref y);
+ GUI_Events();
+ GUI_RM();
+ GUI_Boxes();
+ GUI_FrameLine();
+
+ GUI.EndScrollView();
+ }
+
+ void GUI_FrameText(ref float y)
+ {
+ ActionData action = ActionManager.actionData;
+ int sampleCount = (int)Mathf.Ceil(action.totalFrame);
+ Rect rect = new Rect(0, y, 20, 15);
+ for(int i = 0; i < sampleCount; i++)
+ {
+ rect.x = kTimeLineViewXOffset + i * kFrameWidth - ((i >= 10) ? 7 : 5);
+ if(i % 5 == 0)
+ {
+ Color c = GUI.color;
+ GUI.color = i % 10 == 0 ? Color.yellow : GUI.color;
+ GUI.Label(rect, i.ToString(), styles.textSmall);
+ GUI.color = c;
+ }
+ }
+ y += 11;
+ }
+
+ void GUI_Slider( ref float y)
+ {
+ ActionData action = ActionManager.actionData;
+ Rect rect = new Rect(kTimeLineViewXOffset - 4, y, action.totalFrame * kFrameWidth + 7, 15);
+ float t = GUI.HorizontalSlider(rect,action.curAnimTimeNormal, 0, 1);
+ if(t != action.curAnimTimeNormal)
+ {
+ if(ActionManager.IsPlay)
+ ActionManager.Pause();
+ action.curAnimTimeNormal = t;
+ }
+
+ if(ActionManager.IsPlay)
+ {
+ this.Repaint();
+ }
+
+ y += 20;
+ }
+
+ void GUI_Grid(ref float y)
+ {
+ m_GridY = y;
+
+ ActionData action = ActionManager.actionData;
+ int sampleCount = (int)Mathf.Ceil(action.totalFrame);
+
+ Rect bgRect = new Rect(kTimeLineViewXOffset, y, sampleCount * kFrameWidth, ActionManager.GridRowCount * kFrameHeight);
+ GUI.Box(bgRect, "");
+
+ Color lineColor = new Color(0.3f, 0.3f, 0.3f);
+ Color lineColor2 = new Color(0.5f, 0.5f, 0.5f);
+ for (int i = 0; i < ActionManager.GridRowCount + 1; i++)
+ {
+ ui.DrawHorizontalLineFast(y + i * kFrameHeight, kTimeLineViewXOffset, kTimeLineViewXOffset + sampleCount * kFrameWidth, lineColor);
+ }
+ for(int i = 0; i <= sampleCount; ++i)
+ {
+ Color c = i % 5 == 0 ? lineColor2 : lineColor;
+ float x = kTimeLineViewXOffset + i * kFrameWidth;
+ //x = Mathf.Clamp(x, kTimeLineViewXOffset, kTimeLineViewXOffset + action.totalFrame * kFrameWidth);
+ ui.DrawVerticalLineFast(x, y, y + ActionManager.GridRowCount * kFrameHeight, c);
+ }
+
+ y += ActionManager.GridRowCount * kFrameHeight;
+ }
+
+ void GUI_FrameLine()
+ {
+ float y = m_GridY;
+ ActionData action = ActionManager.actionData;
+ Rect bgRect = new Rect(kTimeLineViewXOffset, y, action.totalFrame * kFrameWidth, ActionManager.GridRowCount * kFrameHeight);
+ ui.defaultUIMaterail.SetPass(0);
+
+ ui.DrawVerticalLineFast(kTimeLineViewXOffset + bgRect.width * action.curAnimTimeNormal, y, y + ActionManager.GridRowCount * kFrameHeight, Color.red);
+ }
+
+ void GUI_RM()
+ {
+ var animData = ActionManager.animationData;
+ if (animData == null || animData.overrideRootMotion == false)
+ return;
+ float y = m_GridY + (ActionManager.MaxEventsPerFrame + 1) * kFrameHeight;
+ Rect rect = new Rect(kTimeLineViewXOffset - 17, y - 1, 17, kFrameHeight);
+ if(GUI.Button(rect, "", styles.boxToggle))
+ {
+ ActionManager.EditRootMotionOverrideData();
+ }
+ Rect lb = rect;
+ lb.y += 3;
+ GUI.Label(lb, "RM", styles.textBoldSmall);
+ //
+ var rmData = animData.rootMotionOverrideData;
+ if (rmData == null)
+ return;
+ for(int i = 0; i < rmData.positions.Count; ++i)
+ {
+ var posData = rmData.positions[i];
+ if (posData == null)
+ continue;
+ int frame = posData.frame;
+ Vector2 pos = new Vector2(kTimeLineViewXOffset + frame * kFrameWidth, y);
+ if(GUI.Button(new Rect(pos.x - 1, pos.y + 4, kFrameWidth + 1, kFrameWidth), "", styles.keyButton))
+ {
+ ActionManager.actionData.SetCurrentAnimTime(frame);
+ }
+ }
+ }
+
+ void GUI_Boxes()
+ {
+ var animData = ActionManager.animationData;
+ bool hasRM = animData != null && animData.overrideRootMotion == true;
+ float y = m_GridY + (ActionManager.MaxEventsPerFrame + 1 + (hasRM ? 1:0)) * kFrameHeight;
+ if (animData == null)
+ return;
+ DrawBoxList(animData.hurtBoxes, ref y, Color.green);
+ DrawBoxList(animData.hitBoxes, ref y, Color.red);
+ DrawBoxList(animData.throwBoxes, ref y, Color.blue);
+ DrawBoxList(animData.blockBoxes, ref y, Color.yellow);
+ DrawBoxList(animData.defendBoxes, ref y, Color.magenta);
+ GenericMenu_BoxFrame();
+ }
+
+ void DrawBoxList(List<ColliderData> boxes, ref float y, Color c)
+ {
+ if (boxes == null || boxes.Count == 0)
+ return;
+ int count = boxes.Count;
+ for(int i = 0; i < boxes.Count; ++i)
+ {
+ DrawBox(i, boxes[i], y + i * kFrameHeight, c);
+ }
+ y += count * kFrameHeight;
+ }
+
+ void DrawBox(int index, ColliderData box, float y, Color c)
+ {
+ ActionData action = ActionManager.actionData;
+
+ Color prevColor = GUI.backgroundColor;
+ GUI.backgroundColor = c;
+ Rect rect = new Rect(kTimeLineViewXOffset - 17, y - 1, 17, kFrameHeight);
+ bool selected = ActionManager.colliderData == box;
+ bool select = GUI.Toggle(rect, selected, index.ToString(), styles.boxToggle);
+ GUI.backgroundColor = prevColor;
+
+ prevColor = GUI.color;
+ GUI.color = c;
+ if (select)
+ {
+ ActionManager.OnSelectBox(box, index);
+ }
+ else if(selected && !select)
+ {
+ ActionManager.OnSelectBox(null);
+ }
+
+ if(box.frames != null && box.frames.Count > 0)
+ {
+ int prevIndex = -1;
+ for(int i = 0; i < box.frames.Count; ++i)
+ {
+ ColliderData.ColliderFrame frame = box.frames[i];
+ int frameIndex = frame.frame;
+ Vector2 pos = new Vector2(kTimeLineViewXOffset + frameIndex * kFrameWidth, y);
+ Rect frameRect = new Rect(pos.x, pos.y, kFrameWidth, kFrameHeight);
+ bool frameSelected = frame == ActionManager.editColliderFrame;
+ bool frameSelect = GUI.Toggle(frameRect, frameSelected, "",styles.keyFrameButton);
+ if(!frameSelected && frameSelect)
+ {
+ //ActionManager.OnSelectBox(box, i);
+ ActionManager.OnSelectColliderFrame(frame, box);
+ }
+ else if(frameSelect && !frameSelect)
+ {
+ ActionManager.OnSelectColliderFrame(null, null);
+ }
+ if(prevIndex != -1)
+ {
+ float length = (frameIndex - prevIndex - 1) * kFrameWidth;
+ Rect region = new Rect(kTimeLineViewXOffset + (prevIndex + 1) * kFrameWidth, y, length, kFrameHeight);
+ float animFrame = action.curAnimFrame;
+ Color col = c * 0.4f;
+ //if (ActionManager.IsPlay)
+ //{
+ bool highlight = action.curAnimFrame >= prevIndex && action.curAnimFrame < frameIndex;
+ col = highlight ? c * 0.6f : c * 0.4f;
+ //}
+ EditorGUI.DrawRect(region, col);
+ }
+ if (frame.active)
+ prevIndex = frameIndex;
+ else
+ prevIndex = -1;
+ }
+ }
+
+ GUI.color = prevColor;
+ }
+
+ void GenericMenu_BoxFrame()
+ {
+ Event e = Event.current;
+ if (e.button != 1 || !e.isMouse || e.type != EventType.MouseDown)
+ return;
+ ActionData action = ActionManager.actionData;
+ AnimationData animData = ActionManager.animationData;
+ int sampleCount = (int)Mathf.Ceil(action.totalFrame);
+ float y = m_GridY + (ActionManager.MaxEventsPerFrame + 1) * kFrameHeight + (animData.overrideRootMotion ? kFrameHeight : 0);
+ Vector2 position = e.mousePosition;
+ int boxCount = ActionManager.animationData.GetBoxesCount();
+ Rect boxRegion = new Rect(kTimeLineViewXOffset, y, sampleCount * kFrameWidth, boxCount * kFrameHeight);
+ if (!boxRegion.Contains(position))
+ return;
+ // 找到对应的box和帧
+ Vector2 pos = new Vector2(position.x - boxRegion.x, position.y - boxRegion.y);
+ int index = (int)(pos.y / kFrameHeight);
+ int frame = (int)(pos.x / kFrameWidth);
+ ColliderData box = ActionManager.animationData.GetColliderByIndex(index);
+ if(box != null)
+ {
+ BoxParam param = new BoxParam();
+ param.collider = box;
+ param.frame = frame;
+ //if(ActionManager.colliderData != box)
+ // ActionManager.OnSelectBox(box, index);
+ GenericMenu _newFrameMenu = new GenericMenu();
+ _newFrameMenu.AddItem(new GUIContent("New Frame"), false, ActionManager.AddNewBoxFrame, param);
+ _newFrameMenu.AddItem(new GUIContent("Delete"), false, ActionManager.DeleteBoxFrame, param);
+ _newFrameMenu.ShowAsContext();
+ }
+ else
+ {
+ Debug.LogError("[ActionTool] 错误的点击");
+ }
+ }
+
+ void GUI_DrawSeperateLine(float x, float y, float height)
+ {
+ ui.defaultUIMaterail.SetPass(0);
+ Color lineColor = new Color(0.3f, 0.3f, 0.3f);
+ Color lineColor2 = new Color(0.1f, 0.1f, 0.1f);
+ ui.DrawVerticalLineFast(x, y, y +height, lineColor2);
+ ui.DrawVerticalLineFast(x+1, y, y +height, lineColor);
+ }
+
+ void GUI_Toolbar_NewHurtBox(ref float x, ref float y)
+ {
+ x += kToolbarControlMargin;
+ Rect rect = new Rect(x, y, kToolbarControlSize, kToolbarControlSize);
+ if (GUI.Button(rect, new GUIContent(" + ", m_UITextureNewHurtBox, "New hurt box")))
+ {
+ ActionManager.NewHurtBox();
+ }
+ x += kToolbarControlSize;
+ }
+
+ void GUI_Toolbar_NewHitBox(ref float x, ref float y)
+ {
+ x += kToolbarControlMargin;
+ Rect rect = new Rect(x, y, kToolbarControlSize, kToolbarControlSize);
+ if (GUI.Button(rect, new GUIContent(" + ", m_UITextureNewHitBox, "New hit box")))
+ {
+ ActionManager.NewHitBox();
+ }
+ x += kToolbarControlSize;
+ }
+
+ void GUI_Toolbar_NewThrowBox(ref float x, ref float y)
+ {
+ x += kToolbarControlMargin;
+ Rect rect = new Rect(x, y, kToolbarControlSize, kToolbarControlSize);
+ if (GUI.Button(rect, new GUIContent(" + ", m_UITextureNewThrowBox, "New hit box")))
+ {
+ ActionManager.NewHitBox();
+ }
+ x += kToolbarControlSize;
+ }
+
+ void GUI_Toolbar_NewDefendBox(ref float x, ref float y)
+ {
+ x += kToolbarControlMargin;
+ Rect rect = new Rect(x, y, kToolbarControlSize, kToolbarControlSize);
+ if (GUI.Button(rect, new GUIContent(" + ", m_UITextureNewDefendBox, "New hit box")))
+ {
+ ActionManager.NewHitBox();
+ }
+ x += kToolbarControlSize;
+ }
+
+ void GUI_Toolbar_NewBlockBox(ref float x, ref float y)
+ {
+ x += kToolbarControlMargin;
+ Rect rect = new Rect(x, y, kToolbarControlSize, kToolbarControlSize);
+ if (GUI.Button(rect, new GUIContent(" + ", m_UITextureNewBlockBox, "New hit box")))
+ {
+ ActionManager.NewHitBox();
+ }
+ x += kToolbarControlSize;
+ }
+
+ //void GUI_Toolbar_Detail(ref float x, ref float y)
+ //{
+ // x += kToolbarControlMargin + 20;
+ // Rect rect = new Rect(x, y, kToolbarControlSize, kToolbarControlSize);
+ // GUI.enabled = !m_IsLeftOrRightButtonClicked && ActionManager.colliderData != null;
+ // if (GUI.Button(rect, new GUIContent(styles.infoIcon, "Detail")))
+ // {
+ // ActionManager.EditCollider();
+ // }
+ // GUI.enabled = true;
+ // x += kToolbarControlSize;
+ //}
+
+ //void GUI_Toolbar_Delete(ref float x, ref float y)
+ //{
+ // x += kToolbarControlMargin;
+ // Rect rect = new Rect(x, y, kToolbarControlSize, kToolbarControlSize);
+ // GUI.enabled = !m_IsLeftOrRightButtonClicked && ActionManager.colliderData != null;
+ // if (GUI.Button(rect, new GUIContent(styles.deleteIcon, "Delete this collider")))
+ // {
+ // ActionManager.DeleteCurBox();
+ // }
+ // GUI.enabled = true;
+ // x += kToolbarControlSize;
+ //}
+
+ void GUI_Toolbar_NewAnimationData(ref float x, ref float y)
+ {
+ x += kToolbarControlMargin;
+ Rect rect = new Rect(x, y, kToolbarControlSize, kToolbarControlSize);
+ if (GUI.Button(rect, new GUIContent(styles.addFileIcon, "Add new animation data file")))
+ {
+ ActionManager.CreateAnimationData();
+ }
+ x += kToolbarControlSize;
+ }
+
+ void GUI_Toolbar_Save(ref float x, ref float y)
+ {
+ x += kToolbarControlMargin;
+ Rect rect = new Rect(x, y, kToolbarControlSize, kToolbarControlSize);
+ //Color c = GUI.backgroundColor;
+ if (GUI.Button(rect, new GUIContent(styles.saveFileIcon, "Save")))
+ {
+ ActionManager.SaveAnimationData();
+ }
+ //GUI.backgroundColor = c;
+ x += kToolbarControlSize;
+ }
+
+ void GUI_Toolbar_Expand(float x)
+ {
+ x += 5;
+ float width = position.width;
+ if (width >= x - m_ToolbarOffset)
+ {
+ m_ShowLeftButton = m_ShowRightButton = false;
+ return;
+ }
+ float btnWidth = 20;
+ Rect leftRect = new Rect(-2, kToolbarControlMargin - 6, btnWidth, kToolbarControlSize + 11);
+ Rect rightRect = new Rect(position.width - 18, kToolbarControlMargin - 6, btnWidth, kToolbarControlSize + 11);
+ m_LeftRegion = leftRect;
+ m_RightRegion = rightRect;
+ Color col = GUI.backgroundColor;
+ GUI.backgroundColor = Color.gray;
+ if (x > width)
+ {
+ m_ShowRightButton = true;
+ if (GUI.Button(rightRect, ">", EditorStyles.miniButtonLeft))
+ {
+ m_ToolbarOffset -= Mathf.Min(kToolbarControlSize, x - width);
+ }
+ }
+ if(m_ToolbarOffset < 0)
+ {
+ m_ShowLeftButton = true;
+ if (GUI.Button(leftRect, "<", EditorStyles.miniButtonRight))
+ {
+ m_ToolbarOffset += Mathf.Min(kToolbarControlSize, -m_ToolbarOffset);
+ }
+ }
+ GUI.backgroundColor = col;
+ }
+
+ void GUI_Events()
+ {
+ float y = m_GridY;
+ Rect rect = new Rect(kTimeLineViewXOffset - 17, y - 1, 17, (ActionManager.MaxEventsPerFrame + 1) * kFrameHeight);
+ if (GUI.Button(rect, "", styles.boxToggle))
+ {
+ AnimationData animData = ActionManager.animationData;
+ Dictionary<string, int> events = new Dictionary<string, int>();
+ for (int i = 0; i < animData.animationEvents.Count; ++i)
+ {
+ var e = animData.animationEvents[i];
+ if(!events.ContainsKey(e.type.ToString()))
+ events.Add(e.type.ToString(), 0);
+ events[e.type.ToString()]++;
+ }
+ string str = "";
+ foreach(var e in events)
+ {
+ str += "\n" + e.Key.ToString() + ": " + e.Value;
+ }
+
+ ActionInfoEditor.ShowContent("Event Info",
+ "Events: " + (animData.animationEvents == null ? 0 : animData.animationEvents.Count) +
+ str
+ );
+ }
+ Rect lb = rect;
+ //lb.y += 3;
+ lb.x += 2;
+ GUI.Label(lb, "EV", styles.textBoldSmallMid);
+ DrawAllEvents();
+ GenericMenu_Event();
+ }
+
+ void DrawAllEvents()
+ {
+ if (ActionManager.animationData == null)
+ return;
+
+ List<int> frames = ActionManager.animationData.GetAnimationEventFrameIndices();
+ if (frames == null || frames.Count == 0)
+ return;
+ for(int i= 0;i < frames.Count; ++ i)
+ {
+ int frame = frames[i];
+ DrawFrameEvent(frame);
+ }
+ ListPool<int>.Release(frames);
+ }
+
+ void DrawFrameEvent(int frame)
+ {
+ List<AnimationEventBase> animEvents = ActionManager.animationData.GetAnimationEventsAtFrame(frame);
+ if (animEvents == null || animEvents.Count == 0)
+ return;
+ float y = m_GridY;
+ for (int i = 0; i < animEvents.Count; ++i)
+ {
+ var animEvent = animEvents[i];
+ if (animEvent == null)
+ continue;
+
+ Color bgColor = Color.black;
+ if(ActionManager.Settings != null)
+ {
+ bgColor = ActionManager.Settings.GetColor(animEvent.type.ToString());
+ }
+ Vector2 pos = new Vector2(kTimeLineViewXOffset + frame * kFrameWidth, y);
+ Rect frameRect = new Rect(pos.x, pos.y, kFrameWidth, kFrameHeight);
+ bool isSelect = ActionManager.animationEvent == animEvent;
+ Color prevColor = GUI.backgroundColor;
+ GUI.backgroundColor = bgColor;
+ bool frameSelect = GUI.Toggle(frameRect, isSelect, new GUIContent("", animEvent.Name), styles.keyFrameButton);
+ GUI.backgroundColor = prevColor;
+
+ Rect labelRect = new Rect(pos.x, pos.y + 2, kFrameWidth, kFrameHeight);
+ Color col = GUI.color;
+ GUI.color = Color.yellow;
+ GUI.Label(labelRect, animEvent.shortName, styles.textBoldSmall);
+ GUI.color = col;
+
+ if (!isSelect && frameSelect)
+ {
+ ActionManager.OnSelectAnimationEvent(animEvent);
+ }
+ y += kFrameHeight;
+ }
+ ListPool<AnimationEventBase>.Release(animEvents);
+ }
+
+ void GenericMenu_Event()
+ {
+ Event e = Event.current;
+ if (e.button != 1 || !e.isMouse || e.type != EventType.MouseDown)
+ return;
+
+ ActionData action = ActionManager.actionData;
+ int sampleCount = (int)Mathf.Ceil(action.totalFrame);
+ Vector2 position = Event.current.mousePosition;
+ Rect eventRegion = new Rect(kTimeLineViewXOffset, m_GridY, sampleCount * kFrameWidth, (ActionManager.MaxEventsPerFrame + 1) * kFrameHeight);
+ if (!eventRegion.Contains(position))
+ return;
+
+ Vector2 pos = new Vector2(position.x - eventRegion.x, position.y - eventRegion.y);
+ int frame = (int)(pos.x / kFrameWidth);
+
+ GenericMenu eventMenu = new GenericMenu();
+ foreach(var name in Enum.GetNames(typeof(TimelineEventProxy.EEventType)))
+ {
+ GUIContent item = null;
+ string shortName = name.Replace("Event", "");
+ int underscore = shortName.IndexOf('_');
+ if(underscore != -1)
+ {
+ string category = shortName.Substring(0, underscore);
+ shortName = shortName.Substring(underscore + 1, shortName.Length - underscore - 1);
+ item = new GUIContent("New Event/" + category + "/" + shortName);
+ }
+ else
+ {
+ item = new GUIContent("New Event/" + shortName);
+ }
+ EventParam param = new EventParam();
+ param.eventName = name;
+ param.frame = frame;
+ eventMenu.AddItem(item, false, ActionManager.AddNewEvent, param);
+ }
+ eventMenu.AddItem(new GUIContent("Copy"), false, null);
+ eventMenu.AddItem(new GUIContent("Paste"), false, ActionManager.PasteEvent, frame);
+ eventMenu.ShowAsContext();
+ }
+
+ }
+
+} \ No newline at end of file
diff --git a/Assets/Tools/ActionTool/Editor/ActionPreviewEditor.cs.meta b/Assets/Tools/ActionTool/Editor/ActionPreviewEditor.cs.meta
new file mode 100644
index 00000000..5b4ca315
--- /dev/null
+++ b/Assets/Tools/ActionTool/Editor/ActionPreviewEditor.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 309177f6ffca86847b5a989422c96fdc
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Tools/ActionTool/Editor/ActionRootMotionEditor.cs b/Assets/Tools/ActionTool/Editor/ActionRootMotionEditor.cs
new file mode 100644
index 00000000..eb076fc3
--- /dev/null
+++ b/Assets/Tools/ActionTool/Editor/ActionRootMotionEditor.cs
@@ -0,0 +1,121 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEditor;
+
+namespace ActionTool
+{
+ public class ActionRootMotionEditor : EditorWindow
+ {
+ ActionEditorStyles styles;
+
+ // isrecord的时候playbackFrame是整数
+ public static bool IsRecord { get; private set; }
+
+ const float kToolbarControlMargin = 5;
+ const float kToolbarHeight = 50;
+ const float kToolbarControlSize = kToolbarHeight - kToolbarControlMargin * 2;
+ float m_ToolbarOffset = 0; // <= 0
+
+ Texture m_UITextureRecord;
+ Texture m_UITextureTakeRecord;
+ Texture m_UITextureTrashCan;
+
+ Texture2D tex;
+
+ private void OnEnable()
+ {
+ maxSize = new Vector2(300, 90);
+ minSize = maxSize;
+ this.titleContent = new GUIContent("RootMotion Editor");
+
+ m_UITextureRecord = (Texture)Resources.Load("button_control_record");
+ m_UITextureTakeRecord = (Texture)Resources.Load("button_control_takerecord");
+ m_UITextureTrashCan = EditorGUIUtility.FindTexture("d_TreeEditor.Trash");
+
+ tex = new Texture2D(1, 1, TextureFormat.RGBA32, false);
+ tex.SetPixel(0, 0, new Color(1f, 0, 0) * 0.5f);
+ tex.Apply();
+
+ IsRecord = false;
+
+ ActionManager.gizmos.ShowRootMotionGizmos(true);
+ }
+
+ private void OnDisable()
+ {
+ IsRecord = false;
+
+ ActionManager.gizmos.ShowRootMotionGizmos(false);
+ }
+
+ private void Update()
+ {
+
+ }
+
+ private void OnGUI()
+ {
+ if(ActionManager.animationData == null || ActionManager.animationData.overrideRootMotion == false)
+ {
+ this.Close();
+ return;
+ }
+ if (IsRecord)
+ {
+ GUI.DrawTexture(new Rect(0, 0, maxSize.x, maxSize.y), tex, ScaleMode.StretchToFill);
+ }
+ float x = m_ToolbarOffset, y = kToolbarControlMargin;
+ GUI_Record(ref x, ref y);
+ GUI_TakeRecord(ref x, ref y);
+ GUI_Delete(ref x, ref y);
+ GUI.enabled = false;
+ EditorGUI.Vector3Field(new Rect(0, kToolbarHeight, position.width, 20), "Position: ", ActionManager.unitRoot.transform.position);
+ GUI.enabled = true;
+ }
+
+ void GUI_Record(ref float x, ref float y)
+ {
+ x += kToolbarControlMargin;
+ Rect rect = new Rect(x, y, kToolbarControlSize, kToolbarControlSize);
+ IsRecord = GUI.Toggle(rect, IsRecord, EditorGUIUtility.IconContent("d_Animation.Record", "Record"), GUI.skin.button);
+ x += kToolbarControlSize;
+ }
+
+ void GUI_TakeRecord(ref float x, ref float y)
+ {
+ if (!IsRecord)
+ GUI.enabled = false;
+ x += kToolbarControlMargin;
+ Rect rect = new Rect(x, y, kToolbarControlSize, kToolbarControlSize);
+ if (GUI.Button(rect, EditorGUIUtility.IconContent("Animation.AddKeyframe", "Key Frame")))
+ {
+ Vector3 pos = ActionManager.unitRoot.transform.position;
+ int frame = (int)ActionManager.actionData.curAnimFrame;
+ ActionManager.animationData.rootMotionOverrideData.SetPosition(frame, pos);
+ ActionManager.PreviewWindow.Repaint();
+ EditorWindow.GetWindow<SceneView>()?.Repaint();
+ SceneView.RepaintAll();
+ }
+ GUI.enabled = true;
+ x += kToolbarControlSize;
+ }
+
+ void GUI_Delete(ref float x, ref float y)
+ {
+ if (!IsRecord)
+ GUI.enabled = false;
+ x += kToolbarControlMargin;
+ Rect rect = new Rect(x, y, kToolbarControlSize, kToolbarControlSize);
+ if (GUI.Button(rect, m_UITextureTrashCan))
+ {
+ int frame = (int)ActionManager.actionData.curAnimFrame;
+ ActionManager.animationData.rootMotionOverrideData.RemovePositionAtFrame(frame);
+ ActionManager.PreviewWindow.Repaint();
+ }
+ GUI.enabled = true;
+ x += kToolbarControlSize;
+ }
+
+ }
+} \ No newline at end of file
diff --git a/Assets/Tools/ActionTool/Editor/ActionRootMotionEditor.cs.meta b/Assets/Tools/ActionTool/Editor/ActionRootMotionEditor.cs.meta
new file mode 100644
index 00000000..599c18ad
--- /dev/null
+++ b/Assets/Tools/ActionTool/Editor/ActionRootMotionEditor.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 2e61eeb773ddf2e478e01d9b6a5ab786
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Tools/ActionTool/Editor/ActionToolSettingsEditor.cs b/Assets/Tools/ActionTool/Editor/ActionToolSettingsEditor.cs
new file mode 100644
index 00000000..c35688dd
--- /dev/null
+++ b/Assets/Tools/ActionTool/Editor/ActionToolSettingsEditor.cs
@@ -0,0 +1,62 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEditor;
+using UnityEngine;
+
+[CustomEditor(typeof(ActionToolSettings))]
+public class ActionToolSettingsEditor : Editor
+{
+ ActionToolSettings setting;
+
+ public void OnEnable()
+ {
+ setting = target as ActionToolSettings;
+ }
+
+ public void OnDisable()
+ {
+
+ }
+
+ public override void OnInspectorGUI()
+ {
+ if (setting == null)
+ return;
+
+ //foreach(var col in setting.eventColors)
+ //{
+ // EditorGUILayout.BeginHorizontal();
+ // EditorGUILayout.LabelField(col.Key.ToString());
+ // Color c = EditorGUILayout.ColorField(col.Value);
+ // setting.eventColors[col.Key] = c;
+ // EditorGUILayout.EndHorizontal();
+ //}
+
+ EditorGUI.BeginChangeCheck();
+
+ foreach (var name in Enum.GetNames(typeof(TimelineEventProxy.EEventType)))
+ {
+ EditorGUILayout.BeginHorizontal();
+ EditorGUILayout.LabelField(name);
+ Color old = setting.eventNames.Contains(name) ? setting.eventColors[setting.eventNames.IndexOf(name)] : Color.black;
+ Color c = EditorGUILayout.ColorField(old);
+ if (!setting.eventNames.Contains(name))
+ {
+ setting.eventNames.Add(name);
+ setting.eventColors.Add(c);
+ }
+ setting.eventColors[setting.eventNames.IndexOf(name)] = c;
+ EditorGUILayout.EndHorizontal();
+ }
+
+ if(EditorGUI.EndChangeCheck())
+ {
+ EditorUtility.SetDirty(setting);
+ //AssetDatabase.SaveAssets();
+ //AssetDatabase.Refresh();
+ }
+ }
+
+}
+ \ No newline at end of file
diff --git a/Assets/Tools/ActionTool/Editor/ActionToolSettingsEditor.cs.meta b/Assets/Tools/ActionTool/Editor/ActionToolSettingsEditor.cs.meta
new file mode 100644
index 00000000..9e1702fd
--- /dev/null
+++ b/Assets/Tools/ActionTool/Editor/ActionToolSettingsEditor.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 2208059a63398d941a5613752569a003
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Tools/ActionTool/Editor/AnimationCurveEditor.cs b/Assets/Tools/ActionTool/Editor/AnimationCurveEditor.cs
new file mode 100644
index 00000000..b50fe884
--- /dev/null
+++ b/Assets/Tools/ActionTool/Editor/AnimationCurveEditor.cs
@@ -0,0 +1,54 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEditor;
+
+namespace ActionTool
+{
+
+ [CustomPropertyDrawer(typeof(CurveDictionary))]
+ public class CurveDictionaryDrawer : SerializableDictionaryPropertyDrawer { }
+
+ public class AnimationCurveEditor : EditorWindow
+ {
+
+ SerializedObject obj;
+
+ private void OnEnable()
+ {
+ titleContent = new GUIContent("Curves");
+ maxSize = new Vector2(300, 2000);
+ minSize = new Vector2(300, 200);
+ }
+
+ private void OnDisable()
+ {
+ }
+
+ private void Update()
+ {
+ }
+
+ private void OnGUI()
+ {
+ AnimationData animData = ActionManager.animationData;
+ if (animData == null)
+ {
+ this.Close();
+ return;
+ }
+
+ if (obj == null || obj.targetObject != animData)
+ {
+ obj = new SerializedObject(animData);
+ }
+
+ var curves = obj.FindProperty("curves");
+ EditorGUILayout.PropertyField(curves, true);
+ if (obj.ApplyModifiedProperties())
+ {
+ }
+ }
+ }
+
+}
diff --git a/Assets/Tools/ActionTool/Editor/AnimationCurveEditor.cs.meta b/Assets/Tools/ActionTool/Editor/AnimationCurveEditor.cs.meta
new file mode 100644
index 00000000..fb35d0db
--- /dev/null
+++ b/Assets/Tools/ActionTool/Editor/AnimationCurveEditor.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: e9fc645a569609847964fd93876b8d5d
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Tools/ActionTool/Editor/AnimationParameterEditor.cs b/Assets/Tools/ActionTool/Editor/AnimationParameterEditor.cs
new file mode 100644
index 00000000..a62ea4a1
--- /dev/null
+++ b/Assets/Tools/ActionTool/Editor/AnimationParameterEditor.cs
@@ -0,0 +1,54 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEditor;
+
+namespace ActionTool
+{
+
+ [CustomPropertyDrawer(typeof(ParameterDictionary))]
+ public class ParameterDictionaryDrawer : SerializableDictionaryPropertyDrawer { }
+
+ public class AnimationParameterEditor : EditorWindow
+ {
+
+ SerializedObject obj;
+
+ private void OnEnable()
+ {
+ titleContent = new GUIContent("Parameters");
+ minSize = new Vector2(300, 200);
+ maxSize = new Vector2(300, 2000);
+ }
+
+ private void OnDisable()
+ {
+ }
+
+ private void Update()
+ {
+ }
+
+ private void OnGUI()
+ {
+ AnimationData animData = ActionManager.animationData;
+ if (animData == null)
+ {
+ this.Close();
+ return;
+ }
+
+ if (obj == null || obj.targetObject != animData)
+ {
+ obj = new SerializedObject(animData);
+ }
+
+ var curves = obj.FindProperty("parameters");
+ EditorGUILayout.PropertyField(curves, true);
+ if (obj.ApplyModifiedProperties())
+ {
+ }
+ }
+ }
+
+}
diff --git a/Assets/Tools/ActionTool/Editor/AnimationParameterEditor.cs.meta b/Assets/Tools/ActionTool/Editor/AnimationParameterEditor.cs.meta
new file mode 100644
index 00000000..f0555041
--- /dev/null
+++ b/Assets/Tools/ActionTool/Editor/AnimationParameterEditor.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 4ffd18cdca7a4c2439cef0254dcf751a
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Tools/ActionTool/Editor/AnimationPropertyEditor.cs b/Assets/Tools/ActionTool/Editor/AnimationPropertyEditor.cs
new file mode 100644
index 00000000..59786bf9
--- /dev/null
+++ b/Assets/Tools/ActionTool/Editor/AnimationPropertyEditor.cs
@@ -0,0 +1,54 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEditor;
+
+namespace ActionTool
+{
+
+ [CustomPropertyDrawer(typeof(PropertyDictionary))]
+ public class PropertyDictionaryDrawer : SerializableDictionaryPropertyDrawer { }
+
+ public class AnimationPropertyEditor : EditorWindow
+ {
+
+ SerializedObject obj;
+
+ private void OnEnable()
+ {
+ titleContent = new GUIContent("Properties");
+ minSize = new Vector2(300, 200);
+ maxSize = new Vector2(300, 2000);
+ }
+
+ private void OnDisable()
+ {
+ }
+
+ private void Update()
+ {
+ }
+
+ private void OnGUI()
+ {
+ AnimationData animData = ActionManager.animationData;
+ if (animData == null)
+ {
+ this.Close();
+ return;
+ }
+
+ if (obj == null || obj.targetObject != animData)
+ {
+ obj = new SerializedObject(animData);
+ }
+
+ var curves = obj.FindProperty("properties");
+ EditorGUILayout.PropertyField(curves, true);
+ if (obj.ApplyModifiedProperties())
+ {
+ }
+ }
+ }
+
+}
diff --git a/Assets/Tools/ActionTool/Editor/AnimationPropertyEditor.cs.meta b/Assets/Tools/ActionTool/Editor/AnimationPropertyEditor.cs.meta
new file mode 100644
index 00000000..efdc8fad
--- /dev/null
+++ b/Assets/Tools/ActionTool/Editor/AnimationPropertyEditor.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: ac9aacf41a77d2d4b8dbda78defdf534
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Tools/ActionTool/Editor/AnimationToggleEditor.cs b/Assets/Tools/ActionTool/Editor/AnimationToggleEditor.cs
new file mode 100644
index 00000000..6b5cc57a
--- /dev/null
+++ b/Assets/Tools/ActionTool/Editor/AnimationToggleEditor.cs
@@ -0,0 +1,69 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEditor;
+
+namespace ActionTool
+{
+
+
+ [CustomPropertyDrawer(typeof(ToggleTimeDictionary))]
+ public class ToggleTimeDictionaryDrawer : SerializableDictionaryPropertyDrawer { }
+
+ public class AnimationToggleEditor : EditorWindow
+ {
+
+ SerializedObject obj;
+
+ private void OnEnable()
+ {
+ titleContent = new GUIContent("Toggles");
+ maxSize = new Vector2(300, 2000);
+ minSize = new Vector2(300, 200);
+ }
+
+ private void OnDisable()
+ {
+ }
+
+ private void Update()
+ {
+ }
+
+ private void OnGUI()
+ {
+ AnimationData animData = ActionManager.animationData;
+ if (animData == null)
+ {
+ this.Close();
+ return;
+ }
+
+ if (obj == null || obj.targetObject != animData)
+ {
+ obj = new SerializedObject(animData);
+ }
+
+ var toggles = obj.FindProperty("toggles");
+ EditorGUILayout.PropertyField(toggles, true);
+
+ if(obj.ApplyModifiedProperties())
+ {
+ if (animData.toggles != null && animData.toggles.Count > 0)
+ {
+ List<EAnimationToogle> keys = new List<EAnimationToogle>(animData.toggles.Keys);
+ for(int i = 0; i < keys.Count; ++i)
+ {
+ Vector2 minMax = animData.toggles[keys[i]].fromTo;
+ minMax.x = Mathf.Clamp(minMax.x, 0, 1);
+ minMax.y = Mathf.Clamp(minMax.y, 0, 1);
+ minMax.x = Mathf.Clamp(minMax.x, 0, minMax.y);
+ minMax.y = Mathf.Clamp(minMax.y, minMax.x, 1);
+ animData.toggles[keys[i]] = new FromTo(minMax);
+ }
+ }
+ }
+ }
+ }
+
+}
diff --git a/Assets/Tools/ActionTool/Editor/AnimationToggleEditor.cs.meta b/Assets/Tools/ActionTool/Editor/AnimationToggleEditor.cs.meta
new file mode 100644
index 00000000..2be25d40
--- /dev/null
+++ b/Assets/Tools/ActionTool/Editor/AnimationToggleEditor.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 11f79c8cc79fb9e449a43bf66fd1c8f0
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Tools/ActionTool/EmptyAction.anim b/Assets/Tools/ActionTool/EmptyAction.anim
new file mode 100644
index 00000000..31278db0
--- /dev/null
+++ b/Assets/Tools/ActionTool/EmptyAction.anim
@@ -0,0 +1,53 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!74 &7400000
+AnimationClip:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: EmptyAction
+ serializedVersion: 6
+ m_Legacy: 0
+ m_Compressed: 0
+ m_UseHighQualityCurve: 1
+ m_RotationCurves: []
+ m_CompressedRotationCurves: []
+ m_EulerCurves: []
+ m_PositionCurves: []
+ m_ScaleCurves: []
+ m_FloatCurves: []
+ m_PPtrCurves: []
+ m_SampleRate: 60
+ m_WrapMode: 0
+ m_Bounds:
+ m_Center: {x: 0, y: 0, z: 0}
+ m_Extent: {x: 0, y: 0, z: 0}
+ m_ClipBindingConstant:
+ genericBindings: []
+ pptrCurveMapping: []
+ m_AnimationClipSettings:
+ serializedVersion: 2
+ m_AdditiveReferencePoseClip: {fileID: 0}
+ m_AdditiveReferencePoseTime: 0
+ m_StartTime: 0
+ m_StopTime: 1
+ m_OrientationOffsetY: 0
+ m_Level: 0
+ m_CycleOffset: 0
+ m_HasAdditiveReferencePose: 0
+ m_LoopTime: 0
+ m_LoopBlend: 0
+ m_LoopBlendOrientation: 0
+ m_LoopBlendPositionY: 0
+ m_LoopBlendPositionXZ: 0
+ m_KeepOriginalOrientation: 0
+ m_KeepOriginalPositionY: 1
+ m_KeepOriginalPositionXZ: 0
+ m_HeightFromFeet: 0
+ m_Mirror: 0
+ m_EditorCurves: []
+ m_EulerEditorCurves: []
+ m_HasGenericRootTransform: 0
+ m_HasMotionFloatCurves: 0
+ m_Events: []
diff --git a/Assets/Tools/ActionTool/EmptyAction.anim.meta b/Assets/Tools/ActionTool/EmptyAction.anim.meta
new file mode 100644
index 00000000..5f3dcafb
--- /dev/null
+++ b/Assets/Tools/ActionTool/EmptyAction.anim.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: d1dee14942f17c745bb953c649ee14e5
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 7400000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Tools/ActionTool/Resources.meta b/Assets/Tools/ActionTool/Resources.meta
new file mode 100644
index 00000000..2cd01011
--- /dev/null
+++ b/Assets/Tools/ActionTool/Resources.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 015acdf54df3a4940b02e94f840bfd15
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Tools/ActionTool/Resources/blockbox.png b/Assets/Tools/ActionTool/Resources/blockbox.png
new file mode 100644
index 00000000..b2d8294b
--- /dev/null
+++ b/Assets/Tools/ActionTool/Resources/blockbox.png
Binary files differ
diff --git a/Assets/Tools/ActionTool/Resources/blockbox.png.meta b/Assets/Tools/ActionTool/Resources/blockbox.png.meta
new file mode 100644
index 00000000..f69399ad
--- /dev/null
+++ b/Assets/Tools/ActionTool/Resources/blockbox.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: eba969e46a302f1488a1db4ba3d8f6b0
+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/Assets/Tools/ActionTool/Resources/button_control_end.png b/Assets/Tools/ActionTool/Resources/button_control_end.png
new file mode 100644
index 00000000..426feda8
--- /dev/null
+++ b/Assets/Tools/ActionTool/Resources/button_control_end.png
Binary files differ
diff --git a/Assets/Tools/ActionTool/Resources/button_control_end.png.meta b/Assets/Tools/ActionTool/Resources/button_control_end.png.meta
new file mode 100644
index 00000000..26a51ffa
--- /dev/null
+++ b/Assets/Tools/ActionTool/Resources/button_control_end.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: a4ed7c73d13e5b5448f149105ff15c3d
+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/Assets/Tools/ActionTool/Resources/button_control_next.png b/Assets/Tools/ActionTool/Resources/button_control_next.png
new file mode 100644
index 00000000..1c43b4c8
--- /dev/null
+++ b/Assets/Tools/ActionTool/Resources/button_control_next.png
Binary files differ
diff --git a/Assets/Tools/ActionTool/Resources/button_control_next.png.meta b/Assets/Tools/ActionTool/Resources/button_control_next.png.meta
new file mode 100644
index 00000000..2b65589d
--- /dev/null
+++ b/Assets/Tools/ActionTool/Resources/button_control_next.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 1d4ab187561e6ea4b9d4fee06f7d5a48
+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/Assets/Tools/ActionTool/Resources/button_control_pause.png b/Assets/Tools/ActionTool/Resources/button_control_pause.png
new file mode 100644
index 00000000..97059cf1
--- /dev/null
+++ b/Assets/Tools/ActionTool/Resources/button_control_pause.png
Binary files differ
diff --git a/Assets/Tools/ActionTool/Resources/button_control_pause.png.meta b/Assets/Tools/ActionTool/Resources/button_control_pause.png.meta
new file mode 100644
index 00000000..2514a94b
--- /dev/null
+++ b/Assets/Tools/ActionTool/Resources/button_control_pause.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: c386341dc36bb7d41ad038b0a10043b3
+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/Assets/Tools/ActionTool/Resources/button_control_play.png b/Assets/Tools/ActionTool/Resources/button_control_play.png
new file mode 100644
index 00000000..51f9abb4
--- /dev/null
+++ b/Assets/Tools/ActionTool/Resources/button_control_play.png
Binary files differ
diff --git a/Assets/Tools/ActionTool/Resources/button_control_play.png.meta b/Assets/Tools/ActionTool/Resources/button_control_play.png.meta
new file mode 100644
index 00000000..aa73ba9e
--- /dev/null
+++ b/Assets/Tools/ActionTool/Resources/button_control_play.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 53a68ae2eee274342a83aa02ddc2632a
+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/Assets/Tools/ActionTool/Resources/button_control_previous.png b/Assets/Tools/ActionTool/Resources/button_control_previous.png
new file mode 100644
index 00000000..4d1e7d83
--- /dev/null
+++ b/Assets/Tools/ActionTool/Resources/button_control_previous.png
Binary files differ
diff --git a/Assets/Tools/ActionTool/Resources/button_control_previous.png.meta b/Assets/Tools/ActionTool/Resources/button_control_previous.png.meta
new file mode 100644
index 00000000..d96e4adb
--- /dev/null
+++ b/Assets/Tools/ActionTool/Resources/button_control_previous.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 21445802b33003a49bd49f17510211a7
+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/Assets/Tools/ActionTool/Resources/button_control_record.png b/Assets/Tools/ActionTool/Resources/button_control_record.png
new file mode 100644
index 00000000..320d1141
--- /dev/null
+++ b/Assets/Tools/ActionTool/Resources/button_control_record.png
Binary files differ
diff --git a/Assets/Tools/ActionTool/Resources/button_control_record.png.meta b/Assets/Tools/ActionTool/Resources/button_control_record.png.meta
new file mode 100644
index 00000000..96790b95
--- /dev/null
+++ b/Assets/Tools/ActionTool/Resources/button_control_record.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 5d711e656ba1b6c4686c131d61c1615d
+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/Assets/Tools/ActionTool/Resources/button_control_start.png b/Assets/Tools/ActionTool/Resources/button_control_start.png
new file mode 100644
index 00000000..c8e30e0a
--- /dev/null
+++ b/Assets/Tools/ActionTool/Resources/button_control_start.png
Binary files differ
diff --git a/Assets/Tools/ActionTool/Resources/button_control_start.png.meta b/Assets/Tools/ActionTool/Resources/button_control_start.png.meta
new file mode 100644
index 00000000..218aeb28
--- /dev/null
+++ b/Assets/Tools/ActionTool/Resources/button_control_start.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: fed6fba4d0846d646ba0bf441492c965
+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/Assets/Tools/ActionTool/Resources/button_control_stop.png b/Assets/Tools/ActionTool/Resources/button_control_stop.png
new file mode 100644
index 00000000..dc904407
--- /dev/null
+++ b/Assets/Tools/ActionTool/Resources/button_control_stop.png
Binary files differ
diff --git a/Assets/Tools/ActionTool/Resources/button_control_stop.png.meta b/Assets/Tools/ActionTool/Resources/button_control_stop.png.meta
new file mode 100644
index 00000000..040449ad
--- /dev/null
+++ b/Assets/Tools/ActionTool/Resources/button_control_stop.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 07d7025f0f3178e42acb8ca977fe301c
+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/Assets/Tools/ActionTool/Resources/button_control_takerecord.png b/Assets/Tools/ActionTool/Resources/button_control_takerecord.png
new file mode 100644
index 00000000..84e1c01e
--- /dev/null
+++ b/Assets/Tools/ActionTool/Resources/button_control_takerecord.png
Binary files differ
diff --git a/Assets/Tools/ActionTool/Resources/button_control_takerecord.png.meta b/Assets/Tools/ActionTool/Resources/button_control_takerecord.png.meta
new file mode 100644
index 00000000..3a109cf6
--- /dev/null
+++ b/Assets/Tools/ActionTool/Resources/button_control_takerecord.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: f956d171b82cd204a8a8e1069b900285
+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/Assets/Tools/ActionTool/Resources/defendbox.png b/Assets/Tools/ActionTool/Resources/defendbox.png
new file mode 100644
index 00000000..d07f602e
--- /dev/null
+++ b/Assets/Tools/ActionTool/Resources/defendbox.png
Binary files differ
diff --git a/Assets/Tools/ActionTool/Resources/defendbox.png.meta b/Assets/Tools/ActionTool/Resources/defendbox.png.meta
new file mode 100644
index 00000000..266c3cda
--- /dev/null
+++ b/Assets/Tools/ActionTool/Resources/defendbox.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: e22b481e2b96b334bb851db2d1c3230b
+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/Assets/Tools/ActionTool/Resources/hitbox.png b/Assets/Tools/ActionTool/Resources/hitbox.png
new file mode 100644
index 00000000..f31ecc4a
--- /dev/null
+++ b/Assets/Tools/ActionTool/Resources/hitbox.png
Binary files differ
diff --git a/Assets/Tools/ActionTool/Resources/hitbox.png.meta b/Assets/Tools/ActionTool/Resources/hitbox.png.meta
new file mode 100644
index 00000000..885d1cd5
--- /dev/null
+++ b/Assets/Tools/ActionTool/Resources/hitbox.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 0249926d1740dba4baa2b992bc88ccc6
+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/Assets/Tools/ActionTool/Resources/hurtbox.png b/Assets/Tools/ActionTool/Resources/hurtbox.png
new file mode 100644
index 00000000..e299a7a4
--- /dev/null
+++ b/Assets/Tools/ActionTool/Resources/hurtbox.png
Binary files differ
diff --git a/Assets/Tools/ActionTool/Resources/hurtbox.png.meta b/Assets/Tools/ActionTool/Resources/hurtbox.png.meta
new file mode 100644
index 00000000..ca357acf
--- /dev/null
+++ b/Assets/Tools/ActionTool/Resources/hurtbox.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 70e61f04435a7634d80f79c00ecf59b1
+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/Assets/Tools/ActionTool/Resources/savefile.png b/Assets/Tools/ActionTool/Resources/savefile.png
new file mode 100644
index 00000000..4ec11fe6
--- /dev/null
+++ b/Assets/Tools/ActionTool/Resources/savefile.png
Binary files differ
diff --git a/Assets/Tools/ActionTool/Resources/savefile.png.meta b/Assets/Tools/ActionTool/Resources/savefile.png.meta
new file mode 100644
index 00000000..50de496b
--- /dev/null
+++ b/Assets/Tools/ActionTool/Resources/savefile.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: eb4f19e4bb0ed1f40bd92086f3c3c8ed
+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/Assets/Tools/ActionTool/Resources/select_dark.png b/Assets/Tools/ActionTool/Resources/select_dark.png
new file mode 100644
index 00000000..0e2e5d1c
--- /dev/null
+++ b/Assets/Tools/ActionTool/Resources/select_dark.png
Binary files differ
diff --git a/Assets/Tools/ActionTool/Resources/select_dark.png.meta b/Assets/Tools/ActionTool/Resources/select_dark.png.meta
new file mode 100644
index 00000000..fe488367
--- /dev/null
+++ b/Assets/Tools/ActionTool/Resources/select_dark.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 02237789ccf5fb14991c17d178ecc63e
+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/Assets/Tools/ActionTool/Resources/select_white.png b/Assets/Tools/ActionTool/Resources/select_white.png
new file mode 100644
index 00000000..7f252f9b
--- /dev/null
+++ b/Assets/Tools/ActionTool/Resources/select_white.png
Binary files differ
diff --git a/Assets/Tools/ActionTool/Resources/select_white.png.meta b/Assets/Tools/ActionTool/Resources/select_white.png.meta
new file mode 100644
index 00000000..b5fcd79c
--- /dev/null
+++ b/Assets/Tools/ActionTool/Resources/select_white.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: 075f22766660e094cae3e5f2c82e5522
+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/Assets/Tools/ActionTool/Resources/throwbox.png b/Assets/Tools/ActionTool/Resources/throwbox.png
new file mode 100644
index 00000000..c0ef8467
--- /dev/null
+++ b/Assets/Tools/ActionTool/Resources/throwbox.png
Binary files differ
diff --git a/Assets/Tools/ActionTool/Resources/throwbox.png.meta b/Assets/Tools/ActionTool/Resources/throwbox.png.meta
new file mode 100644
index 00000000..91cc8560
--- /dev/null
+++ b/Assets/Tools/ActionTool/Resources/throwbox.png.meta
@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: aa2cd616a3c164e4fb96e377e007cad6
+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/Assets/Tools/ActionTool/controller_saionji.controller b/Assets/Tools/ActionTool/controller_saionji.controller
new file mode 100644
index 00000000..5f56091a
--- /dev/null
+++ b/Assets/Tools/ActionTool/controller_saionji.controller
@@ -0,0 +1,1325 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!91 &9100000
+AnimatorController:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: controller_saionji
+ serializedVersion: 5
+ m_AnimatorParameters:
+ - m_Name: IKLeftFootWeight 0
+ m_Type: 1
+ m_DefaultFloat: 1
+ m_DefaultInt: 0
+ m_DefaultBool: 0
+ m_Controller: {fileID: 9100000}
+ - m_Name: IKLeftFootWeight
+ m_Type: 1
+ m_DefaultFloat: 1
+ m_DefaultInt: 0
+ m_DefaultBool: 0
+ m_Controller: {fileID: 9100000}
+ m_AnimatorLayers:
+ - serializedVersion: 5
+ m_Name: Base Layer
+ m_StateMachine: {fileID: 1107698957351921346}
+ m_Mask: {fileID: 0}
+ m_Motions: []
+ m_Behaviours: []
+ m_BlendingMode: 0
+ m_SyncedLayerIndex: -1
+ m_DefaultWeight: 0
+ m_IKPass: 1
+ m_SyncedLayerAffectsTiming: 0
+ m_Controller: {fileID: 9100000}
+--- !u!1101 &1101229434579488466
+AnimatorStateTransition:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name:
+ m_Conditions: []
+ m_DstStateMachine: {fileID: 0}
+ m_DstState: {fileID: 1102309979317185156}
+ m_Solo: 0
+ m_Mute: 0
+ m_IsExit: 0
+ serializedVersion: 3
+ m_TransitionDuration: 0.25
+ m_TransitionOffset: 0
+ m_ExitTime: 0.37500006
+ m_HasExitTime: 1
+ m_HasFixedDuration: 1
+ m_InterruptionSource: 0
+ m_OrderedInterruption: 1
+ m_CanTransitionToSelf: 1
+--- !u!1101 &1101323483291444510
+AnimatorStateTransition:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name:
+ m_Conditions: []
+ m_DstStateMachine: {fileID: 0}
+ m_DstState: {fileID: 1102585244080078156}
+ m_Solo: 0
+ m_Mute: 0
+ m_IsExit: 0
+ serializedVersion: 3
+ m_TransitionDuration: 0.25
+ m_TransitionOffset: 0
+ m_ExitTime: 0
+ m_HasExitTime: 1
+ m_HasFixedDuration: 1
+ m_InterruptionSource: 0
+ m_OrderedInterruption: 1
+ m_CanTransitionToSelf: 1
+--- !u!1101 &1101459447246844138
+AnimatorStateTransition:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name:
+ m_Conditions: []
+ m_DstStateMachine: {fileID: 0}
+ m_DstState: {fileID: 1102851928622758184}
+ m_Solo: 0
+ m_Mute: 0
+ m_IsExit: 0
+ serializedVersion: 3
+ m_TransitionDuration: 0.25
+ m_TransitionOffset: 0
+ m_ExitTime: 0.5
+ m_HasExitTime: 1
+ m_HasFixedDuration: 1
+ m_InterruptionSource: 0
+ m_OrderedInterruption: 1
+ m_CanTransitionToSelf: 1
+--- !u!1101 &1101483437547713236
+AnimatorStateTransition:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name:
+ m_Conditions: []
+ m_DstStateMachine: {fileID: 0}
+ m_DstState: {fileID: 1102670870119357370}
+ m_Solo: 0
+ m_Mute: 0
+ m_IsExit: 0
+ serializedVersion: 3
+ m_TransitionDuration: 0.25
+ m_TransitionOffset: 0
+ m_ExitTime: 0.60526323
+ m_HasExitTime: 1
+ m_HasFixedDuration: 1
+ m_InterruptionSource: 0
+ m_OrderedInterruption: 1
+ m_CanTransitionToSelf: 1
+--- !u!1101 &1101635752784031000
+AnimatorStateTransition:
+ m_ObjectHideFlags: 3
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name:
+ m_Conditions: []
+ m_DstStateMachine: {fileID: 0}
+ m_DstState: {fileID: 0}
+ m_Solo: 0
+ m_Mute: 0
+ m_IsExit: 0
+ serializedVersion: 3
+ m_TransitionDuration: 0.25
+ m_TransitionOffset: 0
+ m_ExitTime: 0.5833334
+ m_HasExitTime: 1
+ m_HasFixedDuration: 1
+ m_InterruptionSource: 0
+ m_OrderedInterruption: 1
+ m_CanTransitionToSelf: 1
+--- !u!1101 &1101669889979635394
+AnimatorStateTransition:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name:
+ m_Conditions: []
+ m_DstStateMachine: {fileID: 0}
+ m_DstState: {fileID: 1102418584595668128}
+ m_Solo: 0
+ m_Mute: 0
+ m_IsExit: 0
+ serializedVersion: 3
+ m_TransitionDuration: 0.25
+ m_TransitionOffset: 0
+ m_ExitTime: 0.423077
+ m_HasExitTime: 1
+ m_HasFixedDuration: 1
+ m_InterruptionSource: 0
+ m_OrderedInterruption: 1
+ m_CanTransitionToSelf: 1
+--- !u!1101 &1101671307426216930
+AnimatorStateTransition:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name:
+ m_Conditions: []
+ m_DstStateMachine: {fileID: 0}
+ m_DstState: {fileID: 1102909890512155162}
+ m_Solo: 0
+ m_Mute: 0
+ m_IsExit: 0
+ serializedVersion: 3
+ m_TransitionDuration: 0.25
+ m_TransitionOffset: 0
+ m_ExitTime: 0.75
+ m_HasExitTime: 0
+ m_HasFixedDuration: 1
+ m_InterruptionSource: 0
+ m_OrderedInterruption: 1
+ m_CanTransitionToSelf: 0
+--- !u!1101 &1101724706014688858
+AnimatorStateTransition:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name:
+ m_Conditions: []
+ m_DstStateMachine: {fileID: 0}
+ m_DstState: {fileID: 1102443242601711970}
+ m_Solo: 0
+ m_Mute: 0
+ m_IsExit: 0
+ serializedVersion: 3
+ m_TransitionDuration: 0.25
+ m_TransitionOffset: 0
+ m_ExitTime: 0.53125
+ m_HasExitTime: 1
+ m_HasFixedDuration: 1
+ m_InterruptionSource: 0
+ m_OrderedInterruption: 1
+ m_CanTransitionToSelf: 1
+--- !u!1101 &1101768189696071060
+AnimatorStateTransition:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name:
+ m_Conditions: []
+ m_DstStateMachine: {fileID: 0}
+ m_DstState: {fileID: 1102614601320605736}
+ m_Solo: 0
+ m_Mute: 0
+ m_IsExit: 0
+ serializedVersion: 3
+ m_TransitionDuration: 0.25
+ m_TransitionOffset: 0
+ m_ExitTime: 0.40000004
+ m_HasExitTime: 1
+ m_HasFixedDuration: 1
+ m_InterruptionSource: 0
+ m_OrderedInterruption: 1
+ m_CanTransitionToSelf: 1
+--- !u!1101 &1101873771388640018
+AnimatorStateTransition:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name:
+ m_Conditions: []
+ m_DstStateMachine: {fileID: 0}
+ m_DstState: {fileID: 1102583623063077908}
+ m_Solo: 0
+ m_Mute: 0
+ m_IsExit: 0
+ serializedVersion: 3
+ m_TransitionDuration: 0.25
+ m_TransitionOffset: 0
+ m_ExitTime: 0
+ m_HasExitTime: 1
+ m_HasFixedDuration: 1
+ m_InterruptionSource: 0
+ m_OrderedInterruption: 1
+ m_CanTransitionToSelf: 1
+--- !u!1101 &1101893522945718628
+AnimatorStateTransition:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name:
+ m_Conditions: []
+ m_DstStateMachine: {fileID: 0}
+ m_DstState: {fileID: 1102026075718825746}
+ m_Solo: 0
+ m_Mute: 0
+ m_IsExit: 0
+ serializedVersion: 3
+ m_TransitionDuration: 0.25
+ m_TransitionOffset: 0
+ m_ExitTime: 0.91176474
+ m_HasExitTime: 1
+ m_HasFixedDuration: 1
+ m_InterruptionSource: 0
+ m_OrderedInterruption: 1
+ m_CanTransitionToSelf: 1
+--- !u!1101 &1101894081747749046
+AnimatorStateTransition:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name:
+ m_Conditions: []
+ m_DstStateMachine: {fileID: 0}
+ m_DstState: {fileID: 1102993691339548446}
+ m_Solo: 0
+ m_Mute: 0
+ m_IsExit: 0
+ serializedVersion: 3
+ m_TransitionDuration: 0.25
+ m_TransitionOffset: 0
+ m_ExitTime: 0
+ m_HasExitTime: 1
+ m_HasFixedDuration: 1
+ m_InterruptionSource: 0
+ m_OrderedInterruption: 1
+ m_CanTransitionToSelf: 1
+--- !u!1101 &1101942408465697848
+AnimatorStateTransition:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name:
+ m_Conditions: []
+ m_DstStateMachine: {fileID: 0}
+ m_DstState: {fileID: 1102302620783243694}
+ m_Solo: 0
+ m_Mute: 0
+ m_IsExit: 0
+ serializedVersion: 3
+ m_TransitionDuration: 0.25
+ m_TransitionOffset: 0
+ m_ExitTime: 0.5833334
+ m_HasExitTime: 1
+ m_HasFixedDuration: 1
+ m_InterruptionSource: 0
+ m_OrderedInterruption: 1
+ m_CanTransitionToSelf: 1
+--- !u!1101 &1101968240991320842
+AnimatorStateTransition:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name:
+ m_Conditions: []
+ m_DstStateMachine: {fileID: 0}
+ m_DstState: {fileID: 1102972139477331036}
+ m_Solo: 0
+ m_Mute: 0
+ m_IsExit: 0
+ serializedVersion: 3
+ m_TransitionDuration: 0.25
+ m_TransitionOffset: 0
+ m_ExitTime: 0.77272725
+ m_HasExitTime: 1
+ m_HasFixedDuration: 1
+ m_InterruptionSource: 0
+ m_OrderedInterruption: 1
+ m_CanTransitionToSelf: 1
+--- !u!1101 &1101996593866685694
+AnimatorStateTransition:
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name:
+ m_Conditions: []
+ m_DstStateMachine: {fileID: 0}
+ m_DstState: {fileID: 1102334577136909424}
+ m_Solo: 0
+ m_Mute: 0
+ m_IsExit: 0
+ serializedVersion: 3
+ m_TransitionDuration: 0.25
+ m_TransitionOffset: 0
+ m_ExitTime: 0.75
+ m_HasExitTime: 1
+ m_HasFixedDuration: 1
+ m_InterruptionSource: 0
+ m_OrderedInterruption: 1
+ m_CanTransitionToSelf: 1
+--- !u!1102 &1102025302705652370
+AnimatorState:
+ serializedVersion: 5
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: Heavy_Attk_Rush_Third
+ m_Speed: 1
+ m_CycleOffset: 0
+ m_Transitions: []
+ m_StateMachineBehaviours: []
+ m_Position: {x: 50, y: 50, z: 0}
+ m_IKOnFeet: 0
+ m_WriteDefaultValues: 1
+ m_Mirror: 0
+ m_SpeedParameterActive: 0
+ m_MirrorParameterActive: 0
+ m_CycleOffsetParameterActive: 0
+ m_TimeParameterActive: 0
+ m_Motion: {fileID: 7400000, guid: 9460ef336b8e98f4b91b036fce596058, type: 2}
+ m_Tag:
+ m_SpeedParameter:
+ m_MirrorParameter:
+ m_CycleOffsetParameter:
+ m_TimeParameter:
+--- !u!1102 &1102026075718825746
+AnimatorState:
+ serializedVersion: 5
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: Idle_Stand
+ m_Speed: 1
+ m_CycleOffset: 0
+ m_Transitions: []
+ m_StateMachineBehaviours: []
+ m_Position: {x: 50, y: 50, z: 0}
+ m_IKOnFeet: 0
+ m_WriteDefaultValues: 1
+ m_Mirror: 0
+ m_SpeedParameterActive: 0
+ m_MirrorParameterActive: 0
+ m_CycleOffsetParameterActive: 0
+ m_TimeParameterActive: 0
+ m_Motion: {fileID: 7400000, guid: 64ed261a016005342b0e4d613bb64861, type: 2}
+ m_Tag:
+ m_SpeedParameter:
+ m_MirrorParameter:
+ m_CycleOffsetParameter:
+ m_TimeParameter:
+--- !u!1102 &1102051101437624842
+AnimatorState:
+ serializedVersion: 5
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: Idle_Fight
+ m_Speed: 1
+ m_CycleOffset: 0
+ m_Transitions:
+ - {fileID: 1101996593866685694}
+ m_StateMachineBehaviours: []
+ m_Position: {x: 50, y: 50, z: 0}
+ m_IKOnFeet: 0
+ m_WriteDefaultValues: 1
+ m_Mirror: 0
+ m_SpeedParameterActive: 0
+ m_MirrorParameterActive: 0
+ m_CycleOffsetParameterActive: 0
+ m_TimeParameterActive: 0
+ m_Motion: {fileID: 7400000, guid: 5656b5a1f8ec93c40b45feab20055d27, type: 2}
+ m_Tag:
+ m_SpeedParameter:
+ m_MirrorParameter:
+ m_CycleOffsetParameter:
+ m_TimeParameter:
+--- !u!1102 &1102051115284091916
+AnimatorState:
+ serializedVersion: 5
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: Gun01
+ m_Speed: 2
+ m_CycleOffset: 0
+ m_Transitions:
+ - {fileID: 1101229434579488466}
+ m_StateMachineBehaviours: []
+ m_Position: {x: 50, y: 50, z: 0}
+ m_IKOnFeet: 0
+ m_WriteDefaultValues: 1
+ m_Mirror: 0
+ m_SpeedParameterActive: 0
+ m_MirrorParameterActive: 0
+ m_CycleOffsetParameterActive: 0
+ m_TimeParameterActive: 0
+ m_Motion: {fileID: 7400000, guid: 89f6415c4cded3546a350b1e2be53c23, type: 2}
+ m_Tag:
+ m_SpeedParameter:
+ m_MirrorParameter:
+ m_CycleOffsetParameter:
+ m_TimeParameter:
+--- !u!1102 &1102100386771471372
+AnimatorState:
+ serializedVersion: 5
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: Air_Attk_1
+ m_Speed: 2
+ m_CycleOffset: 0
+ m_Transitions: []
+ m_StateMachineBehaviours: []
+ m_Position: {x: 50, y: 50, z: 0}
+ m_IKOnFeet: 0
+ m_WriteDefaultValues: 1
+ m_Mirror: 0
+ m_SpeedParameterActive: 0
+ m_MirrorParameterActive: 0
+ m_CycleOffsetParameterActive: 0
+ m_TimeParameterActive: 0
+ m_Motion: {fileID: 7400000, guid: 7535e92962faa6d46b58efa431459d0e, type: 2}
+ m_Tag:
+ m_SpeedParameter:
+ m_MirrorParameter:
+ m_CycleOffsetParameter:
+ m_TimeParameter:
+--- !u!1102 &1102176878648179266
+AnimatorState:
+ serializedVersion: 5
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: SideKickRush
+ m_Speed: 5
+ m_CycleOffset: 0
+ m_Transitions: []
+ m_StateMachineBehaviours: []
+ m_Position: {x: 50, y: 50, z: 0}
+ m_IKOnFeet: 0
+ m_WriteDefaultValues: 1
+ m_Mirror: 0
+ m_SpeedParameterActive: 0
+ m_MirrorParameterActive: 0
+ m_CycleOffsetParameterActive: 0
+ m_TimeParameterActive: 0
+ m_Motion: {fileID: 7400000, guid: f8e4ee274100e904591f81253597306b, type: 2}
+ m_Tag:
+ m_SpeedParameter:
+ m_MirrorParameter:
+ m_CycleOffsetParameter:
+ m_TimeParameter:
+--- !u!1102 &1102257752900818606
+AnimatorState:
+ serializedVersion: 5
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: Jump_Down
+ m_Speed: 1
+ m_CycleOffset: 0
+ m_Transitions: []
+ m_StateMachineBehaviours: []
+ m_Position: {x: 50, y: 50, z: 0}
+ m_IKOnFeet: 0
+ m_WriteDefaultValues: 1
+ m_Mirror: 0
+ m_SpeedParameterActive: 0
+ m_MirrorParameterActive: 0
+ m_CycleOffsetParameterActive: 0
+ m_TimeParameterActive: 0
+ m_Motion: {fileID: 7400000, guid: 39f6fc67b80cd4d4ab30932e70e02311, type: 2}
+ m_Tag: IgnoreRootMotion
+ m_SpeedParameter:
+ m_MirrorParameter:
+ m_CycleOffsetParameter:
+ m_TimeParameter:
+--- !u!1102 &1102302620783243694
+AnimatorState:
+ serializedVersion: 5
+ m_ObjectHideFlags: 3
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: Run_Sword_Fast
+ m_Speed: 1
+ m_CycleOffset: 0
+ m_Transitions: []
+ m_StateMachineBehaviours: []
+ m_Position: {x: 50, y: 50, z: 0}
+ m_IKOnFeet: 0
+ m_WriteDefaultValues: 1
+ m_Mirror: 0
+ m_SpeedParameterActive: 0
+ m_MirrorParameterActive: 0
+ m_CycleOffsetParameterActive: 0
+ m_TimeParameterActive: 0
+ m_Motion: {fileID: 7400000, guid: 8fda35365c336c946b27f43e243818ca, type: 2}
+ m_Tag:
+ m_SpeedParameter:
+ m_MirrorParameter:
+ m_CycleOffsetParameter:
+ m_TimeParameter:
+--- !u!1102 &1102309979317185156
+AnimatorState:
+ serializedVersion: 5
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: Gun02
+ m_Speed: 2
+ m_CycleOffset: 0
+ m_Transitions:
+ - {fileID: 1101483437547713236}
+ m_StateMachineBehaviours: []
+ m_Position: {x: 50, y: 50, z: 0}
+ m_IKOnFeet: 0
+ m_WriteDefaultValues: 1
+ m_Mirror: 0
+ m_SpeedParameterActive: 0
+ m_MirrorParameterActive: 0
+ m_CycleOffsetParameterActive: 0
+ m_TimeParameterActive: 0
+ m_Motion: {fileID: 7400000, guid: 13920961a13e26f4fb8ac99b60216ab0, type: 2}
+ m_Tag:
+ m_SpeedParameter:
+ m_MirrorParameter:
+ m_CycleOffsetParameter:
+ m_TimeParameter:
+--- !u!1102 &1102334577136909424
+AnimatorState:
+ serializedVersion: 5
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: Idle_Gun
+ m_Speed: 1
+ m_CycleOffset: 0
+ m_Transitions:
+ - {fileID: 1101724706014688858}
+ m_StateMachineBehaviours: []
+ m_Position: {x: 50, y: 50, z: 0}
+ m_IKOnFeet: 0
+ m_WriteDefaultValues: 1
+ m_Mirror: 0
+ m_SpeedParameterActive: 0
+ m_MirrorParameterActive: 0
+ m_CycleOffsetParameterActive: 0
+ m_TimeParameterActive: 0
+ m_Motion: {fileID: 7400000, guid: 5a796fed61db5694b97de42b6081d3b6, type: 2}
+ m_Tag:
+ m_SpeedParameter:
+ m_MirrorParameter:
+ m_CycleOffsetParameter:
+ m_TimeParameter:
+--- !u!1102 &1102362351099156314
+AnimatorState:
+ serializedVersion: 5
+ m_ObjectHideFlags: 3
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: Light_Attk_1
+ m_Speed: 1
+ m_CycleOffset: 0
+ m_Transitions:
+ - {fileID: 1101873771388640018}
+ m_StateMachineBehaviours: []
+ m_Position: {x: 50, y: 50, z: 0}
+ m_IKOnFeet: 0
+ m_WriteDefaultValues: 1
+ m_Mirror: 0
+ m_SpeedParameterActive: 0
+ m_MirrorParameterActive: 0
+ m_CycleOffsetParameterActive: 0
+ m_TimeParameterActive: 0
+ m_Motion: {fileID: 7400000, guid: 048d052fc2ba7f94aa4a9bb0b434d96f, type: 2}
+ m_Tag:
+ m_SpeedParameter:
+ m_MirrorParameter:
+ m_CycleOffsetParameter:
+ m_TimeParameter:
+--- !u!1102 &1102372385840164320
+AnimatorState:
+ serializedVersion: 5
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: SuperKickCombo_
+ m_Speed: 1
+ m_CycleOffset: 0
+ m_Transitions: []
+ m_StateMachineBehaviours: []
+ m_Position: {x: 50, y: 50, z: 0}
+ m_IKOnFeet: 0
+ m_WriteDefaultValues: 1
+ m_Mirror: 0
+ m_SpeedParameterActive: 0
+ m_MirrorParameterActive: 0
+ m_CycleOffsetParameterActive: 0
+ m_TimeParameterActive: 0
+ m_Motion: {fileID: 7400000, guid: 5e844f35736130441ad254590a446aa7, type: 2}
+ m_Tag:
+ m_SpeedParameter:
+ m_MirrorParameter:
+ m_CycleOffsetParameter:
+ m_TimeParameter:
+--- !u!1102 &1102417002751357046
+AnimatorState:
+ serializedVersion: 5
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: Air_Dash
+ m_Speed: 4
+ m_CycleOffset: 0
+ m_Transitions: []
+ m_StateMachineBehaviours: []
+ m_Position: {x: 50, y: 50, z: 0}
+ m_IKOnFeet: 0
+ m_WriteDefaultValues: 1
+ m_Mirror: 0
+ m_SpeedParameterActive: 0
+ m_MirrorParameterActive: 0
+ m_CycleOffsetParameterActive: 0
+ m_TimeParameterActive: 0
+ m_Motion: {fileID: 7400000, guid: 049bfd403d73edb49bed4da44dbbbcad, type: 2}
+ m_Tag: IgnoreRootMotion
+ m_SpeedParameter:
+ m_MirrorParameter:
+ m_CycleOffsetParameter:
+ m_TimeParameter:
+--- !u!1102 &1102418584595668128
+AnimatorState:
+ serializedVersion: 5
+ m_ObjectHideFlags: 3
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: Light_Attk_4
+ m_Speed: 1
+ m_CycleOffset: 0
+ m_Transitions:
+ - {fileID: 1101768189696071060}
+ m_StateMachineBehaviours: []
+ m_Position: {x: 50, y: 50, z: 0}
+ m_IKOnFeet: 0
+ m_WriteDefaultValues: 1
+ m_Mirror: 0
+ m_SpeedParameterActive: 0
+ m_MirrorParameterActive: 0
+ m_CycleOffsetParameterActive: 0
+ m_TimeParameterActive: 0
+ m_Motion: {fileID: 7400000, guid: e63c50fd22505b9419124b6f08b75483, type: 2}
+ m_Tag:
+ m_SpeedParameter:
+ m_MirrorParameter:
+ m_CycleOffsetParameter:
+ m_TimeParameter: IKLeftFootWeight 0
+--- !u!1102 &1102443242601711970
+AnimatorState:
+ serializedVersion: 5
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: Idle_Fight2
+ m_Speed: 1
+ m_CycleOffset: 0
+ m_Transitions:
+ - {fileID: 1101968240991320842}
+ m_StateMachineBehaviours: []
+ m_Position: {x: 50, y: 50, z: 0}
+ m_IKOnFeet: 0
+ m_WriteDefaultValues: 1
+ m_Mirror: 0
+ m_SpeedParameterActive: 0
+ m_MirrorParameterActive: 0
+ m_CycleOffsetParameterActive: 0
+ m_TimeParameterActive: 0
+ m_Motion: {fileID: 7400000, guid: 0762372e81fa2414f814ff48e7a095db, type: 2}
+ m_Tag:
+ m_SpeedParameter:
+ m_MirrorParameter:
+ m_CycleOffsetParameter:
+ m_TimeParameter:
+--- !u!1102 &1102461443478983692
+AnimatorState:
+ serializedVersion: 5
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: SuperKickCombo
+ m_Speed: 1
+ m_CycleOffset: 0
+ m_Transitions: []
+ m_StateMachineBehaviours: []
+ m_Position: {x: 50, y: 50, z: 0}
+ m_IKOnFeet: 0
+ m_WriteDefaultValues: 1
+ m_Mirror: 0
+ m_SpeedParameterActive: 0
+ m_MirrorParameterActive: 0
+ m_CycleOffsetParameterActive: 0
+ m_TimeParameterActive: 0
+ m_Motion: {fileID: 7400000, guid: 97e147ac4ea1e8a42a19f888331ddd52, type: 2}
+ m_Tag:
+ m_SpeedParameter:
+ m_MirrorParameter:
+ m_CycleOffsetParameter:
+ m_TimeParameter:
+--- !u!1102 &1102480476022316750
+AnimatorState:
+ serializedVersion: 5
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: Jump_Up
+ m_Speed: 1
+ m_CycleOffset: 0
+ m_Transitions: []
+ m_StateMachineBehaviours: []
+ m_Position: {x: 50, y: 50, z: 0}
+ m_IKOnFeet: 0
+ m_WriteDefaultValues: 1
+ m_Mirror: 0
+ m_SpeedParameterActive: 0
+ m_MirrorParameterActive: 0
+ m_CycleOffsetParameterActive: 0
+ m_TimeParameterActive: 0
+ m_Motion: {fileID: 7400000, guid: acffb9284769cd445bb033b383d29a38, type: 2}
+ m_Tag: IgnoreRootMotion
+ m_SpeedParameter:
+ m_MirrorParameter:
+ m_CycleOffsetParameter:
+ m_TimeParameter:
+--- !u!1102 &1102512068243719986
+AnimatorState:
+ serializedVersion: 5
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: SideKick
+ m_Speed: 2
+ m_CycleOffset: 0
+ m_Transitions: []
+ m_StateMachineBehaviours: []
+ m_Position: {x: 50, y: 50, z: 0}
+ m_IKOnFeet: 0
+ m_WriteDefaultValues: 1
+ m_Mirror: 0
+ m_SpeedParameterActive: 0
+ m_MirrorParameterActive: 0
+ m_CycleOffsetParameterActive: 0
+ m_TimeParameterActive: 0
+ m_Motion: {fileID: 7400000, guid: bec1ede00e3e13b479620103fcdb8109, type: 2}
+ m_Tag:
+ m_SpeedParameter:
+ m_MirrorParameter:
+ m_CycleOffsetParameter:
+ m_TimeParameter:
+--- !u!1102 &1102527535141010876
+AnimatorState:
+ serializedVersion: 5
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: Heavy_Attk_Rush
+ m_Speed: 1
+ m_CycleOffset: 0
+ m_Transitions: []
+ m_StateMachineBehaviours: []
+ m_Position: {x: 50, y: 50, z: 0}
+ m_IKOnFeet: 0
+ m_WriteDefaultValues: 1
+ m_Mirror: 0
+ m_SpeedParameterActive: 0
+ m_MirrorParameterActive: 0
+ m_CycleOffsetParameterActive: 0
+ m_TimeParameterActive: 0
+ m_Motion: {fileID: 7400000, guid: d19e0b989494aa44bb87f1e624e4c0d2, type: 2}
+ m_Tag:
+ m_SpeedParameter:
+ m_MirrorParameter:
+ m_CycleOffsetParameter:
+ m_TimeParameter:
+--- !u!1102 &1102583623063077908
+AnimatorState:
+ serializedVersion: 5
+ m_ObjectHideFlags: 3
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: Light_Attk_2
+ m_Speed: 1
+ m_CycleOffset: 0
+ m_Transitions:
+ - {fileID: 1101894081747749046}
+ m_StateMachineBehaviours: []
+ m_Position: {x: 50, y: 50, z: 0}
+ m_IKOnFeet: 0
+ m_WriteDefaultValues: 1
+ m_Mirror: 0
+ m_SpeedParameterActive: 0
+ m_MirrorParameterActive: 0
+ m_CycleOffsetParameterActive: 0
+ m_TimeParameterActive: 0
+ m_Motion: {fileID: 7400000, guid: 2df95f6932fc7044aad6791cbfe7ea8e, type: 2}
+ m_Tag:
+ m_SpeedParameter:
+ m_MirrorParameter:
+ m_CycleOffsetParameter:
+ m_TimeParameter:
+--- !u!1102 &1102585244080078156
+AnimatorState:
+ serializedVersion: 5
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: Gun04
+ m_Speed: 2
+ m_CycleOffset: 0
+ m_Transitions: []
+ m_StateMachineBehaviours: []
+ m_Position: {x: 50, y: 50, z: 0}
+ m_IKOnFeet: 0
+ m_WriteDefaultValues: 1
+ m_Mirror: 0
+ m_SpeedParameterActive: 0
+ m_MirrorParameterActive: 0
+ m_CycleOffsetParameterActive: 0
+ m_TimeParameterActive: 0
+ m_Motion: {fileID: 7400000, guid: d1ce2b52444b8df4288b3863834ec93b, type: 2}
+ m_Tag:
+ m_SpeedParameter:
+ m_MirrorParameter:
+ m_CycleOffsetParameter:
+ m_TimeParameter:
+--- !u!1102 &1102614601320605736
+AnimatorState:
+ serializedVersion: 5
+ m_ObjectHideFlags: 3
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: Light_Attk_5
+ m_Speed: 1
+ m_CycleOffset: 0
+ m_Transitions: []
+ m_StateMachineBehaviours: []
+ m_Position: {x: 50, y: 50, z: 0}
+ m_IKOnFeet: 0
+ m_WriteDefaultValues: 1
+ m_Mirror: 0
+ m_SpeedParameterActive: 0
+ m_MirrorParameterActive: 0
+ m_CycleOffsetParameterActive: 0
+ m_TimeParameterActive: 0
+ m_Motion: {fileID: 7400000, guid: e796ba1cf934a074ba55241817c0716b, type: 2}
+ m_Tag:
+ m_SpeedParameter:
+ m_MirrorParameter:
+ m_CycleOffsetParameter:
+ m_TimeParameter:
+--- !u!1102 &1102622895062232894
+AnimatorState:
+ serializedVersion: 5
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: Idle_Assassin 0
+ m_Speed: 1
+ m_CycleOffset: 0
+ m_Transitions: []
+ m_StateMachineBehaviours: []
+ m_Position: {x: 50, y: 50, z: 0}
+ m_IKOnFeet: 0
+ m_WriteDefaultValues: 1
+ m_Mirror: 0
+ m_SpeedParameterActive: 0
+ m_MirrorParameterActive: 0
+ m_CycleOffsetParameterActive: 0
+ m_TimeParameterActive: 0
+ m_Motion: {fileID: 7400000, guid: 27ea7685715b39a459dbff91fcedb55f, type: 2}
+ m_Tag:
+ m_SpeedParameter:
+ m_MirrorParameter:
+ m_CycleOffsetParameter:
+ m_TimeParameter:
+--- !u!1102 &1102670870119357370
+AnimatorState:
+ serializedVersion: 5
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: Gun03
+ m_Speed: 2
+ m_CycleOffset: 0
+ m_Transitions:
+ - {fileID: 1101323483291444510}
+ m_StateMachineBehaviours: []
+ m_Position: {x: 50, y: 50, z: 0}
+ m_IKOnFeet: 0
+ m_WriteDefaultValues: 1
+ m_Mirror: 0
+ m_SpeedParameterActive: 0
+ m_MirrorParameterActive: 0
+ m_CycleOffsetParameterActive: 0
+ m_TimeParameterActive: 0
+ m_Motion: {fileID: 7400000, guid: 4c3056751e929664cae30503ee1b6b5f, type: 2}
+ m_Tag:
+ m_SpeedParameter:
+ m_MirrorParameter:
+ m_CycleOffsetParameter:
+ m_TimeParameter:
+--- !u!1102 &1102795313737927302
+AnimatorState:
+ serializedVersion: 5
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: Dash_With_Sword
+ m_Speed: 1
+ m_CycleOffset: 0
+ m_Transitions: []
+ m_StateMachineBehaviours: []
+ m_Position: {x: 50, y: 50, z: 0}
+ m_IKOnFeet: 0
+ m_WriteDefaultValues: 1
+ m_Mirror: 0
+ m_SpeedParameterActive: 0
+ m_MirrorParameterActive: 0
+ m_CycleOffsetParameterActive: 0
+ m_TimeParameterActive: 0
+ m_Motion: {fileID: 7400000, guid: 63a4add9b328ed744b5589920f24cf04, type: 2}
+ m_Tag:
+ m_SpeedParameter:
+ m_MirrorParameter:
+ m_CycleOffsetParameter:
+ m_TimeParameter:
+--- !u!1102 &1102845847658160196
+AnimatorState:
+ serializedVersion: 5
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: Light_Attk_Rush
+ m_Speed: 5
+ m_CycleOffset: 0
+ m_Transitions: []
+ m_StateMachineBehaviours: []
+ m_Position: {x: 50, y: 50, z: 0}
+ m_IKOnFeet: 0
+ m_WriteDefaultValues: 1
+ m_Mirror: 0
+ m_SpeedParameterActive: 0
+ m_MirrorParameterActive: 0
+ m_CycleOffsetParameterActive: 0
+ m_TimeParameterActive: 0
+ m_Motion: {fileID: 7400000, guid: c410c9a6013e04c448aca9e1f31e27a3, type: 2}
+ m_Tag:
+ m_SpeedParameter:
+ m_MirrorParameter:
+ m_CycleOffsetParameter:
+ m_TimeParameter:
+--- !u!1102 &1102851928622758184
+AnimatorState:
+ serializedVersion: 5
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: Run_Sword
+ m_Speed: 1
+ m_CycleOffset: 0
+ m_Transitions: []
+ m_StateMachineBehaviours: []
+ m_Position: {x: 50, y: 50, z: 0}
+ m_IKOnFeet: 0
+ m_WriteDefaultValues: 1
+ m_Mirror: 0
+ m_SpeedParameterActive: 0
+ m_MirrorParameterActive: 0
+ m_CycleOffsetParameterActive: 0
+ m_TimeParameterActive: 0
+ m_Motion: {fileID: 7400000, guid: bd21552bc9290324a8c1ad06dad0a6a8, type: 2}
+ m_Tag:
+ m_SpeedParameter:
+ m_MirrorParameter:
+ m_CycleOffsetParameter:
+ m_TimeParameter:
+--- !u!1102 &1102909890512155162
+AnimatorState:
+ serializedVersion: 5
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: Idle_Assassin
+ m_Speed: 1
+ m_CycleOffset: 0
+ m_Transitions: []
+ m_StateMachineBehaviours: []
+ m_Position: {x: 50, y: 50, z: 0}
+ m_IKOnFeet: 0
+ m_WriteDefaultValues: 1
+ m_Mirror: 0
+ m_SpeedParameterActive: 0
+ m_MirrorParameterActive: 0
+ m_CycleOffsetParameterActive: 0
+ m_TimeParameterActive: 0
+ m_Motion: {fileID: 7400000, guid: 43d8faa74c9d54f48a01db99d378e908, type: 2}
+ m_Tag:
+ m_SpeedParameter:
+ m_MirrorParameter:
+ m_CycleOffsetParameter:
+ m_TimeParameter:
+--- !u!1102 &1102919364685160606
+AnimatorState:
+ serializedVersion: 5
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: Jump_End
+ m_Speed: 1
+ m_CycleOffset: 0
+ m_Transitions: []
+ m_StateMachineBehaviours: []
+ m_Position: {x: 50, y: 50, z: 0}
+ m_IKOnFeet: 0
+ m_WriteDefaultValues: 1
+ m_Mirror: 0
+ m_SpeedParameterActive: 0
+ m_MirrorParameterActive: 0
+ m_CycleOffsetParameterActive: 0
+ m_TimeParameterActive: 0
+ m_Motion: {fileID: 7400000, guid: ce081b9dccbb4d9459a374d4cdb942a1, type: 2}
+ m_Tag: IgnoreRootMotion
+ m_SpeedParameter:
+ m_MirrorParameter:
+ m_CycleOffsetParameter:
+ m_TimeParameter:
+--- !u!1102 &1102949724758925328
+AnimatorState:
+ serializedVersion: 5
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: Jump_Start
+ m_Speed: 2
+ m_CycleOffset: 0
+ m_Transitions: []
+ m_StateMachineBehaviours: []
+ m_Position: {x: 50, y: 50, z: 0}
+ m_IKOnFeet: 0
+ m_WriteDefaultValues: 1
+ m_Mirror: 0
+ m_SpeedParameterActive: 0
+ m_MirrorParameterActive: 0
+ m_CycleOffsetParameterActive: 0
+ m_TimeParameterActive: 0
+ m_Motion: {fileID: 0}
+ m_Tag: IgnoreRootMotion
+ m_SpeedParameter:
+ m_MirrorParameter:
+ m_CycleOffsetParameter:
+ m_TimeParameter:
+--- !u!1102 &1102972139477331036
+AnimatorState:
+ serializedVersion: 5
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: Idle_Relax
+ m_Speed: 1
+ m_CycleOffset: 0
+ m_Transitions:
+ - {fileID: 1101893522945718628}
+ m_StateMachineBehaviours: []
+ m_Position: {x: 50, y: 50, z: 0}
+ m_IKOnFeet: 0
+ m_WriteDefaultValues: 1
+ m_Mirror: 0
+ m_SpeedParameterActive: 0
+ m_MirrorParameterActive: 0
+ m_CycleOffsetParameterActive: 0
+ m_TimeParameterActive: 0
+ m_Motion: {fileID: 7400000, guid: 6b5482be42db607429ae4acd23cf6e0a, type: 2}
+ m_Tag:
+ m_SpeedParameter:
+ m_MirrorParameter:
+ m_CycleOffsetParameter:
+ m_TimeParameter:
+--- !u!1102 &1102993691339548446
+AnimatorState:
+ serializedVersion: 5
+ m_ObjectHideFlags: 3
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: Light_Attk_3
+ m_Speed: 1
+ m_CycleOffset: 0
+ m_Transitions:
+ - {fileID: 1101669889979635394}
+ m_StateMachineBehaviours: []
+ m_Position: {x: 50, y: 50, z: 0}
+ m_IKOnFeet: 0
+ m_WriteDefaultValues: 1
+ m_Mirror: 0
+ m_SpeedParameterActive: 0
+ m_MirrorParameterActive: 0
+ m_CycleOffsetParameterActive: 0
+ m_TimeParameterActive: 0
+ m_Motion: {fileID: 7400000, guid: 2c0f86ff8c2df3d46af3e5be8da54d3f, type: 2}
+ m_Tag:
+ m_SpeedParameter:
+ m_MirrorParameter:
+ m_CycleOffsetParameter:
+ m_TimeParameter:
+--- !u!1107 &1107698957351921346
+AnimatorStateMachine:
+ serializedVersion: 5
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: Base Layer
+ m_ChildStates:
+ - serializedVersion: 1
+ m_State: {fileID: 1102909890512155162}
+ m_Position: {x: 228, y: -468, z: 0}
+ - serializedVersion: 1
+ m_State: {fileID: 1102851928622758184}
+ m_Position: {x: -468, y: 252, z: 0}
+ - serializedVersion: 1
+ m_State: {fileID: 1102302620783243694}
+ m_Position: {x: -468, y: 312, z: 0}
+ - serializedVersion: 1
+ m_State: {fileID: 1102362351099156314}
+ m_Position: {x: 636, y: 252, z: 0}
+ - serializedVersion: 1
+ m_State: {fileID: 1102583623063077908}
+ m_Position: {x: 636, y: 312, z: 0}
+ - serializedVersion: 1
+ m_State: {fileID: 1102993691339548446}
+ m_Position: {x: 636, y: 372, z: 0}
+ - serializedVersion: 1
+ m_State: {fileID: 1102418584595668128}
+ m_Position: {x: 636, y: 432, z: 0}
+ - serializedVersion: 1
+ m_State: {fileID: 1102614601320605736}
+ m_Position: {x: 636, y: 492, z: 0}
+ - serializedVersion: 1
+ m_State: {fileID: 1102051101437624842}
+ m_Position: {x: -252, y: 252, z: 0}
+ - serializedVersion: 1
+ m_State: {fileID: 1102512068243719986}
+ m_Position: {x: 1092, y: 252, z: 0}
+ - serializedVersion: 1
+ m_State: {fileID: 1102795313737927302}
+ m_Position: {x: -684, y: 252, z: 0}
+ - serializedVersion: 1
+ m_State: {fileID: 1102372385840164320}
+ m_Position: {x: 216, y: -624, z: 0}
+ - serializedVersion: 1
+ m_State: {fileID: 1102051115284091916}
+ m_Position: {x: 1776, y: 252, z: 0}
+ - serializedVersion: 1
+ m_State: {fileID: 1102309979317185156}
+ m_Position: {x: 1776, y: 312, z: 0}
+ - serializedVersion: 1
+ m_State: {fileID: 1102670870119357370}
+ m_Position: {x: 1776, y: 372, z: 0}
+ - serializedVersion: 1
+ m_State: {fileID: 1102585244080078156}
+ m_Position: {x: 1776, y: 432, z: 0}
+ - serializedVersion: 1
+ m_State: {fileID: 1102334577136909424}
+ m_Position: {x: -252, y: 372, z: 0}
+ - serializedVersion: 1
+ m_State: {fileID: 1102443242601711970}
+ m_Position: {x: -252, y: 432, z: 0}
+ - serializedVersion: 1
+ m_State: {fileID: 1102845847658160196}
+ m_Position: {x: 864, y: 252, z: 0}
+ - serializedVersion: 1
+ m_State: {fileID: 1102176878648179266}
+ m_Position: {x: 1548, y: 252, z: 0}
+ - serializedVersion: 1
+ m_State: {fileID: 1102257752900818606}
+ m_Position: {x: -912, y: 372, z: 0}
+ - serializedVersion: 1
+ m_State: {fileID: 1102919364685160606}
+ m_Position: {x: -912, y: 432, z: 0}
+ - serializedVersion: 1
+ m_State: {fileID: 1102949724758925328}
+ m_Position: {x: -912, y: 252, z: 0}
+ - serializedVersion: 1
+ m_State: {fileID: 1102480476022316750}
+ m_Position: {x: -912, y: 312, z: 0}
+ - serializedVersion: 1
+ m_State: {fileID: 1102527535141010876}
+ m_Position: {x: 2004, y: 252, z: 0}
+ - serializedVersion: 1
+ m_State: {fileID: 1102025302705652370}
+ m_Position: {x: 2232, y: 252, z: 0}
+ - serializedVersion: 1
+ m_State: {fileID: 1102417002751357046}
+ m_Position: {x: -1140, y: 252, z: 0}
+ - serializedVersion: 1
+ m_State: {fileID: 1102100386771471372}
+ m_Position: {x: 2460, y: 252, z: 0}
+ - serializedVersion: 1
+ m_State: {fileID: 1102972139477331036}
+ m_Position: {x: -252, y: 492, z: 0}
+ - serializedVersion: 1
+ m_State: {fileID: 1102026075718825746}
+ m_Position: {x: -252, y: 552, z: 0}
+ - serializedVersion: 1
+ m_State: {fileID: 1102461443478983692}
+ m_Position: {x: 1320, y: 312, z: 0}
+ - serializedVersion: 1
+ m_State: {fileID: 1102622895062232894}
+ m_Position: {x: 984, y: -192, z: 0}
+ m_ChildStateMachines: []
+ m_AnyStateTransitions:
+ - {fileID: 1101671307426216930}
+ m_EntryTransitions: []
+ m_StateMachineTransitions: {}
+ m_StateMachineBehaviours: []
+ m_AnyStatePosition: {x: -120, y: -192, z: 0}
+ m_EntryPosition: {x: -84, y: -468, z: 0}
+ m_ExitPosition: {x: 324, y: 252, z: 0}
+ m_ParentStateMachinePosition: {x: 800, y: 20, z: 0}
+ m_DefaultState: {fileID: 1102512068243719986}
diff --git a/Assets/Tools/ActionTool/controller_saionji.controller.meta b/Assets/Tools/ActionTool/controller_saionji.controller.meta
new file mode 100644
index 00000000..9062ca4f
--- /dev/null
+++ b/Assets/Tools/ActionTool/controller_saionji.controller.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 5da370e46758573408aca1d9109e3e05
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 9100000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Tools/ActionTool/controller_temp.controller b/Assets/Tools/ActionTool/controller_temp.controller
new file mode 100644
index 00000000..9f19a1ff
--- /dev/null
+++ b/Assets/Tools/ActionTool/controller_temp.controller
@@ -0,0 +1,72 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!91 &9100000
+AnimatorController:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: controller_temp
+ serializedVersion: 5
+ m_AnimatorParameters: []
+ m_AnimatorLayers:
+ - serializedVersion: 5
+ m_Name: Base Layer
+ m_StateMachine: {fileID: 1107408447404343750}
+ m_Mask: {fileID: 0}
+ m_Motions: []
+ m_Behaviours: []
+ m_BlendingMode: 0
+ m_SyncedLayerIndex: -1
+ m_DefaultWeight: 0
+ m_IKPass: 0
+ m_SyncedLayerAffectsTiming: 0
+ m_Controller: {fileID: 9100000}
+--- !u!1102 &1102670502805139912
+AnimatorState:
+ serializedVersion: 5
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: Action
+ m_Speed: 1
+ m_CycleOffset: 0
+ m_Transitions: []
+ m_StateMachineBehaviours: []
+ m_Position: {x: 50, y: 50, z: 0}
+ m_IKOnFeet: 0
+ m_WriteDefaultValues: 1
+ m_Mirror: 0
+ m_SpeedParameterActive: 0
+ m_MirrorParameterActive: 0
+ m_CycleOffsetParameterActive: 0
+ m_TimeParameterActive: 0
+ m_Motion: {fileID: 7400000, guid: d1dee14942f17c745bb953c649ee14e5, type: 2}
+ m_Tag:
+ m_SpeedParameter:
+ m_MirrorParameter:
+ m_CycleOffsetParameter:
+ m_TimeParameter:
+--- !u!1107 &1107408447404343750
+AnimatorStateMachine:
+ serializedVersion: 5
+ m_ObjectHideFlags: 1
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_Name: Base Layer
+ m_ChildStates:
+ - serializedVersion: 1
+ m_State: {fileID: 1102670502805139912}
+ m_Position: {x: 396, y: 108, z: 0}
+ m_ChildStateMachines: []
+ m_AnyStateTransitions: []
+ m_EntryTransitions: []
+ m_StateMachineTransitions: {}
+ m_StateMachineBehaviours: []
+ m_AnyStatePosition: {x: 50, y: 20, z: 0}
+ m_EntryPosition: {x: 50, y: 120, z: 0}
+ m_ExitPosition: {x: 800, y: 120, z: 0}
+ m_ParentStateMachinePosition: {x: 800, y: 20, z: 0}
+ m_DefaultState: {fileID: 1102670502805139912}
diff --git a/Assets/Tools/ActionTool/controller_temp.controller.meta b/Assets/Tools/ActionTool/controller_temp.controller.meta
new file mode 100644
index 00000000..787f92db
--- /dev/null
+++ b/Assets/Tools/ActionTool/controller_temp.controller.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 47311b4ae25969546aa7fca07ea0405a
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 9100000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Tools/Editor.meta b/Assets/Tools/Editor.meta
new file mode 100644
index 00000000..e67a8708
--- /dev/null
+++ b/Assets/Tools/Editor.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 052c0a9edd6e8de4db3d5021c47a3762
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Tools/Editor/EditorIcons.cs b/Assets/Tools/Editor/EditorIcons.cs
new file mode 100644
index 00000000..63fcb2fb
--- /dev/null
+++ b/Assets/Tools/Editor/EditorIcons.cs
@@ -0,0 +1,647 @@
+#if UNITY_EDITOR
+
+using UnityEngine;
+using UnityEditor;
+using System.Collections.Generic;
+using System.Linq;
+
+public class EditorIcons : EditorWindow
+{
+ [MenuItem("Tools/Editor Icons %e", priority = -1001)]
+ public static void EditorIconsOpen()
+ {
+ var w = GetWindow<EditorIcons>("Editor Icons");
+ w.ShowUtility();
+ w.minSize = new Vector2(320, 450);
+ }
+
+ static bool viewBigIcons = true;
+
+ static bool darkPreview = true;
+
+ Vector2 scroll;
+
+ int buttonSize = 70;
+
+ string search = "";
+
+ void SearchGUI()
+ {
+ using (new GUILayout.HorizontalScope())
+ {
+ if (isWide) GUILayout.Space(10);
+
+ search = EditorGUILayout.TextField(search);
+ if (GUILayout.Button(EditorGUIUtility.IconContent("winbtn_mac_close_h"), //SVN_DeletedLocal
+ EditorStyles.toolbarButton,
+ GUILayout.Width(22))
+ ) search = "";
+ }
+ }
+
+ bool isWide => Screen.width > 550;
+
+ bool doSearch => !string.IsNullOrWhiteSpace(search) && search != "";
+
+ GUIContent GetIcon(string icon_name)
+ {
+ GUIContent valid = null;
+ Debug.unityLogger.logEnabled = false;
+ if (!string.IsNullOrEmpty(icon_name)) valid = EditorGUIUtility.IconContent(icon_name);
+ Debug.unityLogger.logEnabled = true;
+ return valid?.image == null ? null : valid;
+ }
+
+ private void OnEnable()
+ {
+ //InitIcons();
+ //var all_icons = iconContentListAll.Select(x => x.tooltip).ToArray();
+ var all_icons = ico_list.Where(x => GetIcon(x) != null);
+ //List<string> found = new List<string>();
+ List<string> unique = new List<string>();
+ //var skip_flag = HideFlags.HideInInspector | HideFlags.HideAndDontSave;
+ //int unique_to_resources = 0, skipped_empty_str = 0, skipped_flags = 0,
+ // skipped_not_persistent = 0, skipped_nulls = 0, unique_to_list = 0;
+
+ foreach (Texture2D x in Resources.FindObjectsOfTypeAll<Texture2D>())
+ {
+ //if (string.IsNullOrEmpty(x.name)) skipped_empty_str++; // skipped 10 empty
+ //if (!EditorUtility.IsPersistent(x)) skipped_not_persistent++; // skipped 39 none persistent
+ //if (x.hideFlags != HideFlags.HideAndDontSave && x.hideFlags != skip_flag) skipped_flags++; // skipped 27 icons
+
+ GUIContent icoContent = GetIcon(x.name);
+ if (icoContent == null) continue; // skipped 14 icons
+ //{
+ // skipped_nulls++;
+ // continue;
+ //}
+
+ if (!all_icons.Contains(x.name))
+ {
+ //unique_to_resources++;
+ unique.Add(x.name);
+ }
+
+ //found.Add( x.name );
+ }
+
+ //foreach (var ico in all_icons) if (!found.Contains(ico)) unique_to_list++;
+
+ //Debug.Log( $"Resources skipped nulls={skipped_nulls} empty={skipped_empty_str} flags={skipped_flags}" );
+ //Debug.Log("Resources skipped_not_persistent=" + skipped_not_persistent);
+ //Debug.Log($"totals , list: {all_icons.Length} resource: {found.Count}");
+ //Debug.Log($"Unique list={ unique_to_list } resources={unique_to_resources}") ;
+
+ ico_list = ico_list.ToList().Concat(unique).ToArray();
+
+ // Static list icons count : 1315 ( unique = 749 )
+ // Found icons in resources : 1416 ( unique = 855 )
+
+ Resources.UnloadUnusedAssets();
+ System.GC.Collect();
+ }
+
+ private void OnGUI()
+ {
+ var ppp = EditorGUIUtility.pixelsPerPoint;
+
+ InitIcons();
+
+ if (!isWide) SearchGUI();
+
+ using (new GUILayout.HorizontalScope(EditorStyles.toolbar))
+ {
+ GUILayout.Label("Select what icons to show", GUILayout.Width(160));
+ viewBigIcons = GUILayout.SelectionGrid(
+ viewBigIcons ? 1 : 0, new string[] { "Small", "Big" },
+ 2, EditorStyles.toolbarButton) == 1;
+
+ if (isWide) SearchGUI();
+ }
+
+ if (isWide) GUILayout.Space(3);
+
+ using (var scope = new GUILayout.ScrollViewScope(scroll))
+ {
+ GUILayout.Space(10);
+
+ scroll = scope.scrollPosition;
+
+ buttonSize = viewBigIcons ? 70 : 40;
+
+ // scrollbar_width = ~ 12.5
+ var render_width = (Screen.width / ppp - 13f);
+ var gridW = Mathf.FloorToInt(render_width / buttonSize);
+ var margin_left = (render_width - buttonSize * gridW) / 2;
+
+ int row = 0, index = 0;
+
+ List<GUIContent> iconList;
+
+ if (doSearch) iconList = iconContentListAll.Where(x => x.tooltip.ToLower()
+ .Contains(search.ToLower())).ToList();
+ else iconList = viewBigIcons ? iconContentListBig : iconContentListSmall;
+
+ while (index < iconList.Count)
+ {
+ using (new GUILayout.HorizontalScope())
+ {
+ GUILayout.Space(margin_left);
+
+ for (var i = 0; i < gridW; ++i)
+ {
+ int k = i + row * gridW;
+
+ var icon = iconList[k];
+
+ if (GUILayout.Button(icon,
+ iconButtonStyle,
+ GUILayout.Width(buttonSize),
+ GUILayout.Height(buttonSize)))
+ {
+ EditorGUI.FocusTextInControl("");
+ iconSelected = icon;
+ }
+
+ index++;
+
+ if (index == iconList.Count) break;
+ }
+ }
+
+ row++;
+ }
+
+ GUILayout.Space(10);
+ }
+
+
+ if (iconSelected == null) return;
+
+ GUILayout.FlexibleSpace();
+
+ using (new GUILayout.HorizontalScope(EditorStyles.helpBox, GUILayout.MaxHeight(viewBigIcons ? 140 : 120)))
+ {
+ using (new GUILayout.VerticalScope(GUILayout.Width(130)))
+ {
+ GUILayout.Space(2);
+
+ GUILayout.Button(iconSelected,
+ darkPreview ? iconPreviewBlack : iconPreviewWhite,
+ GUILayout.Width(128), GUILayout.Height(viewBigIcons ? 128 : 40));
+
+ GUILayout.Space(5);
+
+ darkPreview = GUILayout.SelectionGrid(
+ darkPreview ? 1 : 0, new string[] { "Light", "Dark" },
+ 2, EditorStyles.miniButton) == 1;
+
+ GUILayout.FlexibleSpace();
+ }
+
+ GUILayout.Space(10);
+
+ using (new GUILayout.VerticalScope())
+ {
+ var s = $"Size: {iconSelected.image.width}x{iconSelected.image.height}";
+ s += "\nIs Pro Skin Icon: " + (iconSelected.tooltip.IndexOf("d_") == 0 ? "Yes" : "No");
+ s += $"\nTotal {iconContentListAll.Count} icons";
+ GUILayout.Space(5);
+ EditorGUILayout.HelpBox(s, MessageType.None);
+ GUILayout.Space(5);
+ EditorGUILayout.TextField("EditorGUIUtility.IconContent(\"" + iconSelected.tooltip + "\")");
+ GUILayout.Space(5);
+ if (GUILayout.Button("Copy to clipboard", EditorStyles.miniButton))
+ EditorGUIUtility.systemCopyBuffer = iconSelected.tooltip;
+ }
+
+ GUILayout.Space(10);
+
+ if (GUILayout.Button("X", GUILayout.ExpandHeight(true)))
+ {
+ iconSelected = null;
+ }
+
+ }
+ }
+
+ static GUIContent iconSelected;
+ static GUIStyle iconBtnStyle = null;
+ static List<GUIContent> iconContentListAll;
+ static List<GUIContent> iconContentListSmall;
+ static List<GUIContent> iconContentListBig;
+ static List<string> iconMissingNames;
+ static GUIStyle iconButtonStyle = null;
+ static GUIStyle iconPreviewBlack = null;
+ static GUIStyle iconPreviewWhite = null;
+
+ void AllTheTEXTURES(ref GUIStyle s, Texture2D t)
+ {
+ s.hover.background = s.onHover.background = s.focused.background = s.onFocused.background = s.active.background = s.onActive.background = s.normal.background = s.onNormal.background = t;
+ s.hover.scaledBackgrounds = s.onHover.scaledBackgrounds = s.focused.scaledBackgrounds = s.onFocused.scaledBackgrounds = s.active.scaledBackgrounds = s.onActive.scaledBackgrounds = s.normal.scaledBackgrounds = s.onNormal.scaledBackgrounds = new Texture2D[] { t };
+ }
+
+ Texture2D Texture2DPixel(Color c)
+ {
+ Texture2D t = new Texture2D(1, 1);
+ t.SetPixel(0, 0, c);
+ t.Apply();
+ return t;
+ }
+
+ void InitIcons()
+ {
+ if (iconContentListSmall != null) return;
+
+ iconButtonStyle = new GUIStyle(EditorStyles.miniButton);
+ iconButtonStyle.margin = new RectOffset(0, 0, 0, 0);
+ iconButtonStyle.fixedHeight = 0;
+
+ iconPreviewBlack = new GUIStyle(iconButtonStyle);
+ AllTheTEXTURES(ref iconPreviewBlack, Texture2DPixel(new Color(0.15f, 0.15f, 0.15f)));
+
+ iconPreviewWhite = new GUIStyle(iconButtonStyle);
+ AllTheTEXTURES(ref iconPreviewWhite, Texture2DPixel(new Color(0.85f, 0.85f, 0.85f)));
+
+ iconMissingNames = new List<string>();
+ iconContentListSmall = new List<GUIContent>();
+ iconContentListBig = new List<GUIContent>();
+ iconContentListAll = new List<GUIContent>();
+
+ for (var i = 0; i < ico_list.Length; ++i)
+ {
+ GUIContent ico = GetIcon(ico_list[i]);
+
+ if (ico == null)
+ {
+ iconMissingNames.Add(ico_list[i]);
+ continue;
+ }
+
+ ico.tooltip = ico_list[i];
+
+ iconContentListAll.Add(ico);
+
+ if (!(ico.image.width <= 36 || ico.image.height <= 36))
+ iconContentListBig.Add(ico);
+ else iconContentListSmall.Add(ico);
+ }
+ }
+
+ // https://gist.github.com/MattRix/c1f7840ae2419d8eb2ec0695448d4321
+ // https://unitylist.com/p/5c3/Unity-editor-icons
+
+ #region ICONS
+
+ public static string[] ico_list =
+ {
+ "_Help","_Popup","aboutwindow.mainheader","ageialogo","AlphabeticalSorting","Animation.AddEvent",
+ "Animation.AddKeyframe","Animation.EventMarker","Animation.FirstKey","Animation.LastKey",
+ "Animation.NextKey","Animation.Play","Animation.PrevKey","Animation.Record","Animation.SequencerLink",
+ "animationanimated","animationdopesheetkeyframe","animationkeyframe","animationnocurve",
+ "animationvisibilitytoggleoff","animationvisibilitytoggleon","AnimationWrapModeMenu","AssemblyLock",
+ "Asset Store","Audio Mixer","AvatarCompass","AvatarController.Layer","AvatarController.LayerHover",
+ "AvatarController.LayerSelected","BodyPartPicker","BodySilhouette","DotFill","DotFrame","DotFrameDotted",
+ "DotSelection","Head","HeadIk","HeadZoom","HeadZoomSilhouette","LeftArm","LeftFeetIk","LeftFingers",
+ "LeftFingersIk","LeftHandZoom","LeftHandZoomSilhouette","LeftLeg","MaskEditor_Root","RightArm","RightFeetIk",
+ "RightFingers","RightFingersIk","RightHandZoom","RightHandZoomSilhouette","RightLeg","Torso","AvatarPivot",
+ "back","back@2x","beginButton-On","beginButton","blendKey","blendKeyOverlay","blendKeySelected",
+ "blendSampler","blueGroove","BuildSettings.Android","BuildSettings.Android.Small","BuildSettings.Broadcom",
+ "BuildSettings.Editor","BuildSettings.Editor.Small","BuildSettings.Facebook",
+ "BuildSettings.Facebook.Small","BuildSettings.FlashPlayer","BuildSettings.FlashPlayer.Small",
+ "BuildSettings.iPhone","BuildSettings.iPhone.Small","BuildSettings.Lumin","BuildSettings.Lumin.small",
+ "BuildSettings.Metro","BuildSettings.Metro.Small","BuildSettings.N3DS","BuildSettings.N3DS.Small",
+ "BuildSettings.PS4","BuildSettings.PS4.Small","BuildSettings.PSM","BuildSettings.PSM.Small",
+ "BuildSettings.PSP2","BuildSettings.PSP2.Small","BuildSettings.SelectedIcon","BuildSettings.Standalone",
+ "BuildSettings.Standalone.Small","BuildSettings.StandaloneBroadcom.Small",
+ "BuildSettings.StandaloneGLES20Emu.Small","BuildSettings.StandaloneGLESEmu",
+ "BuildSettings.StandaloneGLESEmu.Small","BuildSettings.Switch","BuildSettings.Switch.Small",
+ "BuildSettings.tvOS","BuildSettings.tvOS.Small","BuildSettings.Web","BuildSettings.Web.Small",
+ "BuildSettings.WebGL","BuildSettings.WebGL.Small","BuildSettings.WP8","BuildSettings.WP8.Small",
+ "BuildSettings.Xbox360","BuildSettings.Xbox360.Small","BuildSettings.XboxOne",
+ "BuildSettings.XboxOne.Small","BuildSettings.Xiaomi","Camera Gizmo","CheckerFloor","Clipboard",
+ "ClothInspector.PaintTool","ClothInspector.PaintValue","ClothInspector.SelectTool",
+ "ClothInspector.SettingsTool","ClothInspector.ViewValue","CloudConnect","Collab.Build",
+ "Collab.BuildFailed","Collab.BuildSucceeded","Collab.FileAdded","Collab.FileConflict","Collab.FileDeleted",
+ "Collab.FileIgnored","Collab.FileMoved","Collab.FileUpdated","Collab.FolderAdded","Collab.FolderConflict",
+ "Collab.FolderDeleted","Collab.FolderIgnored","Collab.FolderMoved","Collab.FolderUpdated",
+ "Collab.NoInternet","Collab","Collab.Warning","CollabConflict","CollabError","CollabNew","CollabOffline",
+ "CollabProgress","CollabPull","CollabPush","ColorPicker.ColorCycle","ColorPicker.CycleColor",
+ "ColorPicker.CycleSlider","ColorPicker.SliderCycle","console.erroricon.inactive.sml","console.erroricon",
+ "console.erroricon.sml","console.infoicon","console.infoicon.sml","console.warnicon.inactive.sml",
+ "console.warnicon","console.warnicon.sml","curvekeyframe","curvekeyframeselected",
+ "curvekeyframeselectedoverlay","curvekeyframesemiselectedoverlay","curvekeyframeweighted","CustomSorting",
+ "d__Popup","d_aboutwindow.mainheader","d_ageialogo","d_AlphabeticalSorting","d_Animation.AddEvent",
+ "d_Animation.AddKeyframe","d_Animation.EventMarker","d_Animation.FirstKey","d_Animation.LastKey",
+ "d_Animation.NextKey","d_Animation.Play","d_Animation.PrevKey","d_Animation.Record",
+ "d_Animation.SequencerLink","d_animationanimated","d_animationkeyframe","d_animationnocurve",
+ "d_animationvisibilitytoggleoff","d_animationvisibilitytoggleon","d_AnimationWrapModeMenu",
+ "d_AS Badge Delete","d_AS Badge New","d_AssemblyLock","d_Asset Store","d_Audio Mixer",
+ "d_AvatarBlendBackground","d_AvatarBlendLeft","d_AvatarBlendLeftA","d_AvatarBlendRight",
+ "d_AvatarBlendRightA","d_AvatarCompass","d_AvatarPivot","d_back","d_back@2x","d_beginButton-On",
+ "d_beginButton","d_blueGroove","d_BuildSettings.Android","d_BuildSettings.Android.Small",
+ "d_BuildSettings.Broadcom","d_BuildSettings.FlashPlayer","d_BuildSettings.FlashPlayer.Small",
+ "d_BuildSettings.iPhone","d_BuildSettings.iPhone.Small","d_BuildSettings.Lumin",
+ "d_BuildSettings.Lumin.small","d_BuildSettings.PS4","d_BuildSettings.PS4.Small","d_BuildSettings.PSP2",
+ "d_BuildSettings.PSP2.Small","d_BuildSettings.SelectedIcon","d_BuildSettings.Standalone",
+ "d_BuildSettings.Standalone.Small","d_BuildSettings.tvOS","d_BuildSettings.tvOS.Small",
+ "d_BuildSettings.Web","d_BuildSettings.Web.Small","d_BuildSettings.WebGL","d_BuildSettings.WebGL.Small",
+ "d_BuildSettings.Xbox360","d_BuildSettings.Xbox360.Small","d_BuildSettings.XboxOne",
+ "d_BuildSettings.XboxOne.Small","d_CheckerFloor","d_CloudConnect","d_Collab.FileAdded",
+ "d_Collab.FileConflict","d_Collab.FileDeleted","d_Collab.FileIgnored","d_Collab.FileMoved",
+ "d_Collab.FileUpdated","d_Collab.FolderAdded","d_Collab.FolderConflict","d_Collab.FolderDeleted",
+ "d_Collab.FolderIgnored","d_Collab.FolderMoved","d_Collab.FolderUpdated","d_ColorPicker.CycleColor",
+ "d_ColorPicker.CycleSlider","d_console.erroricon","d_console.erroricon.sml","d_console.infoicon",
+ "d_console.infoicon.sml","d_console.warnicon","d_console.warnicon.sml","d_curvekeyframe",
+ "d_curvekeyframeselected","d_curvekeyframeselectedoverlay","d_curvekeyframesemiselectedoverlay",
+ "d_curvekeyframeweighted","d_CustomSorting","d_DefaultSorting","d_EditCollider","d_editcollision_16",
+ "d_editconstraints_16","d_editicon.sml","d_endButton-On","d_endButton","d_eyeDropper.Large",
+ "d_eyeDropper.sml","d_Favorite","d_FilterByLabel","d_FilterByType","d_FilterSelectedOnly",
+ "d_FilterSelectedOnly@2x","d_forward","d_forward@2x","d_GEAR","d_Groove","d_HorizontalSplit",
+ "d_icon dropdown","d_InspectorLock","d_JointAngularLimits","d_leftBracket","d_Lighting",
+ "d_LightmapEditor.WindowTitle","d_LookDevCenterLight","d_LookDevCenterLight@2x","d_LookDevClose",
+ "d_LookDevClose@2x","d_LookDevEnvRotation","d_LookDevEnvRotation@2x","d_LookDevMirrorViews",
+ "d_LookDevMirrorViews@2x","d_LookDevMirrorViewsActive","d_LookDevMirrorViewsActive@2x",
+ "d_LookDevMirrorViewsInactive","d_LookDevMirrorViewsInactive@2x","d_LookDevObjRotation",
+ "d_LookDevObjRotation@2x","d_LookDevPaneOption","d_LookDevPaneOption@2x","d_LookDevResetEnv",
+ "d_LookDevResetEnv@2x","d_LookDevShadow","d_LookDevShadow@2x","d_LookDevSideBySide",
+ "d_LookDevSideBySide@2x","d_LookDevSingle1","d_LookDevSingle1@2x","d_LookDevSingle2",
+ "d_LookDevSingle2@2x","d_LookDevSplit","d_LookDevSplit@2x","d_LookDevZone","d_LookDevZone@2x",
+ "d_Mirror","d_model large","d_monologo","d_MoveTool on","d_MoveTool","d_Navigation","d_Occlusion",
+ "d_P4_AddedLocal","d_P4_AddedRemote","d_P4_CheckOutLocal","d_P4_CheckOutRemote","d_P4_Conflicted",
+ "d_P4_DeletedLocal","d_P4_DeletedRemote","d_P4_Local","d_P4_LockedLocal","d_P4_LockedRemote",
+ "d_P4_OutOfSync","d_Particle Effect","d_PauseButton On","d_PauseButton","d_PlayButton On","d_PlayButton",
+ "d_PlayButtonProfile On","d_PlayButtonProfile","d_playLoopOff","d_playLoopOn","d_preAudioAutoPlayOff",
+ "d_preAudioAutoPlayOn","d_preAudioLoopOff","d_preAudioLoopOn","d_preAudioPlayOff","d_preAudioPlayOn",
+ "d_PreMatCube","d_PreMatCylinder","d_PreMatLight0","d_PreMatLight1","d_PreMatSphere","d_PreMatTorus",
+ "d_Preset.Context","d_PreTextureAlpha","d_PreTextureMipMapHigh","d_PreTextureMipMapLow","d_PreTextureRGB",
+ "d_Profiler.Audio","d_Profiler.CPU","d_Profiler.FirstFrame","d_Profiler.GPU","d_Profiler.LastFrame",
+ "d_Profiler.Memory","d_Profiler.Network","d_Profiler.NextFrame","d_Profiler.Physics","d_Profiler.PrevFrame",
+ "d_Profiler.Record","d_Profiler.Rendering","d_Profiler.Video","d_ProfilerColumn.WarningCount","d_Project",
+ "d_RectTool On","d_RectTool","d_RectTransformBlueprint","d_RectTransformRaw","d_redGroove","d_Refresh",
+ "d_renderdoc","d_rightBracket","d_RotateTool On","d_RotateTool","d_ScaleTool On","d_ScaleTool",
+ "d_SceneViewAlpha","d_SceneViewAudio","d_SceneViewFx","d_SceneViewLighting","d_SceneViewOrtho",
+ "d_SceneViewRGB","d_ScrollShadow","d_Settings","d_SettingsIcon","d_SocialNetworks.FacebookShare",
+ "d_SocialNetworks.LinkedInShare","d_SocialNetworks.Tweet","d_SocialNetworks.UDNOpen","d_SpeedScale",
+ "d_StepButton On","d_StepButton","d_StepLeftButton-On","d_StepLeftButton","d_SVN_AddedLocal",
+ "d_SVN_Conflicted","d_SVN_DeletedLocal","d_SVN_Local","d_SVN_LockedLocal","d_SVN_OutOfSync","d_tab_next",
+ "d_tab_next@2x","d_tab_prev","d_tab_prev@2x","d_TerrainInspector.TerrainToolLower On",
+ "d_TerrainInspector.TerrainToolLowerAlt","d_TerrainInspector.TerrainToolPlants On",
+ "d_TerrainInspector.TerrainToolPlants","d_TerrainInspector.TerrainToolPlantsAlt On",
+ "d_TerrainInspector.TerrainToolPlantsAlt","d_TerrainInspector.TerrainToolRaise On",
+ "d_TerrainInspector.TerrainToolRaise","d_TerrainInspector.TerrainToolSetheight On",
+ "d_TerrainInspector.TerrainToolSetheight","d_TerrainInspector.TerrainToolSetheightAlt On",
+ "d_TerrainInspector.TerrainToolSetheightAlt","d_TerrainInspector.TerrainToolSettings On",
+ "d_TerrainInspector.TerrainToolSettings","d_TerrainInspector.TerrainToolSmoothHeight On",
+ "d_TerrainInspector.TerrainToolSmoothHeight","d_TerrainInspector.TerrainToolSplat On",
+ "d_TerrainInspector.TerrainToolSplat","d_TerrainInspector.TerrainToolSplatAlt On",
+ "d_TerrainInspector.TerrainToolSplatAlt","d_TerrainInspector.TerrainToolTrees On",
+ "d_TerrainInspector.TerrainToolTrees","d_TerrainInspector.TerrainToolTreesAlt On",
+ "d_TerrainInspector.TerrainToolTreesAlt","d_TimelineDigIn","d_TimelineEditModeMixOFF",
+ "d_TimelineEditModeMixON","d_TimelineEditModeReplaceOFF","d_TimelineEditModeReplaceON",
+ "d_TimelineEditModeRippleOFF","d_TimelineEditModeRippleON","d_TimelineSelector","d_Toolbar Minus",
+ "d_Toolbar Plus More","d_Toolbar Plus","d_ToolHandleCenter","d_ToolHandleGlobal","d_ToolHandleLocal",
+ "d_ToolHandlePivot","d_tranp","d_TransformTool On","d_TransformTool","d_tree_icon","d_tree_icon_branch",
+ "d_tree_icon_branch_frond","d_tree_icon_frond","d_tree_icon_leaf","d_TreeEditor.AddBranches",
+ "d_TreeEditor.AddLeaves","d_TreeEditor.Branch On","d_TreeEditor.Branch","d_TreeEditor.BranchFreeHand On",
+ "d_TreeEditor.BranchFreeHand","d_TreeEditor.BranchRotate On","d_TreeEditor.BranchRotate",
+ "d_TreeEditor.BranchScale On","d_TreeEditor.BranchScale","d_TreeEditor.BranchTranslate On",
+ "d_TreeEditor.BranchTranslate","d_TreeEditor.Distribution On","d_TreeEditor.Distribution",
+ "d_TreeEditor.Duplicate","d_TreeEditor.Geometry On","d_TreeEditor.Geometry","d_TreeEditor.Leaf On",
+ "d_TreeEditor.Leaf","d_TreeEditor.LeafFreeHand On","d_TreeEditor.LeafFreeHand","d_TreeEditor.LeafRotate On",
+ "d_TreeEditor.LeafRotate","d_TreeEditor.LeafScale On","d_TreeEditor.LeafScale",
+ "d_TreeEditor.LeafTranslate On","d_TreeEditor.LeafTranslate","d_TreeEditor.Material On",
+ "d_TreeEditor.Material","d_TreeEditor.Refresh","d_TreeEditor.Trash","d_TreeEditor.Wind On",
+ "d_TreeEditor.Wind","d_UnityEditor.AnimationWindow","d_UnityEditor.ConsoleWindow",
+ "d_UnityEditor.DebugInspectorWindow","d_UnityEditor.FindDependencies","d_UnityEditor.GameView",
+ "d_UnityEditor.HierarchyWindow","d_UnityEditor.InspectorWindow","d_UnityEditor.LookDevView",
+ "d_UnityEditor.ProfilerWindow","d_UnityEditor.SceneHierarchyWindow","d_UnityEditor.SceneView",
+ "d_UnityEditor.Timeline.TimelineWindow","d_UnityEditor.VersionControl","d_UnityLogo","d_VerticalSplit",
+ "d_ViewToolMove On","d_ViewToolMove","d_ViewToolOrbit On","d_ViewToolOrbit","d_ViewToolZoom On",
+ "d_ViewToolZoom","d_VisibilityOff","d_VisibilityOn","d_VUMeterTextureHorizontal","d_VUMeterTextureVertical",
+ "d_WaitSpin00","d_WaitSpin01","d_WaitSpin02","d_WaitSpin03","d_WaitSpin04","d_WaitSpin05","d_WaitSpin06",
+ "d_WaitSpin07","d_WaitSpin08","d_WaitSpin09","d_WaitSpin10","d_WaitSpin11","d_WelcomeScreen.AssetStoreLogo",
+ "d_winbtn_graph","d_winbtn_graph_close_h","d_winbtn_graph_max_h","d_winbtn_graph_min_h",
+ "d_winbtn_mac_close","d_winbtn_mac_close_a","d_winbtn_mac_close_h","d_winbtn_mac_inact","d_winbtn_mac_max",
+ "d_winbtn_mac_max_a","d_winbtn_mac_max_h","d_winbtn_mac_min","d_winbtn_mac_min_a","d_winbtn_mac_min_h",
+ "d_winbtn_win_close","d_winbtn_win_close_a","d_winbtn_win_close_h","d_winbtn_win_max","d_winbtn_win_max_a",
+ "d_winbtn_win_max_h","d_winbtn_win_min","d_winbtn_win_min_a","d_winbtn_win_min_h","d_winbtn_win_rest",
+ "d_winbtn_win_rest_a","d_winbtn_win_rest_h","DefaultSorting","EditCollider","editcollision_16",
+ "editconstraints_16","editicon.sml","endButton-On","endButton","eyeDropper.Large","eyeDropper.sml",
+ "Favorite","FilterByLabel","FilterByType","FilterSelectedOnly","FilterSelectedOnly@2x","forward",
+ "forward@2x","GEAR","Grid.BoxTool","Grid.Default","Grid.EraserTool","Grid.FillTool","Grid.MoveTool",
+ "Grid.PaintTool","Grid.PickingTool","Grid.SelectTool","Groove","align_horizontally",
+ "align_horizontally_center","align_horizontally_center_active","align_horizontally_left",
+ "align_horizontally_left_active","align_horizontally_right","align_horizontally_right_active",
+ "align_vertically","align_vertically_bottom","align_vertically_bottom_active","align_vertically_center",
+ "align_vertically_center_active","align_vertically_top","align_vertically_top_active",
+ "d_align_horizontally","d_align_horizontally_center","d_align_horizontally_center_active",
+ "d_align_horizontally_left","d_align_horizontally_left_active","d_align_horizontally_right",
+ "d_align_horizontally_right_active","d_align_vertically","d_align_vertically_bottom",
+ "d_align_vertically_bottom_active","d_align_vertically_center","d_align_vertically_center_active",
+ "d_align_vertically_top","d_align_vertically_top_active","HorizontalSplit","icon dropdown",
+ "InspectorLock","JointAngularLimits","KnobCShape","KnobCShapeMini","leftBracket","Lighting",
+ "LightmapEditor.WindowTitle","Lightmapping","d_greenLight","d_lightOff","d_lightRim","d_orangeLight",
+ "d_redLight","greenLight","lightOff","lightRim","orangeLight","redLight","LockIcon-On","LockIcon",
+ "LookDevCenterLight","LookDevCenterLightl@2x","LookDevClose","LookDevClose@2x","LookDevEnvRotation",
+ "LookDevEnvRotation@2x","LookDevEyedrop","LookDevLight","LookDevLight@2x","LookDevMirrorViewsActive",
+ "LookDevMirrorViewsActive@2x","LookDevMirrorViewsInactive","LookDevMirrorViewsInactive@2x",
+ "LookDevObjRotation","LookDevObjRotation@2x","LookDevPaneOption","LookDevPaneOption@2x","LookDevResetEnv",
+ "LookDevResetEnv@2x","LookDevShadow","LookDevShadow@2x","LookDevShadowFrame","LookDevShadowFrame@2x",
+ "LookDevSideBySide","LookDevSideBySide@2x","LookDevSingle1","LookDevSingle1@2x","LookDevSingle2",
+ "LookDevSingle2@2x","LookDevSplit","LookDevSplit@2x","LookDevZone","LookDevZone@2x","loop","Mirror",
+ "monologo","MoveTool on","MoveTool","Navigation","Occlusion","P4_AddedLocal","P4_AddedRemote",
+ "P4_BlueLeftParenthesis","P4_BlueRightParenthesis","P4_CheckOutLocal","P4_CheckOutRemote","P4_Conflicted",
+ "P4_DeletedLocal","P4_DeletedRemote","P4_Local","P4_LockedLocal","P4_LockedRemote","P4_OutOfSync",
+ "P4_RedLeftParenthesis","P4_RedRightParenthesis","P4_Updating","PackageBadgeDelete","PackageBadgeNew",
+ "Particle Effect","PauseButton On","PauseButton","PlayButton On","PlayButton","PlayButtonProfile On",
+ "PlayButtonProfile","playLoopOff","playLoopOn","playSpeed","preAudioAutoPlayOff","preAudioAutoPlayOn",
+ "preAudioLoopOff","preAudioLoopOn","preAudioPlayOff","preAudioPlayOn","PreMatCube","PreMatCylinder",
+ "PreMatLight0","PreMatLight1","PreMatQuad","PreMatSphere","PreMatTorus","Preset.Context","PreTextureAlpha",
+ "PreTextureArrayFirstSlice","PreTextureArrayLastSlice","PreTextureMipMapHigh","PreTextureMipMapLow",
+ "PreTextureRGB","AreaLight Gizmo","AreaLight Icon","Assembly Icon","AssetStore Icon","AudioMixerView Icon",
+ "AudioSource Gizmo","Camera Gizmo","CGProgram Icon","ChorusFilter Icon","CollabChanges Icon",
+ "CollabChangesConflict Icon","CollabChangesDeleted Icon","CollabConflict Icon","CollabCreate Icon",
+ "CollabDeleted Icon","CollabEdit Icon","CollabExclude Icon","CollabMoved Icon","cs Script Icon",
+ "d_AudioMixerView Icon","d_CollabChanges Icon","d_CollabChangesConflict Icon","d_CollabChangesDeleted Icon",
+ "d_CollabConflict Icon","d_CollabCreate Icon","d_CollabDeleted Icon","d_CollabEdit Icon",
+ "d_CollabExclude Icon","d_CollabMoved Icon","d_GridLayoutGroup Icon","d_HorizontalLayoutGroup Icon",
+ "d_Prefab Icon","d_PrefabModel Icon","d_PrefabVariant Icon","d_VerticalLayoutGroup Icon",
+ "DefaultSlate Icon","DirectionalLight Gizmo","DirectionalLight Icon","DiscLight Gizmo","DiscLight Icon",
+ "dll Script Icon","EchoFilter Icon","Favorite Icon","Folder Icon","FolderEmpty Icon",
+ "FolderFavorite Icon","GameManager Icon","GridBrush Icon","HighPassFilter Icon",
+ "HorizontalLayoutGroup Icon","LensFlare Gizmo","LightingDataAssetParent Icon","LightProbeGroup Gizmo",
+ "LightProbeProxyVolume Gizmo","LowPassFilter Icon","Main Light Gizmo","MetaFile Icon",
+ "Microphone Icon","MuscleClip Icon","ParticleSystem Gizmo","PointLight Gizmo","Prefab Icon",
+ "PrefabModel Icon","PrefabOverlayAdded Icon","PrefabOverlayModified Icon","PrefabOverlayRemoved Icon",
+ "PrefabVariant Icon","Projector Gizmo","RaycastCollider Icon","ReflectionProbe Gizmo",
+ "ReverbFilter Icon","SceneSet Icon","Search Icon","SoftlockProjectBrowser Icon","SpeedTreeModel Icon",
+ "SpotLight Gizmo","Spotlight Icon","SpriteCollider Icon","sv_icon_dot0_pix16_gizmo",
+ "sv_icon_dot10_pix16_gizmo","sv_icon_dot11_pix16_gizmo","sv_icon_dot12_pix16_gizmo",
+ "sv_icon_dot13_pix16_gizmo","sv_icon_dot14_pix16_gizmo","sv_icon_dot15_pix16_gizmo",
+ "sv_icon_dot1_pix16_gizmo","sv_icon_dot2_pix16_gizmo","sv_icon_dot3_pix16_gizmo",
+ "sv_icon_dot4_pix16_gizmo","sv_icon_dot5_pix16_gizmo","sv_icon_dot6_pix16_gizmo",
+ "sv_icon_dot7_pix16_gizmo","sv_icon_dot8_pix16_gizmo","sv_icon_dot9_pix16_gizmo",
+ "AnimatorController Icon","AnimatorState Icon","AnimatorStateMachine Icon",
+ "AnimatorStateTransition Icon","BlendTree Icon","AnimationWindowEvent Icon","AudioMixerController Icon",
+ "DefaultAsset Icon","EditorSettings Icon","AnyStateNode Icon","HumanTemplate Icon",
+ "LightingDataAsset Icon","LightmapParameters Icon","Preset Icon","SceneAsset Icon",
+ "SubstanceArchive Icon","AssemblyDefinitionAsset Icon","NavMeshAgent Icon","NavMeshData Icon",
+ "NavMeshObstacle Icon","OffMeshLink Icon","AnalyticsTracker Icon","Animation Icon",
+ "AnimationClip Icon","AimConstraint Icon","d_AimConstraint Icon","d_LookAtConstraint Icon",
+ "d_ParentConstraint Icon","d_PositionConstraint Icon","d_RotationConstraint Icon",
+ "d_ScaleConstraint Icon","LookAtConstraint Icon","ParentConstraint Icon","PositionConstraint Icon",
+ "RotationConstraint Icon","ScaleConstraint Icon","Animator Icon","AnimatorOverrideController Icon",
+ "AreaEffector2D Icon","AudioMixerGroup Icon","AudioMixerSnapshot Icon","AudioSpatializerMicrosoft Icon",
+ "AudioChorusFilter Icon","AudioClip Icon","AudioDistortionFilter Icon","AudioEchoFilter Icon",
+ "AudioHighPassFilter Icon","AudioListener Icon","AudioLowPassFilter Icon","AudioReverbFilter Icon",
+ "AudioReverbZone Icon","AudioSource Icon","Avatar Icon","AvatarMask Icon","BillboardAsset Icon",
+ "BillboardRenderer Icon","BoxCollider Icon","BoxCollider2D Icon","BuoyancyEffector2D Icon","Camera Icon",
+ "Canvas Icon","CanvasGroup Icon","CanvasRenderer Icon","CapsuleCollider Icon","CapsuleCollider2D Icon",
+ "CharacterController Icon","CharacterJoint Icon","CircleCollider2D Icon","Cloth Icon",
+ "CompositeCollider2D Icon","ComputeShader Icon","ConfigurableJoint Icon","ConstantForce Icon",
+ "ConstantForce2D Icon","Cubemap Icon","d_Canvas Icon","d_CanvasGroup Icon","d_CanvasRenderer Icon",
+ "d_GameObject Icon","d_LightProbeProxyVolume Icon","d_ParticleSystem Icon","d_ParticleSystemForceField Icon",
+ "d_RectTransform Icon","d_StreamingController Icon","DistanceJoint2D Icon","EdgeCollider2D Icon",
+ "d_EventSystem Icon","d_EventTrigger Icon","d_Physics2DRaycaster Icon","d_PhysicsRaycaster Icon",
+ "d_StandaloneInputModule Icon","d_TouchInputModule Icon","EventSystem Icon","EventTrigger Icon",
+ "HoloLensInputModule Icon","Physics2DRaycaster Icon","PhysicsRaycaster Icon","StandaloneInputModule Icon",
+ "TouchInputModule Icon","SpriteShapeRenderer Icon","VisualTreeAsset Icon","d_VisualEffect Icon",
+ "d_VisualEffectAsset Icon","VisualEffect Icon","VisualEffectAsset Icon","FixedJoint Icon",
+ "FixedJoint2D Icon","Flare Icon","FlareLayer Icon","Font Icon","FrictionJoint2D Icon",
+ "GameObject Icon","Grid Icon","GUILayer Icon","GUISkin Icon","GUIText Icon","GUITexture Icon",
+ "Halo Icon","HingeJoint Icon","HingeJoint2D Icon","LensFlare Icon","Light Icon","LightProbeGroup Icon",
+ "LightProbeProxyVolume Icon","LightProbes Icon","LineRenderer Icon","LODGroup Icon","Material Icon",
+ "Mesh Icon","MeshCollider Icon","MeshFilter Icon","MeshRenderer Icon","Motion Icon","MovieTexture Icon",
+ "NetworkAnimator Icon","NetworkDiscovery Icon","NetworkIdentity Icon","NetworkLobbyManager Icon",
+ "NetworkLobbyPlayer Icon","NetworkManager Icon","NetworkManagerHUD Icon","NetworkMigrationManager Icon",
+ "NetworkProximityChecker Icon","NetworkStartPosition Icon","NetworkTransform Icon",
+ "NetworkTransformChild Icon","NetworkTransformVisualizer Icon","NetworkView Icon","OcclusionArea Icon",
+ "OcclusionPortal Icon","ParticleSystem Icon","ParticleSystemForceField Icon","PhysicMaterial Icon",
+ "PhysicsMaterial2D Icon","PlatformEffector2D Icon","d_PlayableDirector Icon","PlayableDirector Icon",
+ "PointEffector2D Icon","PolygonCollider2D Icon","ProceduralMaterial Icon","Projector Icon",
+ "RectTransform Icon","ReflectionProbe Icon","RelativeJoint2D Icon","d_SortingGroup Icon",
+ "SortingGroup Icon","RenderTexture Icon","Rigidbody Icon","Rigidbody2D Icon","ScriptableObject Icon",
+ "Shader Icon","ShaderVariantCollection Icon","SkinnedMeshRenderer Icon","Skybox Icon","SliderJoint2D Icon",
+ "TrackedPoseDriver Icon","SphereCollider Icon","SpringJoint Icon","SpringJoint2D Icon","Sprite Icon",
+ "SpriteMask Icon","SpriteRenderer Icon","StreamingController Icon","StyleSheet Icon","SurfaceEffector2D Icon",
+ "TargetJoint2D Icon","Terrain Icon","TerrainCollider Icon","TerrainData Icon","TextAsset Icon",
+ "TextMesh Icon","Texture Icon","Texture2D Icon","Tile Icon","Tilemap Icon","TilemapCollider2D Icon",
+ "TilemapRenderer Icon","d_TimelineAsset Icon","TimelineAsset Icon","TrailRenderer Icon","Transform Icon",
+ "SpriteAtlas Icon","AspectRatioFitter Icon","Button Icon","CanvasScaler Icon","ContentSizeFitter Icon",
+ "d_AspectRatioFitter Icon","d_CanvasScaler Icon","d_ContentSizeFitter Icon","d_FreeformLayoutGroup Icon",
+ "d_GraphicRaycaster Icon","d_GridLayoutGroup Icon","d_HorizontalLayoutGroup Icon","d_LayoutElement Icon",
+ "d_PhysicalResolution Icon","d_ScrollViewArea Icon","d_SelectionList Icon","d_SelectionListItem Icon",
+ "d_SelectionListTemplate Icon","d_VerticalLayoutGroup Icon","Dropdown Icon","FreeformLayoutGroup Icon",
+ "GraphicRaycaster Icon","GridLayoutGroup Icon","HorizontalLayoutGroup Icon","Image Icon","InputField Icon",
+ "LayoutElement Icon","Mask Icon","Outline Icon","PositionAsUV1 Icon","RawImage Icon","RectMask2D Icon",
+ "Scrollbar Icon","ScrollRect Icon","Selectable Icon","Shadow Icon","Slider Icon","Text Icon","Toggle Icon",
+ "ToggleGroup Icon","VerticalLayoutGroup Icon","VideoClip Icon","VideoPlayer Icon","VisualEffect Icon",
+ "VisualEffectAsset Icon","WheelCollider Icon","WheelJoint2D Icon","WindZone Icon",
+ "SpatialMappingCollider Icon","SpatialMappingRenderer Icon","WorldAnchor Icon","UssScript Icon",
+ "UxmlScript Icon","VerticalLayoutGroup Icon","VideoEffect Icon","VisualEffect Gizmo",
+ "VisualEffectAsset Icon","AnchorBehaviour Icon","AnchorInputListenerBehaviour Icon",
+ "AnchorStageBehaviour Icon","CloudRecoBehaviour Icon","ContentPlacementBehaviour Icon",
+ "ContentPositioningBehaviour Icon","CylinderTargetBehaviour Icon","d_AnchorBehaviour Icon",
+ "d_AnchorInputListenerBehaviour Icon","d_AnchorStageBehaviour Icon","d_CloudRecoBehaviour Icon",
+ "d_ContentPlacementBehaviour Icon","d_ContentPositioningBehaviour Icon","d_CylinderTargetBehaviour Icon",
+ "d_ImageTargetBehaviour Icon","d_MidAirPositionerBehaviour Icon","d_ModelTargetBehaviour Icon",
+ "d_MultiTargetBehaviour Icon","d_ObjectTargetBehaviour Icon","d_PlaneFinderBehaviour Icon",
+ "d_UserDefinedTargetBuildingBehaviour Icon","d_VirtualButtonBehaviour Icon","d_VuforiaBehaviour Icon",
+ "d_VuMarkBehaviour Icon","d_WireframeBehaviour Icon","ImageTargetBehaviour Icon",
+ "MidAirPositionerBehaviour Icon","ModelTargetBehaviour Icon","MultiTargetBehaviour Icon",
+ "ObjectTargetBehaviour Icon","PlaneFinderBehaviour Icon","UserDefinedTargetBuildingBehaviour Icon",
+ "VirtualButtonBehaviour Icon","VuforiaBehaviour Icon","VuMarkBehaviour Icon","WireframeBehaviour Icon",
+ "WindZone Gizmo","Profiler.Audio","Profiler.CPU","Profiler.FirstFrame","Profiler.GlobalIllumination",
+ "Profiler.GPU","Profiler.Instrumentation","Profiler.LastFrame","Profiler.Memory","Profiler.NetworkMessages",
+ "Profiler.NetworkOperations","Profiler.NextFrame","Profiler.Physics","Profiler.Physics2D",
+ "Profiler.PrevFrame","Profiler.Record","Profiler.Rendering","Profiler.UI","Profiler.UIDetails",
+ "Profiler.Video","ProfilerColumn.WarningCount","Project","RectTool On","RectTool","RectTransformBlueprint",
+ "RectTransformRaw","redGroove","Refresh","renderdoc","rightBracket","RotateTool On","RotateTool",
+ "SaveActive","SaveFromPlay","SavePassive","ScaleTool On","ScaleTool","SceneLoadIn","SceneLoadOut",
+ "SceneSave","SceneSaveGrey","SceneViewAlpha","SceneViewAudio","SceneViewFx","SceneViewLighting",
+ "SceneViewOrtho","SceneViewRGB","ScrollShadow","Settings","SettingsIcon","SocialNetworks.FacebookShare",
+ "SocialNetworks.LinkedInShare","SocialNetworks.Tweet","SocialNetworks.UDNLogo","SocialNetworks.UDNOpen",
+ "SoftlockInline","SpeedScale","StateMachineEditor.ArrowTip","StateMachineEditor.ArrowTipSelected",
+ "StateMachineEditor.Background","StateMachineEditor.State","StateMachineEditor.StateHover",
+ "StateMachineEditor.StateSelected","StateMachineEditor.StateSub","StateMachineEditor.StateSubHover",
+ "StateMachineEditor.StateSubSelected","StateMachineEditor.UpButton","StateMachineEditor.UpButtonHover",
+ "StepButton On","StepButton","StepLeftButton-On","StepLeftButton","sticky_arrow","sticky_p4","sticky_skin",
+ "sv_icon_dot0_sml","sv_icon_dot10_sml","sv_icon_dot11_sml","sv_icon_dot12_sml","sv_icon_dot13_sml",
+ "sv_icon_dot14_sml","sv_icon_dot15_sml","sv_icon_dot1_sml","sv_icon_dot2_sml","sv_icon_dot3_sml",
+ "sv_icon_dot4_sml","sv_icon_dot5_sml","sv_icon_dot6_sml","sv_icon_dot7_sml","sv_icon_dot8_sml",
+ "sv_icon_dot9_sml","sv_icon_name0","sv_icon_name1","sv_icon_name2","sv_icon_name3","sv_icon_name4",
+ "sv_icon_name5","sv_icon_name6","sv_icon_name7","sv_icon_none","sv_label_0","sv_label_1","sv_label_2",
+ "sv_label_3","sv_label_4","sv_label_5","sv_label_6","sv_label_7","SVN_AddedLocal","SVN_Conflicted",
+ "SVN_DeletedLocal","SVN_Local","SVN_LockedLocal","SVN_OutOfSync","tab_next","tab_next@2x","tab_prev",
+ "tab_prev@2x","TerrainInspector.TerrainToolLower On","TerrainInspector.TerrainToolLower",
+ "TerrainInspector.TerrainToolLowerAlt","TerrainInspector.TerrainToolPlants On",
+ "TerrainInspector.TerrainToolPlants","TerrainInspector.TerrainToolPlantsAlt On",
+ "TerrainInspector.TerrainToolPlantsAlt","TerrainInspector.TerrainToolRaise On",
+ "TerrainInspector.TerrainToolRaise","TerrainInspector.TerrainToolSculpt On",
+ "TerrainInspector.TerrainToolSculpt","TerrainInspector.TerrainToolSetheight On",
+ "TerrainInspector.TerrainToolSetheight","TerrainInspector.TerrainToolSetheightAlt On",
+ "TerrainInspector.TerrainToolSetheightAlt","TerrainInspector.TerrainToolSettings On",
+ "TerrainInspector.TerrainToolSettings","TerrainInspector.TerrainToolSmoothHeight On",
+ "TerrainInspector.TerrainToolSmoothHeight","TerrainInspector.TerrainToolSplat On",
+ "TerrainInspector.TerrainToolSplat","TerrainInspector.TerrainToolSplatAlt On",
+ "TerrainInspector.TerrainToolSplatAlt","TerrainInspector.TerrainToolTrees On",
+ "TerrainInspector.TerrainToolTrees","TerrainInspector.TerrainToolTreesAlt On",
+ "TerrainInspector.TerrainToolTreesAlt","TestFailed","TestIgnored","TestInconclusive","TestNormal",
+ "TestPassed","TestStopwatch","TimelineClipBG","TimelineClipFG","TimelineDigIn","TimelineEditModeMixOFF",
+ "TimelineEditModeMixON","TimelineEditModeReplaceOFF","TimelineEditModeReplaceON","TimelineEditModeRippleOFF",
+ "TimelineEditModeRippleON","TimelineSelector","Toolbar Minus","Toolbar Plus More","Toolbar Plus",
+ "ToolHandleCenter","ToolHandleGlobal","ToolHandleLocal","ToolHandlePivot","tranp","TransformTool On",
+ "TransformTool","tree_icon","tree_icon_branch","tree_icon_branch_frond","tree_icon_frond","tree_icon_leaf",
+ "TreeEditor.AddBranches","TreeEditor.AddLeaves","TreeEditor.Branch On","TreeEditor.Branch",
+ "TreeEditor.BranchFreeHand On","TreeEditor.BranchFreeHand","TreeEditor.BranchRotate On",
+ "TreeEditor.BranchRotate","TreeEditor.BranchScale On","TreeEditor.BranchScale",
+ "TreeEditor.BranchTranslate On","TreeEditor.BranchTranslate","TreeEditor.Distribution On",
+ "TreeEditor.Distribution","TreeEditor.Duplicate","TreeEditor.Geometry On","TreeEditor.Geometry",
+ "TreeEditor.Leaf On","TreeEditor.Leaf","TreeEditor.LeafFreeHand On","TreeEditor.LeafFreeHand",
+ "TreeEditor.LeafRotate On","TreeEditor.LeafRotate","TreeEditor.LeafScale On","TreeEditor.LeafScale",
+ "TreeEditor.LeafTranslate On","TreeEditor.LeafTranslate","TreeEditor.Material On","TreeEditor.Material",
+ "TreeEditor.Refresh","TreeEditor.Trash","TreeEditor.Wind On","TreeEditor.Wind","UnityEditor.AnimationWindow",
+ "UnityEditor.ConsoleWindow","UnityEditor.DebugInspectorWindow","UnityEditor.FindDependencies",
+ "UnityEditor.GameView","UnityEditor.Graphs.AnimatorControllerTool","UnityEditor.HierarchyWindow",
+ "UnityEditor.InspectorWindow","UnityEditor.LookDevView","UnityEditor.ProfilerWindow",
+ "UnityEditor.SceneHierarchyWindow","UnityEditor.SceneView","UnityEditor.Timeline.TimelineWindow",
+ "UnityEditor.VersionControl","UnityLogo","UnityLogoLarge","UpArrow","vcs_add","vcs_branch","vcs_change",
+ "vcs_check","vcs_delete","vcs_document","vcs_edit","vcs_incoming","vcs_integrate","vcs_local","vcs_lock",
+ "vcs_refresh","vcs_sync","vcs_unresolved","vcs_update","VerticalSplit","ViewToolMove On","ViewToolMove",
+ "ViewToolOrbit On","ViewToolOrbit","ViewToolZoom On","ViewToolZoom","VisibilityOff","VisibilityOn",
+ "VisualEffect Gizmo","VUMeterTextureHorizontal","VUMeterTextureVertical","WaitSpin00","WaitSpin01",
+ "WaitSpin02","WaitSpin03","WaitSpin04","WaitSpin05","WaitSpin06","WaitSpin07","WaitSpin08","WaitSpin09",
+ "WaitSpin10","WaitSpin11","WelcomeScreen.AssetStoreLogo","winbtn_graph","winbtn_graph_close_h",
+ "winbtn_graph_max_h","winbtn_graph_min_h","winbtn_mac_close","winbtn_mac_close_a","winbtn_mac_close_h",
+ "winbtn_mac_inact","winbtn_mac_max","winbtn_mac_max_a","winbtn_mac_max_h","winbtn_mac_min",
+ "winbtn_mac_min_a","winbtn_mac_min_h","winbtn_win_close","winbtn_win_close_a","winbtn_win_close_h",
+ "winbtn_win_max","winbtn_win_max_a","winbtn_win_max_h","winbtn_win_min","winbtn_win_min_a",
+ "winbtn_win_min_h","winbtn_win_rest","winbtn_win_rest_a","winbtn_win_rest_h",
+ "AvatarInspector/RightFingersIk","AvatarInspector/LeftFingersIk","AvatarInspector/RightFeetIk",
+ "AvatarInspector/LeftFeetIk","AvatarInspector/RightFingers","AvatarInspector/LeftFingers",
+ "AvatarInspector/RightArm","AvatarInspector/LeftArm","AvatarInspector/RightLeg","AvatarInspector/LeftLeg",
+ "AvatarInspector/Head","AvatarInspector/Torso","AvatarInspector/MaskEditor_Root",
+ "AvatarInspector/BodyPartPicker","AvatarInspector/BodySIlhouette","boo Script Icon","js Script Icon",
+ "EyeDropper.Large","AboutWindow.MainHeader","AgeiaLogo","MonoLogo","PlayButtonProfile Anim",
+ "StepButton Anim","PauseButton Anim","PlayButton Anim","MoveTool On","Icon Dropdown",
+ "AvatarInspector/DotSelection","AvatarInspector/DotFrameDotted","AvatarInspector/DotFrame",
+ "AvatarInspector/DotFill","AvatarInspector/RightHandZoom","AvatarInspector/LeftHandZoom",
+ "AvatarInspector/HeadZoom","AvatarInspector/RightLeg","AvatarInspector/LeftLeg",
+ "AvatarInspector/RightFingers","AvatarInspector/RightArm","AvatarInspector/LeftFingers",
+ "AvatarInspector/LeftArm","AvatarInspector/Head","AvatarInspector/Torso",
+ "AvatarInspector/RightHandZoomSilhouette","AvatarInspector/LeftHandZoomSilhouette",
+ "AvatarInspector/HeadZoomSilhouette","AvatarInspector/BodySilhouette","lightMeter/redLight",
+ "lightMeter/orangeLight","lightMeter/lightRim","lightMeter/greenLight","SceneviewAudio",
+ "SceneviewLighting","TerrainInspector.TerrainToolSetHeight","AS Badge New","AS Badge Move",
+ "AS Badge Delete","WelcomeScreen.UnityAnswersLogo","WelcomeScreen.UnityForumLogo",
+ "WelcomeScreen.UnityBasicsLogo","WelcomeScreen.VideoTutLogo","WelcomeScreen.MainHeader","Icon Dropdown",
+ "PrefabNormal Icon","PrefabNormal Icon","BuildSettings.BlackBerry.Small","BuildSettings.Tizen.Small",
+ "BuildSettings.XBox360.Small","BuildSettings.PS3.Small","BuildSettings.SamsungTV.Small",
+ "BuildSettings.BlackBerry","BuildSettings.Tizen","BuildSettings.XBox360","BuildSettings.PS3",
+ "BuildSettings.SamsungTV"
+ };
+
+ #endregion
+}
+#endif
diff --git a/Assets/Tools/Editor/EditorIcons.cs.meta b/Assets/Tools/Editor/EditorIcons.cs.meta
new file mode 100644
index 00000000..d5a7ca99
--- /dev/null
+++ b/Assets/Tools/Editor/EditorIcons.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 80c08162d7cc5f84eb99fca81e1eb1ea
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Tools/Editor/ErikaScenes.cs b/Assets/Tools/Editor/ErikaScenes.cs
new file mode 100644
index 00000000..58065fb1
--- /dev/null
+++ b/Assets/Tools/Editor/ErikaScenes.cs
@@ -0,0 +1,32 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEditor;
+using UnityEditor.SceneManagement;
+
+public static class ErikaScenes
+{
+
+ [MenuItem("Erika/Scene/打开特效场景")]
+ static void OpenFxScene()
+ {
+ string animScene = "Assets/Scenes/Demo/VfxScene.unity";
+ var scene = EditorSceneManager.GetActiveScene();
+ if (scene == null || scene.path != animScene)
+ {
+ EditorSceneManager.OpenScene(animScene);
+ }
+ }
+
+ [MenuItem("Erika/Scene/打开动画场景")]
+ static void OpenAnimationScene()
+ {
+ string animScene = "Assets/Scenes/Demo/AnimationEditScene.unity";
+ var scene = EditorSceneManager.GetActiveScene();
+ if (scene == null || scene.path != animScene)
+ {
+ EditorSceneManager.OpenScene(animScene);
+ }
+ }
+
+}
diff --git a/Assets/Tools/Editor/ErikaScenes.cs.meta b/Assets/Tools/Editor/ErikaScenes.cs.meta
new file mode 100644
index 00000000..9c676b11
--- /dev/null
+++ b/Assets/Tools/Editor/ErikaScenes.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 94285cb3bd8d858478bc5f265605db6b
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Tools/Editor/ExtractAnimationTool.cs b/Assets/Tools/Editor/ExtractAnimationTool.cs
new file mode 100644
index 00000000..044e0446
--- /dev/null
+++ b/Assets/Tools/Editor/ExtractAnimationTool.cs
@@ -0,0 +1,68 @@
+using System.IO;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEditor;
+
+public static class ExtractAnimationTool
+{
+
+ static string animationRoot = "Assets/Art/Animations/";
+ static string animExtractRoot = "Assets/Art/AnimationClips/";
+
+ [MenuItem("Erika/Extract All Animation")]
+ static void ExtractAnimations()
+ {
+ string[] files = Directory.GetFiles(animationRoot, "*.fbx", SearchOption.AllDirectories);
+ if (EditorUtility.DisplayCancelableProgressBar("Extract Animation 0/" + files.Length, "...", 0))
+ {
+ return;
+ }
+ for (int i = 0; i < files.Length;++i)
+ {
+ string file = files[i].Replace("\\", "/").Replace(Application.dataPath, "Assets/");
+ string name = Path.GetFileNameWithoutExtension(file);
+ //UnityEngine.Object[] clips = AssetDatabase.LoadAllAssetsAtPath(file);
+ //int k = 0;
+ //for (int j = 0; j < clips.Length; ++j)
+ //{
+ // if (!(clips[j] is AnimationClip && clips[j]))
+ // continue;
+
+ //AnimationClip clip = clips[j] as AnimationClip;
+ AnimationClip clip = AssetDatabase.LoadAssetAtPath<AnimationClip>(file);
+ if (clip == null)
+ continue;
+ string saveFolder = Path.GetDirectoryName(file).Replace("\\", "/").Replace(animationRoot, animExtractRoot) + "/";
+ if (!Directory.Exists(saveFolder))
+ Directory.CreateDirectory(saveFolder);
+ //string savePath = saveFolder + name + (k == 0? "": "_" + k.ToString()) + ".anim";
+ string savePath = saveFolder + name + ".anim";
+ AnimationClip saveClip = Object.Instantiate(clip);
+ AssetDatabase.CreateAsset(saveClip, savePath);
+ //++k;
+ //}
+ if(EditorUtility.DisplayCancelableProgressBar("Extract Animations "+ (i+1) + "/" + files.Length, file, (i + 1) /(float) files.Length) )
+ {
+ break;
+ }
+ }
+ EditorUtility.ClearProgressBar();
+ }
+
+ /// <summary>
+ /// 提取动画
+ /// </summary>
+ /// <param name="path">fbx路径(Unity风格)</param>
+ public static void ExtractAnimation(string path)
+ {
+ AnimationClip clip = AssetDatabase.LoadAssetAtPath<AnimationClip>(path);
+ if (clip == null)
+ return;
+ string name = Path.GetFileNameWithoutExtension(path);
+ string folder = Path.GetDirectoryName(path).Replace(animationRoot, animExtractRoot);
+ AnimationClip saveClip = Object.Instantiate(clip);
+ AssetDatabase.CreateAsset(saveClip, folder + "/" + name + ".anim");
+ }
+
+}
diff --git a/Assets/Tools/Editor/ExtractAnimationTool.cs.meta b/Assets/Tools/Editor/ExtractAnimationTool.cs.meta
new file mode 100644
index 00000000..992ca882
--- /dev/null
+++ b/Assets/Tools/Editor/ExtractAnimationTool.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 11e96aafc7b5bde4c92f399d1d4c4459
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Tools/Editor/GUIStyleViwer.cs b/Assets/Tools/Editor/GUIStyleViwer.cs
new file mode 100644
index 00000000..9ec7ab47
--- /dev/null
+++ b/Assets/Tools/Editor/GUIStyleViwer.cs
@@ -0,0 +1,59 @@
+
+using UnityEngine;
+using UnityEditor;
+
+public class GUIStyleViewer : EditorWindow
+{
+
+ Vector2 scrollPosition = new Vector2(0, 0);
+ string search = "";
+ GUIStyle textStyle;
+
+ private static GUIStyleViewer window;
+ [MenuItem("Tools/GUIStyleViewer", false, 10)]
+ private static void OpenStyleViewer()
+ {
+ window = GetWindow<GUIStyleViewer>(false, "内置GUIStyle");
+ }
+
+ void OnGUI()
+ {
+ if (textStyle == null)
+ {
+ textStyle = new GUIStyle("HeaderLabel");
+ textStyle.fontSize = 25;
+ }
+
+ GUILayout.BeginHorizontal("HelpBox");
+ GUILayout.Label("结果如下:", textStyle);
+ GUILayout.FlexibleSpace();
+ GUILayout.Label("Search:");
+ search = EditorGUILayout.TextField(search);
+ GUILayout.EndHorizontal();
+ GUILayout.BeginHorizontal("PopupCurveSwatchBackground");
+ GUILayout.Label("样式展示", textStyle, GUILayout.Width(300));
+ GUILayout.Label("名字", textStyle, GUILayout.Width(300));
+ GUILayout.EndHorizontal();
+
+
+ scrollPosition = GUILayout.BeginScrollView(scrollPosition);
+
+ foreach (var style in GUI.skin.customStyles)
+ {
+ if (style.name.ToLower().Contains(search.ToLower()))
+ {
+ GUILayout.Space(15);
+ GUILayout.BeginHorizontal("PopupCurveSwatchBackground");
+ if (GUILayout.Button(style.name, style, GUILayout.Width(300)))
+ {
+ EditorGUIUtility.systemCopyBuffer = style.name;
+ Debug.LogError(style.name);
+ }
+ EditorGUILayout.SelectableLabel(style.name, GUILayout.Width(300));
+ GUILayout.EndHorizontal();
+ }
+ }
+
+ GUILayout.EndScrollView();
+ }
+} \ No newline at end of file
diff --git a/Assets/Tools/Editor/GUIStyleViwer.cs.meta b/Assets/Tools/Editor/GUIStyleViwer.cs.meta
new file mode 100644
index 00000000..a7f91047
--- /dev/null
+++ b/Assets/Tools/Editor/GUIStyleViwer.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 880320d430ea6ee4094251f800774f29
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Tools/Editor/Optimization.meta b/Assets/Tools/Editor/Optimization.meta
new file mode 100644
index 00000000..75099a82
--- /dev/null
+++ b/Assets/Tools/Editor/Optimization.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: b6c65ed1db71216408f984ecc28f5c51
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Tools/Editor/Optimization/AnimationOptimize.cs b/Assets/Tools/Editor/Optimization/AnimationOptimize.cs
new file mode 100644
index 00000000..c1baadcf
--- /dev/null
+++ b/Assets/Tools/Editor/Optimization/AnimationOptimize.cs
@@ -0,0 +1,18 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class AnimationOptimize : MonoBehaviour
+{
+ // Start is called before the first frame update
+ void Start()
+ {
+
+ }
+
+ // Update is called once per frame
+ void Update()
+ {
+
+ }
+}
diff --git a/Assets/Tools/Editor/Optimization/AnimationOptimize.cs.meta b/Assets/Tools/Editor/Optimization/AnimationOptimize.cs.meta
new file mode 100644
index 00000000..7ca17fc2
--- /dev/null
+++ b/Assets/Tools/Editor/Optimization/AnimationOptimize.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 12b92db34be39d841a73b5c7f1bb4a7e
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Tools/Editor/PhysicsPrimitiveEditor.cs b/Assets/Tools/Editor/PhysicsPrimitiveEditor.cs
new file mode 100644
index 00000000..d401f244
--- /dev/null
+++ b/Assets/Tools/Editor/PhysicsPrimitiveEditor.cs
@@ -0,0 +1,17 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEditor;
+
+/// <summary>
+/// 编辑physics primitive的位置和大小
+/// </summary>
+public class PhysicsPrimitiveEditor : Editor
+{
+
+ protected virtual void OnSceneGUI()
+ {
+
+ }
+
+}
diff --git a/Assets/Tools/Editor/PhysicsPrimitiveEditor.cs.meta b/Assets/Tools/Editor/PhysicsPrimitiveEditor.cs.meta
new file mode 100644
index 00000000..7645df4d
--- /dev/null
+++ b/Assets/Tools/Editor/PhysicsPrimitiveEditor.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 09e631c8bc808f947993c75ec568026e
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Tools/Editor/ShortcutHelper.cs b/Assets/Tools/Editor/ShortcutHelper.cs
new file mode 100644
index 00000000..33cf29c5
--- /dev/null
+++ b/Assets/Tools/Editor/ShortcutHelper.cs
@@ -0,0 +1,31 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEditor;
+using UnityEditor.SceneManagement;
+
+public class ShortcutHelper
+{
+ [MenuItem("Erika/Scene/打开Saionji场景")]
+ static void OpenSaionjiScene()
+ {
+ string path = Application.dataPath + "/Scenes/Demo/FightDemoScene.unity";
+ if (!EditorSceneManager.SaveCurrentModifiedScenesIfUserWantsTo())
+ {
+ return;
+ }
+ EditorSceneManager.OpenScene(path);
+ }
+
+ [MenuItem("Erika/Scene/打开UMotion场景")]
+ static void OpenUMotionScene()
+ {
+ string path = Application.dataPath + "/Scenes/Demo/AnimationEditScene.unity";
+ if (!EditorSceneManager.SaveCurrentModifiedScenesIfUserWantsTo())
+ {
+ return;
+ }
+ EditorSceneManager.OpenScene(path);
+ }
+
+} \ No newline at end of file
diff --git a/Assets/Tools/Editor/ShortcutHelper.cs.meta b/Assets/Tools/Editor/ShortcutHelper.cs.meta
new file mode 100644
index 00000000..4b8749e4
--- /dev/null
+++ b/Assets/Tools/Editor/ShortcutHelper.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: d1abd8aef82e4a4489279cedfc5c4339
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant: