diff --git a/Assets/Assets/Resources/Tube/Default.mat b/Assets/Assets/Resources/Tube/Default.mat index 1e5287b..2fdb7fd 100644 --- a/Assets/Assets/Resources/Tube/Default.mat +++ b/Assets/Assets/Resources/Tube/Default.mat @@ -8,129 +8,58 @@ Material: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: Default - m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} + m_Shader: {fileID: 4800000, guid: 84c10c50c4215074ea659b2fe4bb6c31, type: 3} m_Parent: {fileID: 0} m_ModifiedSerializedProperties: 0 - m_ValidKeywords: - - _EMISSION + m_ValidKeywords: [] m_InvalidKeywords: [] - m_LightmapFlags: 1 + m_LightmapFlags: 4 m_EnableInstancingVariants: 0 m_DoubleSidedGI: 0 - m_CustomRenderQueue: 2000 - stringTagMap: - RenderType: Opaque + m_CustomRenderQueue: -1 + stringTagMap: {} disabledShaderPasses: [] m_LockedProperties: m_SavedProperties: serializedVersion: 3 m_TexEnvs: - _BaseMap: - m_Texture: {fileID: 0} - m_Scale: {x: 5, y: 5} - m_Offset: {x: 0, y: 0} - - _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: 0.2, y: 0.2} - 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: 5, y: 5} - m_Offset: {x: 0, y: 0} - - _MainTex: - m_Texture: {fileID: 0} - m_Scale: {x: 5, y: 5} - 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} - - _SpecGlossMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_Lightmaps: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_LightmapsInd: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_ShadowMasks: + - _GlowMap: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} m_Ints: [] m_Floats: - - _AlphaClip: 0 - - _AlphaToMask: 0 - - _Blend: 0 - - _BlendModePreserveSpecular: 1 - - _BumpScale: 1 - - _ClearCoatMask: 0 - - _ClearCoatSmoothness: 0 + - _Alpha: 0 + - _CoreIntensity: 0 + - _CorePulse: 0 + - _CoreWidth: 0 - _Cull: 2 - - _Cutoff: 0.5 - - _DetailAlbedoMapScale: 1 - - _DetailNormalMapScale: 1 - - _DstBlend: 0 - - _DstBlendAlpha: 0 - - _EnvironmentReflections: 1 - - _GlossMapScale: 1 - - _Glossiness: 0.117 - - _GlossyReflections: 1 - - _Metallic: 0.603 - - _Mode: 0 - - _OcclusionStrength: 1 - - _Parallax: 0.02 - - _QueueOffset: 0 - - _ReceiveShadows: 1 - - _Smoothness: 0.117 - - _SmoothnessTextureChannel: 0 - - _SpecularHighlights: 1 + - _Distortion: 0 + - _DstBlend: 10 + - _EdgeGlowIntensity: 0 + - _EdgeGlowWidth: 0.01 + - _FlowFrequency: 0.1 + - _FlowNoise: 0 + - _FlowSpeed: 0 + - _FresnelIntensity: 0 + - _FresnelPower: 0.1 + - _GlowIntensity: 0 + - _SplineFade: 0 + - _SplineLength: 0 + - _SplineProgress: 0 + - _SplineWidth: 0 - _SrcBlend: 1 - - _SrcBlendAlpha: 1 - - _Surface: 0 - - _UVSec: 0 - - _WorkflowMode: 1 - - _ZWrite: 1 + - _ZWrite: 0 m_Colors: - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - - _Color: {r: 1, g: 1, b: 1, a: 1} - - _EmissionColor: {r: 1.4980394, g: 1.4980394, b: 1.4980394, a: 1} - - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} + - _BaseMapTiling: {r: 1, g: 1, b: 0, a: 0} + - _CoreColor: {r: 1, g: 1, b: 1, a: 1} + - _EdgeGlowColor: {r: 1, g: 1, b: 1, a: 1} + - _FlowDirection: {r: 1, g: 0, b: 0, a: 0} + - _GlowColor: {r: 1, g: 1, b: 1, a: 1} + - _GlowMapTiling: {r: 1, g: 1, b: 0, a: 0} m_BuildTextureStacks: [] ---- !u!114 &3756280554008477935 -MonoBehaviour: - m_ObjectHideFlags: 11 - 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: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} - m_Name: - m_EditorClassIdentifier: - version: 7 diff --git a/Assets/Assets/Resources/Tube/Default.mat.meta b/Assets/Assets/Resources/Tube/Default.mat.meta index 74c523c..0d2557e 100644 --- a/Assets/Assets/Resources/Tube/Default.mat.meta +++ b/Assets/Assets/Resources/Tube/Default.mat.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 62630902117bdea46892bb1b9658beec +guid: 75b8d3692d377b041b5c449a88279e85 NativeFormatImporter: externalObjects: {} mainObjectFileID: 2100000 diff --git a/Assets/Assets/Resources/Tube/LegacyDefault.mat b/Assets/Assets/Resources/Tube/LegacyDefault.mat new file mode 100644 index 0000000..a0deee5 --- /dev/null +++ b/Assets/Assets/Resources/Tube/LegacyDefault.mat @@ -0,0 +1,136 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: LegacyDefault + m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: + - _EMISSION + m_InvalidKeywords: [] + m_LightmapFlags: 1 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: 2000 + stringTagMap: + RenderType: Opaque + disabledShaderPasses: [] + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 0} + m_Scale: {x: 5, y: 5} + m_Offset: {x: 0, y: 0} + - _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: 0.2, y: 0.2} + 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: 5, y: 5} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 5, y: 5} + 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} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_Lightmaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_LightmapsInd: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_ShadowMasks: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _AlphaClip: 0 + - _AlphaToMask: 0 + - _Blend: 0 + - _BlendModePreserveSpecular: 1 + - _BumpScale: 1 + - _ClearCoatMask: 0 + - _ClearCoatSmoothness: 0 + - _Cull: 2 + - _Cutoff: 0.5 + - _DetailAlbedoMapScale: 1 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _DstBlendAlpha: 0 + - _EnvironmentReflections: 1 + - _GlossMapScale: 1 + - _Glossiness: 0.117 + - _GlossyReflections: 1 + - _Metallic: 0.603 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _Smoothness: 0.117 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _SrcBlendAlpha: 1 + - _Surface: 0 + - _UVSec: 0 + - _WorkflowMode: 1 + - _ZWrite: 1 + m_Colors: + - _BaseColor: {r: 1, g: 1, b: 1, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 1.4980394, g: 1.4980394, b: 1.4980394, a: 1} + - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} + m_BuildTextureStacks: [] +--- !u!114 &3756280554008477935 +MonoBehaviour: + m_ObjectHideFlags: 11 + 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: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} + m_Name: + m_EditorClassIdentifier: + version: 7 diff --git a/Assets/Assets/Resources/Tube/LegacyDefault.mat.meta b/Assets/Assets/Resources/Tube/LegacyDefault.mat.meta new file mode 100644 index 0000000..74c523c --- /dev/null +++ b/Assets/Assets/Resources/Tube/LegacyDefault.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 62630902117bdea46892bb1b9658beec +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Assets/Shader.meta b/Assets/Assets/Shader.meta new file mode 100644 index 0000000..42d22b2 --- /dev/null +++ b/Assets/Assets/Shader.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6b21ffd3a6414194bb77db4cae91b90b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Assets/Shader/Custom_SplineGlowTubeSplineOptimized.mat b/Assets/Assets/Shader/Custom_SplineGlowTubeSplineOptimized.mat new file mode 100644 index 0000000..59c5f7d --- /dev/null +++ b/Assets/Assets/Shader/Custom_SplineGlowTubeSplineOptimized.mat @@ -0,0 +1,65 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Custom_SplineGlowTubeSplineOptimized + m_Shader: {fileID: 4800000, guid: 84c10c50c4215074ea659b2fe4bb6c31, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _GlowMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _Alpha: 0 + - _CoreIntensity: 0 + - _CorePulse: 0 + - _CoreWidth: 0 + - _Cull: 2 + - _Distortion: 0 + - _DstBlend: 10 + - _EdgeGlowIntensity: 0 + - _EdgeGlowWidth: 0.01 + - _FlowFrequency: 0.1 + - _FlowNoise: 0 + - _FlowSpeed: 0 + - _FresnelIntensity: 0 + - _FresnelPower: 0.1 + - _GlowIntensity: 0 + - _SplineFade: 0 + - _SplineLength: 0 + - _SplineProgress: 0 + - _SplineWidth: 0 + - _SrcBlend: 1 + - _ZWrite: 0 + m_Colors: + - _BaseColor: {r: 1, g: 1, b: 1, a: 1} + - _BaseMapTiling: {r: 1, g: 1, b: 0, a: 0} + - _CoreColor: {r: 1, g: 1, b: 1, a: 1} + - _EdgeGlowColor: {r: 1, g: 1, b: 1, a: 1} + - _FlowDirection: {r: 1, g: 0, b: 0, a: 0} + - _GlowColor: {r: 1, g: 1, b: 1, a: 1} + - _GlowMapTiling: {r: 1, g: 1, b: 0, a: 0} + m_BuildTextureStacks: [] diff --git a/Assets/Assets/Shader/Custom_SplineGlowTubeSplineOptimized.mat.meta b/Assets/Assets/Shader/Custom_SplineGlowTubeSplineOptimized.mat.meta new file mode 100644 index 0000000..6a155fb --- /dev/null +++ b/Assets/Assets/Shader/Custom_SplineGlowTubeSplineOptimized.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 940e2ccb7a734374597d87762baed94f +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Assets/Shader/SplineGlowTubeSplineOptimized.shader b/Assets/Assets/Shader/SplineGlowTubeSplineOptimized.shader new file mode 100644 index 0000000..94bb02e --- /dev/null +++ b/Assets/Assets/Shader/SplineGlowTubeSplineOptimized.shader @@ -0,0 +1,345 @@ +Shader "Custom/SplineGlowTubeSplineOptimized" +{ + Properties + { + [Header(Base Properties)] + _BaseColor ("Base Color", Color) = (0.2, 0.4, 1, 1) + _BaseMap ("Base Map", 2D) = "white" {} + _BaseMapTiling ("Base Map Tiling", Vector) = (1, 1, 0, 0) + + [Header(Glow Properties)] + _GlowColor ("Glow Color", Color) = (0, 1, 1, 1) + _GlowIntensity ("Glow Intensity", Range(0, 10)) = 3 + _GlowMap ("Glow Map", 2D) = "white" {} + _GlowMapTiling ("Glow Map Tiling", Vector) = (1, 1, 0, 0) + + [Header(Flow Animation)] + _FlowSpeed ("Flow Speed", Range(0, 5)) = 1.5 + _FlowDirection ("Flow Direction", Vector) = (1, 0, 0, 0) + _FlowNoise ("Flow Noise", Range(0, 1)) = 0.2 + _FlowFrequency ("Flow Frequency", Range(0.1, 5)) = 1 + + [Header(Edge Glow)] + _EdgeGlowColor ("Edge Glow Color", Color) = (1, 0.5, 0, 1) + _EdgeGlowIntensity ("Edge Glow Intensity", Range(0, 5)) = 2 + _EdgeGlowWidth ("Edge Glow Width", Range(0, 1)) = 0.15 + + [Header(Energy Core)] + _CoreColor ("Core Color", Color) = (1, 1, 1, 1) + _CoreIntensity ("Core Intensity", Range(0, 5)) = 1 + _CoreWidth ("Core Width", Range(0, 1)) = 0.3 + _CorePulse ("Core Pulse Speed", Range(0, 5)) = 2 + + [Header(Spline Specific)] + _SplineLength ("Spline Length", Float) = 1 + _SplineProgress ("Spline Progress", Range(0, 1)) = 0 + _SplineFade ("Spline Fade", Range(0, 1)) = 0.1 + _SplineWidth ("Spline Width", Range(0, 1)) = 0.5 + + [Header(Advanced)] + _Alpha ("Alpha", Range(0, 1)) = 0.8 + _FresnelPower ("Fresnel Power", Range(0.1, 5)) = 2 + _FresnelIntensity ("Fresnel Intensity", Range(0, 2)) = 1 + _Distortion ("Distortion", Range(0, 0.1)) = 0.02 + + [Header(Rendering)] + [Enum(UnityEngine.Rendering.BlendMode)] _SrcBlend ("Src Blend", Float) = 1 + [Enum(UnityEngine.Rendering.BlendMode)] _DstBlend ("Dst Blend", Float) = 10 + [Enum(UnityEngine.Rendering.CullMode)] _Cull ("Cull", Float) = 0 + [Toggle] _ZWrite ("Z Write", Float) = 0 + } + + SubShader + { + Tags + { + "RenderType" = "Transparent" + "Queue" = "Transparent" + "RenderPipeline" = "UniversalPipeline" + } + + Pass + { + Name "ForwardLit" + Tags { "LightMode" = "UniversalForward" } + + Blend [_SrcBlend] [_DstBlend] + ZWrite [_ZWrite] + Cull [_Cull] + + HLSLPROGRAM + #pragma vertex vert + #pragma fragment frag + + #pragma multi_compile _ _MAIN_LIGHT_SHADOWS + #pragma multi_compile _ _MAIN_LIGHT_SHADOWS_CASCADE + #pragma multi_compile _ _SHADOWS_SOFT + #pragma multi_compile_fog + + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" + + struct Attributes + { + float4 positionOS : POSITION; + float3 normalOS : NORMAL; + float2 uv : TEXCOORD0; + float4 color : COLOR; + float4 tangentOS : TANGENT; + }; + + struct Varyings + { + float4 positionCS : SV_POSITION; + float2 uv : TEXCOORD0; + float3 positionWS : TEXCOORD1; + float3 normalWS : TEXCOORD2; + float3 viewDirWS : TEXCOORD3; + float3 tangentWS : TEXCOORD4; + float3 bitangentWS : TEXCOORD5; + float4 color : COLOR; + float fogCoord : TEXCOORD6; + float splineProgress : TEXCOORD7; + float splineWidth : TEXCOORD8; + }; + + CBUFFER_START(UnityPerMaterial) + float4 _BaseColor; + float4 _BaseMap_ST; + float4 _BaseMapTiling; + float4 _GlowColor; + float _GlowIntensity; + float4 _GlowMap_ST; + float4 _GlowMapTiling; + float _FlowSpeed; + float4 _FlowDirection; + float _FlowNoise; + float _FlowFrequency; + float4 _EdgeGlowColor; + float _EdgeGlowIntensity; + float _EdgeGlowWidth; + float4 _CoreColor; + float _CoreIntensity; + float _CoreWidth; + float _CorePulse; + float _SplineLength; + float _SplineProgress; + float _SplineFade; + float _SplineWidth; + float _Alpha; + float _FresnelPower; + float _FresnelIntensity; + float _Distortion; + CBUFFER_END + + TEXTURE2D(_BaseMap); + SAMPLER(sampler_BaseMap); + TEXTURE2D(_GlowMap); + SAMPLER(sampler_GlowMap); + + // 改进的噪声函数 + float2 Random2(float2 st) + { + st = float2(dot(st, float2(127.1, 311.7)), dot(st, float2(269.5, 183.3))); + return -1.0 + 2.0 * frac(sin(st) * 43758.5453123); + } + + float Noise(float2 st) + { + float2 i = floor(st); + float2 f = frac(st); + + float2 u = f * f * (3.0 - 2.0 * f); + + return lerp(lerp(dot(Random2(i), f), + dot(Random2(i + float2(1.0, 0.0)), f - float2(1.0, 0.0)), u.x), + lerp(dot(Random2(i + float2(0.0, 1.0)), f - float2(0.0, 1.0)), + dot(Random2(i + float2(1.0, 1.0)), f - float2(1.0, 1.0)), u.x), u.y); + } + + float FBM(float2 st) + { + float value = 0.0; + float amplitude = 0.5; + float frequency = 0.0; + + for (int i = 0; i < 4; i++) + { + value += amplitude * Noise(st); + st *= 2.0; + amplitude *= 0.5; + } + return value; + } + + Varyings vert(Attributes input) + { + Varyings output; + + VertexPositionInputs positionInputs = GetVertexPositionInputs(input.positionOS.xyz); + VertexNormalInputs normalInputs = GetVertexNormalInputs(input.normalOS, input.tangentOS); + + output.positionCS = positionInputs.positionCS; + output.positionWS = positionInputs.positionWS; + output.normalWS = normalInputs.normalWS; + output.tangentWS = normalInputs.tangentWS; + output.bitangentWS = normalInputs.bitangentWS; + output.viewDirWS = GetCameraPositionWS() - positionInputs.positionWS; + output.uv = input.uv; + output.color = input.color; + output.fogCoord = ComputeFogFactor(positionInputs.positionCS.z); + + // 计算Spline进度(基于UV.x,这是Spline Mesh的标准UV布局) + output.splineProgress = input.uv.x; + + // 计算Spline宽度(基于UV.y) + output.splineWidth = input.uv.y; + + return output; + } + + half4 frag(Varyings input) : SV_Target + { + // 计算流动UV + float2 flowUV = input.uv; + float time = _Time.y * _FlowSpeed; + + // 添加流动动画 - 沿着Spline方向流动 + flowUV.x += _FlowDirection.x * time; + flowUV.y += _FlowDirection.y * time * 0.1; // 垂直方向流动较少 + + // 添加复杂的噪声扰动 + float noise = FBM(flowUV * _FlowFrequency + time * 0.3) * _FlowNoise; + flowUV += noise * 0.1; + + // 添加扭曲效果 + float2 distortion = float2( + sin(flowUV.y * 10 + time) * _Distortion, + cos(flowUV.x * 8 + time * 1.2) * _Distortion + ); + flowUV += distortion; + + // 采样基础纹理 + float2 baseUV = TRANSFORM_TEX(flowUV, _BaseMap) * _BaseMapTiling.xy; + half4 baseMap = SAMPLE_TEXTURE2D(_BaseMap, sampler_BaseMap, baseUV); + + // 采样发光纹理 + float2 glowUV = TRANSFORM_TEX(flowUV, _GlowMap) * _GlowMapTiling.xy; + half4 glowMap = SAMPLE_TEXTURE2D(_GlowMap, sampler_GlowMap, glowUV); + + // 计算菲涅尔效果 + float3 viewDir = normalize(input.viewDirWS); + float3 normal = normalize(input.normalWS); + float fresnel = 1.0 - saturate(dot(viewDir, normal)); + fresnel = pow(fresnel, _FresnelPower) * _FresnelIntensity; + + // 计算边缘发光 + float edgeGlow = 1.0 - saturate(dot(normal, viewDir)); + edgeGlow = pow(edgeGlow, 1.0 / _EdgeGlowWidth); + + // 计算核心发光(基于UV.y的径向距离) + float coreDistance = abs(input.splineWidth - 0.5) * 2.0; // 0到1的距离 + float coreMask = 1.0 - smoothstep(0, _CoreWidth, coreDistance); + + // 核心脉冲效果 + float pulse = sin(time * _CorePulse) * 0.5 + 0.5; + coreMask *= (0.5 + pulse * 0.5); + + // Spline进度效果 - 创建能量波沿着Spline传播 + float splineMask = 1.0; + if (_SplineProgress > 0) + { + float progressDiff = abs(input.splineProgress - _SplineProgress); + splineMask = 1.0 - smoothstep(0, _SplineFade, progressDiff); + + // 添加能量波的尾迹效果 + float trail = exp(-progressDiff * 10) * 0.3; + splineMask += trail; + } + + // 添加Spline宽度遮罩 + float widthMask = 1.0 - smoothstep(_SplineWidth, 1.0, input.splineWidth); + widthMask = smoothstep(0, _SplineWidth, input.splineWidth); + + // 组合颜色 + half3 baseColor = _BaseColor.rgb * baseMap.rgb; + half3 glowColor = _GlowColor.rgb * glowMap.rgb * _GlowIntensity; + half3 edgeGlowColor = _EdgeGlowColor.rgb * _EdgeGlowIntensity; + half3 coreColor = _CoreColor.rgb * _CoreIntensity; + + // 最终颜色计算 + half3 finalColor = baseColor; + finalColor += glowColor * glowMap.a; + finalColor += edgeGlowColor * edgeGlow; + finalColor += coreColor * coreMask; + finalColor += fresnel * _GlowColor.rgb * 0.3; + + // 应用顶点颜色 + finalColor *= input.color.rgb; + + // 应用Spline进度遮罩 + finalColor *= splineMask; + + // 应用宽度遮罩 + finalColor *= widthMask; + + // 计算最终透明度 + half finalAlpha = _Alpha * _BaseColor.a * baseMap.a * input.color.a; + finalAlpha += glowMap.a * _GlowColor.a * 0.4; + finalAlpha += edgeGlow * _EdgeGlowColor.a * 0.3; + finalAlpha += coreMask * _CoreColor.a * 0.2; + finalAlpha *= splineMask; + finalAlpha *= widthMask; + + half4 color = half4(finalColor, finalAlpha); + + // 应用雾效 + color.rgb = MixFog(color.rgb, input.fogCoord); + + return color; + } + ENDHLSL + } + + // 阴影投射Pass + Pass + { + Name "ShadowCaster" + Tags { "LightMode" = "ShadowCaster" } + + ZWrite On + ZTest LEqual + ColorMask 0 + Cull [_Cull] + + HLSLPROGRAM + #pragma vertex ShadowPassVertex + #pragma fragment ShadowPassFragment + + #include "Packages/com.unity.render-pipelines.universal/Shaders/LitInput.hlsl" + #include "Packages/com.unity.render-pipelines.universal/Shaders/ShadowCasterPass.hlsl" + ENDHLSL + } + + // 深度Only Pass + Pass + { + Name "DepthOnly" + Tags { "LightMode" = "DepthOnly" } + + ZWrite On + ColorMask 0 + Cull [_Cull] + + HLSLPROGRAM + #pragma vertex DepthOnlyVertex + #pragma fragment DepthOnlyFragment + + #include "Packages/com.unity.render-pipelines.universal/Shaders/LitInput.hlsl" + #include "Packages/com.unity.render-pipelines.universal/Shaders/DepthOnlyPass.hlsl" + ENDHLSL + } + } + + Fallback "Hidden/Universal Render Pipeline/FallbackError" +} diff --git a/Assets/Assets/Shader/SplineGlowTubeSplineOptimized.shader.meta b/Assets/Assets/Shader/SplineGlowTubeSplineOptimized.shader.meta new file mode 100644 index 0000000..517c257 --- /dev/null +++ b/Assets/Assets/Shader/SplineGlowTubeSplineOptimized.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 84c10c50c4215074ea659b2fe4bb6c31 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Convention b/Assets/Convention index 3442602..3c96226 160000 --- a/Assets/Convention +++ b/Assets/Convention @@ -1 +1 @@ -Subproject commit 344260266c572467dddefda0d82264600c1aa0df +Subproject commit 3c962267abebcb106187c2c804deb157f8fa321d diff --git a/Assets/Scenes/Empty.unity b/Assets/Scenes/Empty.unity index cfb2082..765076f 100644 --- a/Assets/Scenes/Empty.unity +++ b/Assets/Scenes/Empty.unity @@ -122,66 +122,6 @@ NavMeshSettings: debug: m_Flags: 0 m_NavMeshData: {fileID: 0} ---- !u!1 &189182380 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 189182382} - - component: {fileID: 189182381} - m_Layer: 0 - m_Name: Note - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &189182381 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 189182380} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: a212c074803b6824cae48ffa7abb84cf, type: 3} - m_Name: - m_EditorClassIdentifier: - type: 0 - connections: - - invertTangents: 0 - _pointIndex: 0 - _computer: {fileID: 1179692613} - point: - _type: 0 - position: {x: 0, y: 0, z: 0} - color: {r: 1, g: 1, b: 1, a: 1} - normal: {x: 0, y: 0.1, z: 0} - size: 0.2 - tangent: {x: 12.099009, y: 9.764739, z: 37.36754} - tangent2: {x: 12.099009, y: 9.764739, z: 37.36754} - _transformSize: 1 - _transformNormals: 1 - _transformTangents: 1 ---- !u!4 &189182382 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 189182380} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 10, y: -5, z: 0} - m_LocalScale: {x: 5, y: 5, z: 5} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &214697392 GameObject: m_ObjectHideFlags: 0 @@ -368,469 +308,6 @@ MonoBehaviour: m_MipBias: 0 m_VarianceClampScale: 0.9 m_ContrastAdaptiveSharpening: 0 ---- !u!43 &363730654 -Mesh: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: Mesh - serializedVersion: 11 - m_SubMeshes: - - serializedVersion: 2 - firstByte: 0 - indexCount: 54 - topology: 0 - baseVertex: 0 - firstVertex: 0 - vertexCount: 20 - localAABB: - m_Center: {x: 0, y: -5, z: 0} - m_Extent: {x: 10, y: 0, z: 0.5} - m_Shapes: - vertices: [] - shapes: [] - channels: [] - fullWeights: [] - m_BindPose: [] - m_BoneNameHashes: - m_RootBoneNameHash: 0 - m_BonesAABB: [] - m_VariableBoneCountWeights: - m_Data: - m_MeshCompression: 0 - m_IsReadable: 1 - m_KeepVertices: 1 - m_KeepIndices: 1 - m_IndexFormat: 0 - m_IndexBuffer: 000001000200010003000200020003000400030005000400040005000600050007000600060007000800070009000800080009000a0009000b000a000a000b000c000b000d000c000c000d000e000d000f000e000e000f0010000f0011001000100011001200110013001200 - m_VertexData: - serializedVersion: 3 - m_VertexCount: 20 - m_Channels: - - stream: 0 - offset: 0 - format: 0 - dimension: 3 - - stream: 0 - offset: 12 - format: 0 - dimension: 3 - - stream: 0 - offset: 24 - format: 0 - dimension: 4 - - stream: 0 - offset: 40 - format: 0 - dimension: 4 - - stream: 0 - offset: 56 - format: 0 - dimension: 2 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - m_DataSize: 1280 - _typelessdata: 000020410000a0c00000003fa9845bbfffb5033f00000000141efe34c3c35335000080bf0000803f0000803f0000803f0000803f0000803f00000033000080b3000020410000a0c0000000bfa9845bbfffb5033f00000000c0c3d3347a783035000080bf0000803f0000803f0000803f0000803f0000803f0000803f000000338ee3f8400000a0c00000003f3eb24abf9e5d1c3f0000000094480b35808d3435000080bf0000803f0000803f0000803f0000803f0000803f00000033348ee33d8ee3f8400000a0c0000000bf3eb24abf9e5d1c3f0000000093c5ee346ec21a35000080bf0000803f0000803f0000803f0000803f0000803f0000803f3c8ee33d1cc7b1400000a0c00000003fb0ed2dbfbed73b3f000000001d4a2c3501871f35000080bf0000803f0000803f0000803f0000803f0000803f00000033368e633e1cc7b1400000a0c0000000bfb0ed2dbfbed73b3f000000001c4a2c3500871f35000080bf0000803f0000803f0000803f0000803f0000803f0000803f3a8e633e545555400000a0c00000003f2fa6f8bec6c85f3f000000003f8774355bd90735000080bf0000803f0000803f0000803f0000803f0000803f00000000aaaaaa3e545555400000a0c0000000bf2fa6f8bec6c85f3f00000000408774355bd90735000080bf0000803f0000803f0000803f0000803f0000803f0000803facaaaa3ee0388e3f0000a0c00000003f96753abe5eb87b3f00000000eab19a357b2d6534000080bf0000803f0000803f0000803f0000803f0000803f00000000388ee33ee0388e3f0000a0c0000000bf96753abe5eb87b3f000000008942ce35fac89834000080bf0000803f0000803f0000803f0000803f0000803f0000803f3a8ee33ee8388ebf0000a0c00000003fa1753a3e5eb87b3f0000000097e9003647fbbeb4000080bf0000803f0000803f0000803f0000803f0000803f00000000e3380e3fe8388ebf0000a0c0000000bfa1753a3e5eb87b3f00000000e9b11a36882de5b4000080bf0000803f0000803f0000803f0000803f0000803f0000803fe5380e3f585555c00000a0c00000003f33a6f83ec5c85f3f000000003b87f4355bd987b5000080bf0000803f0000803f0000803f0000803f0000803f00000000aaaa2a3f585555c00000a0c0000000bf33a6f83ec5c85f3f00000000d104a335cd2135b5000080bf0000803f0000803f0000803f0000803f0000803f0000803facaa2a3f1cc7b1c00000a0c00000003fb0ed2d3fbed73b3f000000001bb8e534f5b3d4b4000080bf0000803f0000803f0000803f0000803f0000803f00000000721c473f1cc7b1c00000a0c0000000bfb0ed2d3fbed73b3f0000000028b8e53401b4d4b4000080bf0000803f0000803f0000803f0000803f0000803f0000803f721c473f90e3f8c00000a0c00000003f3fb24a3f9d5d1c3f000000005b2e1f358c584eb5000080bf0000803f0000803f0000803f0000803f0000803f000080b3388e633f90e3f8c00000a0c0000000bf3fb24a3f9d5d1c3f000000005b2e1f358c584eb5000080bf0000803f0000803f0000803f0000803f0000803f0000803f3a8e633f000020c10000a0c00000003fa9845b3fffb5033f000000005c69a934282d0db5000080bf0000803f0000803f0000803f0000803f0000803f000080b30000803f000020c10000a0c0000000bfa9845b3fffb5033f000000000000000000000000000080bf0000803f0000803f0000803f0000803f0000803f0000803f0000803f - m_CompressedMesh: - m_Vertices: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_UV: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Normals: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Tangents: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Weights: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_NormalSigns: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_TangentSigns: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_FloatColors: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_BoneIndices: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_Triangles: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_UVInfo: 0 - m_LocalAABB: - m_Center: {x: 0, y: -5, z: 0} - m_Extent: {x: 10, y: 0, z: 0.5} - m_MeshUsageFlags: 0 - m_CookingOptions: 30 - m_BakedConvexCollisionMesh: - m_BakedTriangleCollisionMesh: - m_MeshMetrics[0]: 1 - m_MeshMetrics[1]: 1 - m_MeshOptimizationFlags: 1 - m_StreamData: - serializedVersion: 2 - offset: 0 - size: 0 - path: ---- !u!1001 &388332281 -PrefabInstance: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - serializedVersion: 3 - m_TransformParent: {fileID: 1220250194} - m_Modifications: - - target: {fileID: 3087020546848097253, guid: a9919bda663539247848cb56fdf9bd16, type: 3} - propertyPath: m_AnchorMax.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3087020546848097253, guid: a9919bda663539247848cb56fdf9bd16, type: 3} - propertyPath: m_AnchorMin.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3087020546848097253, guid: a9919bda663539247848cb56fdf9bd16, type: 3} - propertyPath: m_SizeDelta.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3087020546848097253, guid: a9919bda663539247848cb56fdf9bd16, type: 3} - propertyPath: m_SizeDelta.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3087020546848097253, guid: a9919bda663539247848cb56fdf9bd16, type: 3} - propertyPath: m_AnchoredPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3087020546848097253, guid: a9919bda663539247848cb56fdf9bd16, type: 3} - propertyPath: m_AnchoredPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3147078739715781144, guid: a9919bda663539247848cb56fdf9bd16, type: 3} - propertyPath: m_Pivot.x - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 3147078739715781144, guid: a9919bda663539247848cb56fdf9bd16, type: 3} - propertyPath: m_Pivot.y - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 3147078739715781144, guid: a9919bda663539247848cb56fdf9bd16, type: 3} - propertyPath: m_AnchorMax.x - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 3147078739715781144, guid: a9919bda663539247848cb56fdf9bd16, type: 3} - propertyPath: m_AnchorMax.y - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 3147078739715781144, guid: a9919bda663539247848cb56fdf9bd16, type: 3} - propertyPath: m_AnchorMin.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3147078739715781144, guid: a9919bda663539247848cb56fdf9bd16, type: 3} - propertyPath: m_AnchorMin.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3147078739715781144, guid: a9919bda663539247848cb56fdf9bd16, type: 3} - propertyPath: m_SizeDelta.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3147078739715781144, guid: a9919bda663539247848cb56fdf9bd16, type: 3} - propertyPath: m_SizeDelta.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3147078739715781144, guid: a9919bda663539247848cb56fdf9bd16, type: 3} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3147078739715781144, guid: a9919bda663539247848cb56fdf9bd16, type: 3} - propertyPath: m_LocalPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3147078739715781144, guid: a9919bda663539247848cb56fdf9bd16, type: 3} - propertyPath: m_LocalPosition.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3147078739715781144, guid: a9919bda663539247848cb56fdf9bd16, type: 3} - propertyPath: m_LocalRotation.w - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 3147078739715781144, guid: a9919bda663539247848cb56fdf9bd16, type: 3} - propertyPath: m_LocalRotation.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3147078739715781144, guid: a9919bda663539247848cb56fdf9bd16, type: 3} - propertyPath: m_LocalRotation.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3147078739715781144, guid: a9919bda663539247848cb56fdf9bd16, type: 3} - propertyPath: m_LocalRotation.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3147078739715781144, guid: a9919bda663539247848cb56fdf9bd16, type: 3} - propertyPath: m_AnchoredPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3147078739715781144, guid: a9919bda663539247848cb56fdf9bd16, type: 3} - propertyPath: m_AnchoredPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3147078739715781144, guid: a9919bda663539247848cb56fdf9bd16, type: 3} - propertyPath: m_LocalEulerAnglesHint.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3147078739715781144, guid: a9919bda663539247848cb56fdf9bd16, type: 3} - propertyPath: m_LocalEulerAnglesHint.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3147078739715781144, guid: a9919bda663539247848cb56fdf9bd16, type: 3} - propertyPath: m_LocalEulerAnglesHint.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3991903693944834738, guid: a9919bda663539247848cb56fdf9bd16, type: 3} - propertyPath: m_AnchorMax.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3991903693944834738, guid: a9919bda663539247848cb56fdf9bd16, type: 3} - propertyPath: m_AnchorMin.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3991903693944834738, guid: a9919bda663539247848cb56fdf9bd16, type: 3} - propertyPath: m_SizeDelta.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3991903693944834738, guid: a9919bda663539247848cb56fdf9bd16, type: 3} - propertyPath: m_SizeDelta.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3991903693944834738, guid: a9919bda663539247848cb56fdf9bd16, type: 3} - propertyPath: m_AnchoredPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3991903693944834738, guid: a9919bda663539247848cb56fdf9bd16, type: 3} - propertyPath: m_AnchoredPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 5089501564412322616, guid: a9919bda663539247848cb56fdf9bd16, type: 3} - propertyPath: m_AnchorMax.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 5089501564412322616, guid: a9919bda663539247848cb56fdf9bd16, type: 3} - propertyPath: m_AnchorMax.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 5999487350223004818, guid: a9919bda663539247848cb56fdf9bd16, type: 3} - propertyPath: m_Name - value: ColorfulWindow Variant - objectReference: {fileID: 0} - - target: {fileID: 7203334864474038998, guid: a9919bda663539247848cb56fdf9bd16, type: 3} - propertyPath: m_AnchorMax.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 7203334864474038998, guid: a9919bda663539247848cb56fdf9bd16, type: 3} - propertyPath: m_SizeDelta.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 8272756723881927395, guid: a9919bda663539247848cb56fdf9bd16, type: 3} - propertyPath: m_AnchorMax.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 8272756723881927395, guid: a9919bda663539247848cb56fdf9bd16, type: 3} - propertyPath: m_SizeDelta.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 8856811975194892372, guid: a9919bda663539247848cb56fdf9bd16, type: 3} - propertyPath: m_AnchorMax.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 8856811975194892372, guid: a9919bda663539247848cb56fdf9bd16, type: 3} - propertyPath: m_AnchorMax.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 9049578114976927507, guid: a9919bda663539247848cb56fdf9bd16, type: 3} - propertyPath: m_AnchorMax.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 9049578114976927507, guid: a9919bda663539247848cb56fdf9bd16, type: 3} - propertyPath: m_AnchorMax.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 9049578114976927507, guid: a9919bda663539247848cb56fdf9bd16, type: 3} - propertyPath: m_SizeDelta.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 9049578114976927507, guid: a9919bda663539247848cb56fdf9bd16, type: 3} - propertyPath: m_SizeDelta.y - value: 0 - objectReference: {fileID: 0} - m_RemovedComponents: [] - m_RemovedGameObjects: [] - m_AddedGameObjects: [] - m_AddedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: a9919bda663539247848cb56fdf9bd16, type: 3} ---- !u!1 &500533161 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 500533165} - - component: {fileID: 500533164} - - component: {fileID: 500533163} - - component: {fileID: 500533162} - m_Layer: 0 - m_Name: Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!65 &500533162 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 500533161} - m_Material: {fileID: 0} - m_IncludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_ExcludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_LayerOverridePriority: 0 - m_IsTrigger: 0 - m_ProvidesContacts: 0 - m_Enabled: 1 - serializedVersion: 3 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!23 &500533163 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 500533161} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: c9df5bd7c0c95734c906359d7be9cf25, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - 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 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &500533164 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 500533161} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!4 &500533165 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 500533161} - serializedVersion: 2 - m_LocalRotation: {x: -0.20000118, y: -0.37064072, z: -0.08206725, w: 0.9032663} - m_LocalPosition: {x: -0.13107921, y: -0.25, z: -8.58} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: -24.97, y: -44.62, z: 0} --- !u!1 &800919132 GameObject: m_ObjectHideFlags: 0 @@ -909,7 +386,7 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1179692607 +--- !u!1 &1500120297 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -917,11 +394,11 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1179692614} - - component: {fileID: 1179692613} - - component: {fileID: 1179692612} - - component: {fileID: 1179692611} - - component: {fileID: 1179692615} + - component: {fileID: 1500120302} + - component: {fileID: 1500120301} + - component: {fileID: 1500120300} + - component: {fileID: 1500120299} + - component: {fileID: 1500120298} m_Layer: 0 m_Name: Spline m_TagString: Untagged @@ -929,13 +406,91 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!23 &1179692611 +--- !u!114 &1500120298 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1500120297} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 77ab80dc0820f9d4a8cd9fddbbc89057, type: 3} + m_Name: + m_EditorClassIdentifier: + updateMethod: 0 + _spline: {fileID: 1500120301} + _autoUpdate: 1 + _rotationModifier: + blend: 1 + useClippedPercent: 0 + keys: [] + _offsetModifier: + blend: 1 + useClippedPercent: 0 + keys: [] + _colorModifier: + blend: 1 + useClippedPercent: 0 + keys: [] + _sizeModifier: + blend: 1 + useClippedPercent: 0 + keys: [] + _clipFromSample: + position: {x: -2.130623, y: 0, z: 0.29484487} + up: {x: 0, y: 1, z: 0} + forward: {x: 0.99922734, y: 0, z: 0.039301995} + color: {r: 1, g: 1, b: 1, a: 1} + size: 1 + percent: 0 + _clipToSample: + position: {x: -2.9152186, y: 0, z: -0.85720444} + up: {x: 0, y: 1, z: 0} + forward: {x: -0.9965616, y: 0, z: 0.082855135} + color: {r: 1, g: 1, b: 1, a: 1} + size: 1 + percent: 1 + _loopSamples: 0 + _clipFrom: 0 + _clipTo: 1 + animClipFrom: 0 + animClipTo: 1 + multithreaded: 0 + buildOnAwake: 1 + buildOnEnable: 0 + _baked: 0 + _markDynamic: 1 + _size: 1 + _color: {r: 1, g: 1, b: 1, a: 1} + _offset: {x: 0, y: 0, z: 0} + _normalMethod: 1 + _calculateTangents: 1 + _useSplineSize: 1 + _useSplineColor: 1 + _rotation: 0 + _flipFaces: 0 + _doubleSided: 0 + _uvMode: 0 + _uvScale: {x: 1, y: 1} + _uvOffset: {x: 0, y: 0} + _uvRotation: 0 + _meshIndexFormat: 0 + _bakedMesh: {fileID: 0} + colliderUpdateRate: 0.2 + _sides: 12 + _roundCapLatitude: 6 + _capMode: 0 + _revolve: 360 + _capUVScale: 1 + _uvTwist: 0 +--- !u!23 &1500120299 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1179692607} + m_GameObject: {fileID: 1500120297} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -949,7 +504,7 @@ MeshRenderer: m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: - - {fileID: 2100000, guid: af9cad4fa840abe4ba048352ccc03230, type: 2} + - {fileID: 2100000, guid: 940e2ccb7a734374597d87762baed94f, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 @@ -971,21 +526,21 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} ---- !u!33 &1179692612 +--- !u!33 &1500120300 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1179692607} - m_Mesh: {fileID: 363730654} ---- !u!114 &1179692613 + m_GameObject: {fileID: 1500120297} + m_Mesh: {fileID: 1608175468} +--- !u!114 &1500120301 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1179692607} + m_GameObject: {fileID: 1500120297} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 598e68924c9f6324bbfd049d3bae754c, type: 3} @@ -1004,19 +559,33 @@ MonoBehaviour: _spline: points: - _type: 0 - position: {x: 10, y: -5, z: 0} + position: {x: -2.130623, y: 0, z: 0.29484487} color: {r: 1, g: 1, b: 1, a: 1} - normal: {x: 0, y: 0.1, z: 0} + normal: {x: 0, y: 1, z: 0} size: 1 - tangent: {x: 70.49504, y: 43.823696, z: 186.83769} - tangent2: {x: 70.49504, y: 43.823696, z: 186.83769} + tangent: {x: -2.130623, y: 0, z: 0.29484487} + tangent2: {x: -2.130623, y: 0, z: 0.29484487} - _type: 0 - position: {x: -10, y: -5, z: 0} + position: {x: 2.8402758, y: 0, z: 0.49036217} color: {r: 1, g: 1, b: 1, a: 1} - normal: {x: 0, y: 0.9999625, z: 0} + normal: {x: 0, y: 1, z: 0} size: 1 - tangent: {x: 11.490425, y: -3.0578232, z: -243.94751} - tangent2: {x: 11.490425, y: -3.0578232, z: -243.94751} + tangent: {x: 2.8402758, y: 0, z: 0.49036217} + tangent2: {x: 2.8402758, y: 0, z: 0.49036217} + - _type: 0 + position: {x: 1.1939334, y: 0, z: -1.1988435} + color: {r: 1, g: 1, b: 1, a: 1} + normal: {x: 0, y: 1, z: 0} + size: 1 + tangent: {x: 1.1939334, y: 0, z: -1.1988435} + tangent2: {x: 1.1939334, y: 0, z: -1.1988435} + - _type: 0 + position: {x: -2.9152186, y: 0, z: -0.85720444} + color: {r: 1, g: 1, b: 1, a: 1} + normal: {x: 0, y: 1, z: 0} + size: 1 + tangent: {x: -2.9152186, y: 0, z: -0.85720444} + tangent2: {x: -2.9152186, y: 0, z: -0.85720444} type: 0 linearAverageDirection: 1 customValueInterpolation: @@ -1027,25 +596,7 @@ MonoBehaviour: m_RotationOrder: 4 customNormalInterpolation: serializedVersion: 2 - m_Curve: - - serializedVersion: 3 - time: 0 - value: 0 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - weightedMode: 0 - inWeight: 0 - outWeight: 0 - - serializedVersion: 3 - time: 1 - value: 1 - inSlope: 0 - outSlope: 0 - tangentMode: 0 - weightedMode: 0 - inWeight: 0 - outWeight: 0 + m_Curve: [] m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 @@ -1059,80 +610,184 @@ MonoBehaviour: _space: 1 _sampleMode: 0 _subscribers: - - {fileID: 1179692615} + - {fileID: 1500120298} _rawSamples: - - position: {x: 10, y: -5, z: 0} - up: {x: 0, y: 0.1, z: 0} - forward: {x: -1, y: 0, z: 0} + - position: {x: -2.130623, y: 0, z: 0.29484487} + up: {x: 0, y: 1, z: 0} + forward: {x: 0.99922734, y: 0, z: 0.039301995} color: {r: 1, g: 1, b: 1, a: 1} size: 1 percent: 0 - - position: {x: 7.7777777, y: -5, z: 0} - up: {x: 0, y: 0.13086292, z: 0} - forward: {x: -1, y: 0, z: 0} + - position: {x: -1.5419923, y: 0, z: 0.3269104} + up: {x: 0, y: 1, z: 0} + forward: {x: 0.9978113, y: 0, z: 0.066125505} + color: {r: 1, g: 1, b: 1, a: 1} + size: 1 + percent: 0.037037037037037035 + - position: {x: -0.89889884, y: 0, z: 0.37448812} + up: {x: 0, y: 1, z: 0} + forward: {x: 0.9968334, y: 0, z: 0.07951837} + color: {r: 1, g: 1, b: 1, a: 1} + size: 1 + percent: 0.07407407407407407 + - position: {x: -0.22857384, y: 0, z: 0.42982185} + up: {x: 0, y: 1, z: 0} + forward: {x: 0.9964982, y: 0, z: 0.08361412} color: {r: 1, g: 1, b: 1, a: 1} size: 1 percent: 0.1111111111111111 - - position: {x: 5.5555553, y: -5, z: 0} - up: {x: 0, y: 0.21357551, z: 0} - forward: {x: -1, y: 0, z: 0} + - position: {x: 0.4417512, y: 0, z: 0.48515564} + up: {x: 0, y: 1, z: 0} + forward: {x: 0.9968334, y: 0, z: 0.07951838} + color: {r: 1, g: 1, b: 1, a: 1} + size: 1 + percent: 0.14814814814814814 + - position: {x: 1.084845, y: 0, z: 0.5327333} + up: {x: 0, y: 1, z: 0} + forward: {x: 0.9978113, y: 0, z: 0.066125505} + color: {r: 1, g: 1, b: 1, a: 1} + size: 1 + percent: 0.18518518518518517 + - position: {x: 1.6734754, y: 0, z: 0.56479883} + up: {x: 0, y: 1, z: 0} + forward: {x: 0.99922734, y: 0, z: 0.03930198} color: {r: 1, g: 1, b: 1, a: 1} size: 1 percent: 0.2222222222222222 - - position: {x: 3.333333, y: -5, z: 0} - up: {x: 0, y: 0.33332366, z: 0} - forward: {x: -1, y: 0, z: 0} + - position: {x: 2.1804116, y: 0, z: 0.57359624} + up: {x: 0, y: 1, z: 0} + forward: {x: 0.9999296, y: 0, z: -0.011863331} + color: {r: 1, g: 1, b: 1, a: 1} + size: 1 + percent: 0.25925925925925924 + - position: {x: 2.5784223, y: 0, z: 0.5513693} + up: {x: 0, y: 1, z: 0} + forward: {x: 0.9928107, y: 0, z: -0.11969498} + color: {r: 1, g: 1, b: 1, a: 1} + size: 1 + percent: 0.2962962962962963 + - position: {x: 2.8402758, y: 0, z: 0.49036217} + up: {x: 0, y: 1, z: 0} + forward: {x: 0.91216385, y: 0, z: -0.40982568} color: {r: 1, g: 1, b: 1, a: 1} size: 1 percent: 0.3333333333333333 - - position: {x: 1.1111107, y: -5, z: 0} - up: {x: 0, y: 0.475293, z: 0} - forward: {x: -1, y: 0, z: 0} + - position: {x: 2.961331, y: 0, z: 0.37426078} + up: {x: 0, y: 1, z: 0} + forward: {x: 0.38034195, y: 0, z: -0.92484593} + color: {r: 1, g: 1, b: 1, a: 1} + size: 1 + percent: 0.37037037037037035 + - position: {x: 2.9664989, y: 0, z: 0.20266433} + up: {x: 0, y: 1, z: 0} + forward: {x: -0.23585126, y: 0, z: -0.9717892} + color: {r: 1, g: 1, b: 1, a: 1} + size: 1 + percent: 0.4074074074074074 + - position: {x: 2.8728762, y: 0, z: -0.008313768} + up: {x: 0, y: 1, z: 0} + forward: {x: -0.520449, y: 0, z: -0.85389274} color: {r: 1, g: 1, b: 1, a: 1} size: 1 percent: 0.4444444444444444 - - position: {x: -1.1111116, y: -5, z: 0} - up: {x: 0, y: 0.6246695, z: 0} - forward: {x: -1, y: 0, z: 0} + - position: {x: 2.6975589, y: 0, z: -0.24256006} + up: {x: 0, y: 1, z: 0} + forward: {x: -0.6585399, y: 0, z: -0.7525458} + color: {r: 1, g: 1, b: 1, a: 1} + size: 1 + percent: 0.48148148148148145 + - position: {x: 2.457644, y: 0, z: -0.4839611} + up: {x: 0, y: 1, z: 0} + forward: {x: -0.74364984, y: 0, z: -0.66856927} + color: {r: 1, g: 1, b: 1, a: 1} + size: 1 + percent: 0.5185185185185185 + - position: {x: 2.1702273, y: 0, z: -0.7164034} + up: {x: 0, y: 1, z: 0} + forward: {x: -0.8081909, y: 0, z: -0.58892053} color: {r: 1, g: 1, b: 1, a: 1} size: 1 percent: 0.5555555555555556 - - position: {x: -3.333334, y: -5, z: 0} - up: {x: 0, y: 0.76663893, z: 0} - forward: {x: -1, y: 0, z: 0} + - position: {x: 1.8524058, y: 0, z: -0.92377335} + up: {x: 0, y: 1, z: 0} + forward: {x: -0.8654735, y: 0, z: -0.5009547} + color: {r: 1, g: 1, b: 1, a: 1} + size: 1 + percent: 0.5925925925925926 + - position: {x: 1.5212753, y: 0, z: -1.0899582} + up: {x: 0, y: 1, z: 0} + forward: {x: -0.921243, y: 0, z: -0.38898763} + color: {r: 1, g: 1, b: 1, a: 1} + size: 1 + percent: 0.6296296296296297 + - position: {x: 1.1939334, y: 0, z: -1.1988435} + up: {x: 0, y: 1, z: 0} + forward: {x: -0.97366804, y: 0, z: -0.22797044} color: {r: 1, g: 1, b: 1, a: 1} size: 1 percent: 0.6666666666666666 - - position: {x: -5.5555553, y: -5, z: 0} - up: {x: 0, y: 0.88638705, z: 0} - forward: {x: -1, y: 0, z: 0} + - position: {x: 0.8454678, y: 0, z: -1.2500291} + up: {x: 0, y: 1, z: 0} + forward: {x: -0.9970514, y: 0, z: -0.07673654} + color: {r: 1, g: 1, b: 1, a: 1} + size: 1 + percent: 0.7037037037037037 + - position: {x: 0.44632712, y: 0, z: -1.2594277} + up: {x: 0, y: 1, z: 0} + forward: {x: -0.9997862, y: 0, z: 0.02067723} + color: {r: 1, g: 1, b: 1, a: 1} + size: 1 + percent: 0.7407407407407407 + - position: {x: 0.0066464357, y: 0, z: -1.2353967} + up: {x: 0, y: 1, z: 0} + forward: {x: -0.9965616, y: 0, z: 0.08285513} color: {r: 1, g: 1, b: 1, a: 1} size: 1 percent: 0.7777777777777778 - - position: {x: -7.7777786, y: -5, z: 0} - up: {x: 0, y: 0.9690996, z: 0} - forward: {x: -1, y: 0, z: 0} + - position: {x: -0.46343935, y: 0, z: -1.1862936} + up: {x: 0, y: 1, z: 0} + forward: {x: -0.99262506, y: 0, z: 0.12122455} + color: {r: 1, g: 1, b: 1, a: 1} + size: 1 + percent: 0.8148148148148148 + - position: {x: -0.9537952, y: 0, z: -1.1204758} + up: {x: 0, y: 1, z: 0} + forward: {x: -0.98984516, y: 0, z: 0.14214993} + color: {r: 1, g: 1, b: 1, a: 1} + size: 1 + percent: 0.8518518518518519 + - position: {x: -1.4542859, y: 0, z: -1.0463006} + up: {x: 0, y: 1, z: 0} + forward: {x: -0.9888666, y: 0, z: 0.1488048} color: {r: 1, g: 1, b: 1, a: 1} size: 1 percent: 0.8888888888888888 - - position: {x: -10, y: -5, z: 0} - up: {x: 0, y: 0.9999625, z: 0} - forward: {x: -1, y: 0, z: 0} + - position: {x: -1.9547765, y: 0, z: -0.9721254} + up: {x: 0, y: 1, z: 0} + forward: {x: -0.98984516, y: 0, z: 0.14214991} + color: {r: 1, g: 1, b: 1, a: 1} + size: 1 + percent: 0.9259259259259259 + - position: {x: -2.4451323, y: 0, z: -0.9063074} + up: {x: 0, y: 1, z: 0} + forward: {x: -0.99262506, y: 0, z: 0.12122455} + color: {r: 1, g: 1, b: 1, a: 1} + size: 1 + percent: 0.9629629629629629 + - position: {x: -2.9152186, y: 0, z: -0.85720444} + up: {x: 0, y: 1, z: 0} + forward: {x: -0.9965616, y: 0, z: 0.082855135} color: {r: 1, g: 1, b: 1, a: 1} size: 1 percent: 1 - _nodes: - - node: {fileID: 189182381} - pointIndex: 0 - - node: {fileID: 1329252894} - pointIndex: 1 ---- !u!4 &1179692614 + _nodes: [] +--- !u!4 &1500120302 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1179692607} + m_GameObject: {fileID: 1500120297} serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} @@ -1141,293 +796,171 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1179692615 -MonoBehaviour: +--- !u!43 &1608175468 +Mesh: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1179692607} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: bf69cfa06c48dba428c5c4d626d57ab7, type: 3} - m_Name: - m_EditorClassIdentifier: - updateMethod: 0 - _spline: {fileID: 1179692613} - _autoUpdate: 1 - _rotationModifier: - blend: 1 - useClippedPercent: 0 - keys: [] - _offsetModifier: - blend: 1 - useClippedPercent: 0 - keys: [] - _colorModifier: - blend: 1 - useClippedPercent: 0 - keys: [] - _sizeModifier: - blend: 1 - useClippedPercent: 0 - keys: [] - _clipFromSample: - position: {x: 10, y: -5, z: 0} - up: {x: 0, y: 0.1, z: 0} - forward: {x: -1, y: 0, z: 0} - color: {r: 1, g: 1, b: 1, a: 1} - size: 1 - percent: 0 - _clipToSample: - position: {x: -10, y: -5, z: 0} - up: {x: 0, y: 0.9999625, z: 0} - forward: {x: -1, y: 0, z: 0} - color: {r: 1, g: 1, b: 1, a: 1} - size: 1 - percent: 1 - _loopSamples: 0 - _clipFrom: 0 - _clipTo: 1 - animClipFrom: 0 - animClipTo: 1 - multithreaded: 0 - buildOnAwake: 1 - buildOnEnable: 1 - _baked: 0 - _markDynamic: 1 - _size: 1 - _color: {r: 1, g: 1, b: 1, a: 1} - _offset: {x: 0, y: 0, z: 0} - _normalMethod: 1 - _calculateTangents: 1 - _useSplineSize: 1 - _useSplineColor: 1 - _rotation: 0 - _flipFaces: 0 - _doubleSided: 0 - _uvMode: 0 - _uvScale: {x: 1, y: 1} - _uvOffset: {x: 0, y: 0} - _uvRotation: 0 - _meshIndexFormat: 0 - _bakedMesh: {fileID: 0} - colliderUpdateRate: 0.2 - autoOrient: 0 - updateFrameInterval: 0 - _slices: 1 ---- !u!1 &1220250190 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1220250194} - - component: {fileID: 1220250193} - - component: {fileID: 1220250192} - - component: {fileID: 1220250191} - m_Layer: 5 - m_Name: Canvas - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1220250191 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1220250190} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} - m_Name: - m_EditorClassIdentifier: - m_IgnoreReversedGraphics: 1 - m_BlockingObjects: 0 - m_BlockingMask: + m_Name: Tube + serializedVersion: 11 + m_SubMeshes: + - serializedVersion: 2 + firstByte: 0 + indexCount: 1944 + topology: 0 + baseVertex: 0 + firstVertex: 0 + vertexCount: 364 + localAABB: + m_Center: {x: 0.24787366, y: 0, z: -0.34287977} + m_Extent: {x: 3.2045197, y: 0.50000006, z: 1.416441} + m_Shapes: + vertices: [] + shapes: [] + channels: [] + fullWeights: [] + m_BindPose: [] + m_BoneNameHashes: + m_RootBoneNameHash: 0 + m_BonesAABB: [] + m_VariableBoneCountWeights: + m_Data: + m_MeshCompression: 0 + m_IsReadable: 1 + m_KeepVertices: 0 + m_KeepIndices: 0 + m_IndexFormat: 0 + m_IndexBuffer: 000001000d0001000e000d00010002000e0002000f000e00020003000f00030010000f0003000400100004001100100004000500110005001200110005000600120006001300120006000700130007001400130007000800140008001500140008000900150009001600150009000a0016000a00170016000a000b0017000b00180017000b000c0018000c00190018000d000e001a000e001b001a000e000f001b000f001c001b000f0010001c0010001d001c00100011001d0011001e001d00110012001e0012001f001e00120013001f00130020001f001300140020001400210020001400150021001500220021001500160022001600230022001600170023001700240023001700180024001800250024001800190025001900260025001a001b0027001b00280027001b001c0028001c00290028001c001d0029001d002a0029001d001e002a001e002b002a001e001f002b001f002c002b001f0020002c0020002d002c00200021002d0021002e002d00210022002e0022002f002e00220023002f00230030002f0023002400300024003100300024002500310025003200310025002600320026003300320027002800340028003500340028002900350029003600350029002a0036002a00370036002a002b0037002b00380037002b002c0038002c00390038002c002d0039002d003a0039002d002e003a002e003b003a002e002f003b002f003c003b002f0030003c0030003d003c00300031003d0031003e003d00310032003e0032003f003e00320033003f00330040003f0034003500410035004200410035003600420036004300420036003700430037004400430037003800440038004500440038003900450039004600450039003a0046003a00470046003a003b0047003b00480047003b003c0048003c00490048003c003d0049003d004a0049003d003e004a003e004b004a003e003f004b003f004c004b003f0040004c0040004d004c00410042004e0042004f004e00420043004f00430050004f0043004400500044005100500044004500510045005200510045004600520046005300520046004700530047005400530047004800540048005500540048004900550049005600550049004a0056004a00570056004a004b0057004b00580057004b004c0058004c00590058004c004d0059004d005a0059004e004f005b004f005c005b004f0050005c0050005d005c00500051005d0051005e005d00510052005e0052005f005e00520053005f00530060005f0053005400600054006100600054005500610055006200610055005600620056006300620056005700630057006400630057005800640058006500640058005900650059006600650059005a0066005a00670066005b005c0068005c00690068005c005d0069005d006a0069005d005e006a005e006b006a005e005f006b005f006c006b005f0060006c0060006d006c00600061006d0061006e006d00610062006e0062006f006e00620063006f00630070006f0063006400700064007100700064006500710065007200710065006600720066007300720066006700730067007400730068006900750069007600750069006a0076006a00770076006a006b0077006b00780077006b006c0078006c00790078006c006d0079006d007a0079006d006e007a006e007b007a006e006f007b006f007c007b006f0070007c0070007d007c00700071007d0071007e007d00710072007e0072007f007e00720073007f00730080007f0073007400800074008100800075007600820076008300820076007700830077008400830077007800840078008500840078007900850079008600850079007a0086007a00870086007a007b0087007b00880087007b007c0088007c00890088007c007d0089007d008a0089007d007e008a007e008b008a007e007f008b007f008c008b007f0080008c0080008d008c00800081008d0081008e008d00820083008f00830090008f0083008400900084009100900084008500910085009200910085008600920086009300920086008700930087009400930087008800940088009500940088008900950089009600950089008a0096008a00970096008a008b0097008b00980097008b008c0098008c00990098008c008d0099008d009a0099008d008e009a008e009b009a008f0090009c0090009d009c00900091009d0091009e009d00910092009e0092009f009e00920093009f009300a0009f0093009400a0009400a100a00094009500a1009500a200a10095009600a2009600a300a20096009700a3009700a400a30097009800a4009800a500a40098009900a5009900a600a50099009a00a6009a00a700a6009a009b00a7009b00a800a7009c009d00a9009d00aa00a9009d009e00aa009e00ab00aa009e009f00ab009f00ac00ab009f00a000ac00a000ad00ac00a000a100ad00a100ae00ad00a100a200ae00a200af00ae00a200a300af00a300b000af00a300a400b000a400b100b000a400a500b100a500b200b100a500a600b200a600b300b200a600a700b300a700b400b300a700a800b400a800b500b400a900aa00b600aa00b700b600aa00ab00b700ab00b800b700ab00ac00b800ac00b900b800ac00ad00b900ad00ba00b900ad00ae00ba00ae00bb00ba00ae00af00bb00af00bc00bb00af00b000bc00b000bd00bc00b000b100bd00b100be00bd00b100b200be00b200bf00be00b200b300bf00b300c000bf00b300b400c000b400c100c000b400b500c100b500c200c100b600b700c300b700c400c300b700b800c400b800c500c400b800b900c500b900c600c500b900ba00c600ba00c700c600ba00bb00c700bb00c800c700bb00bc00c800bc00c900c800bc00bd00c900bd00ca00c900bd00be00ca00be00cb00ca00be00bf00cb00bf00cc00cb00bf00c000cc00c000cd00cc00c000c100cd00c100ce00cd00c100c200ce00c200cf00ce00c300c400d000c400d100d000c400c500d100c500d200d100c500c600d200c600d300d200c600c700d300c700d400d300c700c800d400c800d500d400c800c900d500c900d600d500c900ca00d600ca00d700d600ca00cb00d700cb00d800d700cb00cc00d800cc00d900d800cc00cd00d900cd00da00d900cd00ce00da00ce00db00da00ce00cf00db00cf00dc00db00d000d100dd00d100de00dd00d100d200de00d200df00de00d200d300df00d300e000df00d300d400e000d400e100e000d400d500e100d500e200e100d500d600e200d600e300e200d600d700e300d700e400e300d700d800e400d800e500e400d800d900e500d900e600e500d900da00e600da00e700e600da00db00e700db00e800e700db00dc00e800dc00e900e800dd00de00ea00de00eb00ea00de00df00eb00df00ec00eb00df00e000ec00e000ed00ec00e000e100ed00e100ee00ed00e100e200ee00e200ef00ee00e200e300ef00e300f000ef00e300e400f000e400f100f000e400e500f100e500f200f100e500e600f200e600f300f200e600e700f300e700f400f300e700e800f400e800f500f400e800e900f500e900f600f500ea00eb00f700eb00f800f700eb00ec00f800ec00f900f800ec00ed00f900ed00fa00f900ed00ee00fa00ee00fb00fa00ee00ef00fb00ef00fc00fb00ef00f000fc00f000fd00fc00f000f100fd00f100fe00fd00f100f200fe00f200ff00fe00f200f300ff00f3000001ff00f300f4000001f40001010001f400f5000101f50002010101f500f6000201f60003010201f700f8000401f80005010401f800f9000501f90006010501f900fa000601fa0007010601fa00fb000701fb0008010701fb00fc000801fc0009010801fc00fd000901fd000a010901fd00fe000a01fe000b010a01fe00ff000b01ff000c010b01ff0000010c0100010d010c01000101010d0101010e010d01010102010e0102010f010e01020103010f01030110010f0104010501110105011201110105010601120106011301120106010701130107011401130107010801140108011501140108010901150109011601150109010a0116010a01170116010a010b0117010b01180117010b010c0118010c01190118010c010d0119010d011a0119010d010e011a010e011b011a010e010f011b010f011c011b010f0110011c0110011d011c01110112011e0112011f011e01120113011f01130120011f0113011401200114012101200114011501210115012201210115011601220116012301220116011701230117012401230117011801240118012501240118011901250119012601250119011a0126011a01270126011a011b0127011b01280127011b011c0128011c01290128011c011d0129011d012a0129011e011f012b011f012c012b011f0120012c0120012d012c01200121012d0121012e012d01210122012e0122012f012e01220123012f01230130012f0123012401300124013101300124012501310125013201310125012601320126013301320126012701330127013401330127012801340128013501340128012901350129013601350129012a0136012a01370136012b012c0138012c01390138012c012d0139012d013a0139012d012e013a012e013b013a012e012f013b012f013c013b012f0130013c0130013d013c01300131013d0131013e013d01310132013e0132013f013e01320133013f01330140013f0133013401400134014101400134013501410135014201410135013601420136014301420136013701430137014401430138013901450139014601450139013a0146013a01470146013a013b0147013b01480147013b013c0148013c01490148013c013d0149013d014a0149013d013e014a013e014b014a013e013f014b013f014c014b013f0140014c0140014d014c01400141014d0141014e014d01410142014e0142014f014e01420143014f01430150014f0143014401500144015101500145014601520146015301520146014701530147015401530147014801540148015501540148014901550149015601550149014a0156014a01570156014a014b0157014b01580157014b014c0158014c01590158014c014d0159014d015a0159014d014e015a014e015b015a014e014f015b014f015c015b014f0150015c0150015d015c01500151015d0151015e015d01520153015f01530160015f0153015401600154016101600154015501610155016201610155015601620156016301620156015701630157016401630157015801640158016501640158015901650159016601650159015a0166015a01670166015a015b0167015b01680167015b015c0168015c01690168015c015d0169015d016a0169015d015e016a015e016b016a01 + m_VertexData: + serializedVersion: 3 + m_VertexCount: 364 + m_Channels: + - stream: 0 + offset: 0 + format: 0 + dimension: 3 + - stream: 0 + offset: 12 + format: 0 + dimension: 3 + - stream: 0 + offset: 24 + format: 0 + dimension: 4 + - stream: 0 + offset: 40 + format: 0 + dimension: 4 + - stream: 0 + offset: 56 + format: 0 + dimension: 2 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + m_DataSize: 23296 + _typelessdata: 179e09c02fbd3bb3a6614b3ffcfa20bd2bbdbbb35ecd7f3fc971ecb4000080bf3b8ee3b30000803f0000803f0000803f0000803f0000803f00000033000080b3f57209c0000080bef43e3a3fff690bbdfeffffbefe875d3f0d9bb43caeb35dbfd2c0ffbe0000803f0000803f0000803f0000803f0000803fb0aaaa3d000080b31cfd08c0dab3ddbe4d6e0b3ffdfaa0bcd7b35dbf60cdff3e5b3b263d99feffbee4755dbf0000803f0000803f0000803f0000803f0000803faeaa2a3e00000000215c08c0000000bfeaf5963e00000000000080bf00000034909e453d1ddcfcb3aeb37fbf0000803f0000803f0000803f0000803f0000803f0200803e0000000026bb07c0dab3ddbee479383d00fba03cdab35dbf57cdffbee30c303d58fdff3eaa6e5dbf0000803f0000803f0000803f0000803f0000803facaaaa3e000000004d4507c0fbff7fbe2e240dbe006a0b3dfbffffbeff875dbf96a0d63ca2b25d3f2daaffbe0000803f0000803f0000803f0000803f0000803f5655d53e000000002b1a07c02fbdbb33ecae51be00fb203d2fbd3b345ecd7fbf86151d3bd1ff7f3ffb15c6380000803f0000803f0000803f0000803f0000803f0100003f000000004d4507c00900803e22240dbe006a0b3d0900003ff9875dbf059eb4bca8b35d3fe2c0ff3e0000803f0000803f0000803f0000803f0000803f5655153f0000000026bb07c0d8b3dd3ed479383d00fba03cd8b35d3f5bcdffbe293d26bd93feff3ee4755d3f0000803f0000803f0000803f0000803f0000803facaa2a3f00000000215c08c00000003ff0f5963e000000000000803f00000035dd9f45bd990200b5acb37f3f0000803f0000803f0000803f0000803f0000803f0000403f000000331cfd08c0d6b3dd3e4f6e0b3ffffaa0bcd4b35d3f6acdff3e8c0d30bd6bfdffbea46e5d3f0000803f0000803f0000803f0000803f0000803f5655553f00000033f57209c0feff7f3ef63e3a3ffd690bbdf8ffff3eff875d3f94a0d6bca1b25dbf2aaaff3e0000803f0000803f0000803f0000803f0000803facaa6a3f00000033179e09c030de4cb2a6614b3ffcfa20bd2bdeccb25ecd7f3f689c6bbb94ff7fbf954b14b90000803f0000803f0000803f0000803f0000803f0000803f00000033679bc9bf2ebd3bb3ae68533fc16c87bd2fbdbbb390707f3fd1e51cbbd1ff7fbfa97126b90000803f0000803f0000803f0000803f0000803f0000003320b4173d420ac9bfffff7fbe354c423f42906abd010000bf9f375d3fa1f5f83ca3b35dbf8a87ffbe0000803f0000803f0000803f0000803f0000803fb0aaaa3d20b4173db47dc7bfdab3ddbe8b8c133fbf6c07bdd8b35dbf9070ff3e5af65e3dbcffffbeb1435dbf0000803f0000803f0000803f0000803f0000803faeaa2a3e20b4173d0160c5bfffffffbecd60a73e00000000000080bf000000003cd9823d000000001a7a7fbf0000803f0000803f0000803f0000803f0000803f0200803e20b4173d4e42c3bfd9b3ddbe1ca29e3dc06c073dd9b35dbf8c70ffbe2050663df2ffff3e1a3c5dbf0000803f0000803f0000803f0000803f0000803facaaaa3e28b4173dc0b5c1bff8ff7fbe505bd7bd40906a3df8ffffbea1375dbfe737093dd7b35d3fb86cffbe0000803f0000803f0000803f0000803f0000803f5655d53e28b4173d9b24c1bf2ebdbb33861f30bec06c873d2ebd3b3490707fbfb049eb3ae5ff7f3f7cd9f9380000803f0000803f0000803f0000803f0000803f0100003f28b4173dc1b5c1bf0800803e345bd7bd00906a3d0800003f9a375dbfe8f6f8bc9fb35d3f9987ff3e0000803f0000803f0000803f0000803f0000803f5655153f28b4173d4e42c3bfd8b3dd3e14a29e3dc06c073dd8b35d3f9070ffbe3df75ebdbeffff3eb0435d3f0000803f0000803f0000803f0000803f0000803facaa2a3f28b4173d0160c5bfffffff3ed260a73e000000000000803f0100a03418da82bd51ac9fb4187a7f3f0000803f0000803f0000803f0000803f0000803f0000403f30b4173db47dc7bfd6b3dd3e8c8c133fc06c07bdd6b35d3f9670ff3e1c5166bdfbffffbe163c5d3f0000803f0000803f0000803f0000803f0000803f5655553f30b4173d420ac9bffdff7f3e374c423f3e906abdfbffff3e9f375d3ff03709bdd6b35dbfbc6cff3e0000803f0000803f0000803f0000803f0000803facaa6a3f30b4173d679bc9bf2ede4cb2ae68533fc16c87bd2fdeccb290707f3fcdd39cbaf3ff7fbf1f52a6b80000803f0000803f0000803f0000803f0000803f0000803f30b4173de54b70bf2fbd3bb3b4765f3f8cdaa2bd2bbdbbb37a307f3f46b89cbaf5ff7fbfe625c8b80000803f0000803f0000803f0000803f0000803f0000003324b4973dcdee6ebfffff7fbe835e4e3f10098dbdffffffbe1e005d3fece91c3dc8b35dbf903fffbe0000803f0000803f0000803f0000803f0000803fb0aaaa3d24b4973d10356bbfdab3ddbe94aa1f3f7dda22bdd7b35dbf7c30ff3e607d893de8ffffbe15095dbf0000803f0000803f0000803f0000803f0000803faeaa2a3e24b4973d3c1e66bf000000bfebbcbf3e00000000000080bf000040342fae9f3d606a3fb47f387fbf0000803f0000803f0000803f0000803f0000803f0100803e24b4973d680761bfdab3ddbe5e49003e80da223ddab35dbf7230ffbe3a168b3df0ffff3e13055dbf0000803f0000803f0000803f0000803f0000803facaaaa3e28b4973dab4d5dbff9ff7fbec0196abd10098d3df9ffffbe20005dbfb073223ddab35d3f7831ffbe0000803f0000803f0000803f0000803f0000803f5655d53e28b4973d94f05bbf2fbdbb3344cefdbd80daa23d2fbd3b3479307fbfb4a84c3afbff7f3f7bf982380000803f0000803f0000803f0000803f0000803f0100003f28b4973dab4d5dbf0800803e88196abd10098d3d0800003f19005dbfc8e91cbdc4b35d3fa43fff3e0000803f0000803f0000803f0000803f0000803f5655153f28b4973d680761bfd8b3dd3e5a49003e80da223dd8b35d3f7630ffbee77d89bde4ffff3e14095d3f0000803f0000803f0000803f0000803f0000803facaa2a3f28b4973d3c1e66bf0100003ff0bcbf3e000000000000803ffeffff343aaf9fbd7b38ffb47c387f3f0000803f0000803f0000803f0000803f0000803f0000403f2cb4973d10356bbfd6b3dd3e95aa1f3f7fda22bdd4b35d3f8230ff3ec6168bbd010000bf0d055d3f0000803f0000803f0000803f0000803f0000803f5655553f2cb4973dcdee6ebffdff7f3e855e4e3f0f098dbdfbffff3e20005d3fcd7322bdd9b35dbf7a31ff3e0000803f0000803f0000803f0000803f0000803facaa6a3f2cb4973de54b70bf2fde4cb2b4765f3f8cdaa2bd2adeccb27a307f3f55d3bfb9feff7fbf4c55f5b70000803f0000803f0000803f0000803f0000803f0000803f2cb4973d5e6f8abe2ebd3bb310966d3fe33dabbd2dbdbbb3821a7f3fe4b8bfb9feff7fbfd7fc00b80000803f0000803f0000803f0000803f0000803f00000033348ee33d389187be000080be5a7f5c3fb44c94bd000000bf18ed5c3f2e72283dd4b35dbf0022ffbe0000803f0000803f0000803f0000803f0000803fb0aaaa3d348ee33dff767fbedab3ddbe6fcf2d3fdf3d2bbdd8b35dbf821aff3ee8e0913df3ffffbe8ef35cbf0000803f0000803f0000803f0000803f0000803faeaa2a3e348ee33d430f6abe000000bf9b11dc3e00000000000080bf000080b39871a83df6217f33f5217fbf0000803f0000803f0000803f0000803f0000803f0100803e348ee33d87a754bedab3ddbebb08393edf3d2b3dd8b35dbf7b1affbe5ee0913defffff3e91f35cbf0000803f0000803f0000803f0000803f0000803facaaaa3e388ee33d15fc44befaff7fbe007edbbab84c943dfaffffbe1aed5cbf2f72283dd6b35d3ffa21ffbe0000803f0000803f0000803f0000803f0000803f5655d53e388ee33dcb3f3fbe2ebdbb3398238cbde03dab3d2ebd3b34821a7fbf80d441330000803ff47640340000803f0000803f0000803f0000803f0000803f0100003f388ee33d16fc44be0800803e0077dbbab44c943d0800003f13ed5cbf3c7228bdcfb35d3f1022ff3e0000803f0000803f0000803f0000803f0000803f5655153f388ee33d87a754bed8b3dd3eb708393ee03d2b3dd8b35d3f811affbe70e191bdf5ffff3e8cf35c3f0000803f0000803f0000803f0000803f0000803facaa2a3f388ee33d440f6abe0000003fa011dc3e000000b30000803f00008034b472a8bddee180b4f2217f3f0000803f0000803f0000803f0000803f0000803f0000403f3c8ee33d00777fbed6b3dd3e71cf2d3fe73d2bbdd4b35d3f8a1aff3ef4e091bdfdffffbe8bf35c3f0000803f0000803f0000803f0000803f0000803f5655553f3c8ee33d399187befeff7f3e5c7f5c3fbb4c94bdfcffff3e1aed5c3f447228bdd5b35dbffb21ff3e0000803f0000803f0000803f0000803f0000803facaa6a3f3c8ee33d5e6f8abe2ede4cb210966d3fe33dabbd2cdeccb2821a7f3f84c4bf39feff7fbfaf9700380000803f0000803f0000803f0000803f0000803f0000803f3c8ee33de6d1cd3e2fbd3bb368cb7b3f85daa2bd2cbdbbb37a307f3f09cdbf39feff7fbf7e58f4370000803f0000803f0000803f0000803f0000803f0000003324b4173e158cd03effff7fbe38b36a3f10098dbdffffffbe1e005d3fb073223dd7b35dbf7e31ffbe0000803f0000803f0000803f0000803f0000803fb0aaaa3d24b4173e8effd73edab3ddbe49ff3b3f8dda22bdd7b35dbf7c30ff3ecb168b3dfbffffbe0f055dbf0000803f0000803f0000803f0000803f0000803faeaa2a3e24b4173e372de23e000000bf5566f83e00000000000080bf000040342dae9f3d5f6a3fb47f387fbf0000803f0000803f0000803f0000803f0000803f0100803e24b4173edf5aec3edab3ddbe329c713e80da223ddab35dbf7230ffbed07c893ddfffff3e18095dbf0000803f0000803f0000803f0000803f0000803facaaaa3e26b4173e59cef33ef9ff7fbe90315b3d10098d3df9ffffbe20005dbfe7e91c3dcab35d3f8b3fffbe0000803f0000803f0000803f0000803f0000803f5655d53e26b4173e8888f63e2fbdbb33e04459bc88daa23d2fbd3b3479307fbf9fae4cbafbff7f3ff34082b80000803f0000803f0000803f0000803f0000803f0100003f26b4173e58cef33e0800803ec8315b3d09098d3d0900003f1a005dbfdc7322bdd2b35d3f9131ff3e0000803f0000803f0000803f0000803f0000803f5655153f26b4173edf5aec3ed8b3dd3e2e9c713e80da223dd8b35d3f7630ffbe44178bbdf7ffff3e0f055d3f0000803f0000803f0000803f0000803f0000803facaa2a3f26b4173e362de23e0100003f5a66f83efeff7fb30000803ffeffff3442af9fbd9cdb00b57c387f3f0000803f0000803f0000803f0000803f0000803f0000403f28b4173e8effd73ed6b3dd3e4aff3b3f8fda22bdd4b35d3f8230ff3e5a7d89bdefffffbe12095d3f0000803f0000803f0000803f0000803f0000803f5655553f28b4173e158cd03efdff7f3e3ab36a3f0f098dbdfbffff3e20005d3fe8e91cbdc9b35dbf8b3fff3e0000803f0000803f0000803f0000803f0000803facaa6a3f28b4173ee6d1cd3e2fde4cb268cb7b3f85daa2bd2cdeccb27a307f3f2fb99c3af3ff7fbfa7e6c7380000803f0000803f0000803f0000803f0000803f0000803f28b4173ecda0863f2ebd3bb3bf0c843fc06c87bd2ebdbbb390707f3fa8d19c3af5ff7fbff012a6380000803f0000803f0000803f0000803f0000803f000000332ea13d3ef231873fffff7fbe04fd763f43906abd010000bf9f375d3f1038093dd5b35dbfc26cffbe0000803f0000803f0000803f0000803f0000803fb0aaaa3d2ea13d3e80be883fdab3ddbe5b3d483fbe6c07bdd7b35dbf9070ff3e1751663df7ffffbe173c5dbf0000803f0000803f0000803f0000803f0000803faeaa2a3e2ea13d3e33dc8a3fffffffbe3661083f00000000000080bf000000000ed9823d000000001a7a7fbf0000803f0000803f0000803f0000803f0000803f0100803e2ea13d3ee6f98c3fd9b3ddbe260a913ec06c073dd9b35dbf8c70ffbe66f55e3db6ffff3eb3435dbf0000803f0000803f0000803f0000803f0000803facaaaa3e30a13d3e74868e3ff8ff7fbe2c2bce3d40906a3df8ffffbea1375dbfecf6f83ca5b35d3f8187ffbe0000803f0000803f0000803f0000803f0000803f5655d53e30a13d3e99178f3f2ebdbb33e08e0a3dc06c873d2ebd3b3490707fbf9754ebbae5ff7f3fe328f9b80000803f0000803f0000803f0000803f0000803f0000003f30a13d3e73868e3f0800803e482bce3d00906a3d0800003f9a375dbf023809bdd1b35d3fd06cff3e0000803f0000803f0000803f0000803f0000803f5655153f30a13d3ee6f98c3fd8b3dd3e240a913ec06c073dd8b35d3f9070ffbef45166bdf7ffff3e173c5d3f0000803f0000803f0000803f0000803f0000803facaa2a3f30a13d3e33dc8a3fffffff3e3861083f000000000000803f0100803415da82bd1a7a7fb4187a7f3f0000803f0000803f0000803f0000803f0000803f0000403f32a13d3e80be883fd6b3dd3e5c3d483fc06c07bdd6b35d3f9870ff3e54f65ebdc4ffffbeaf435d3f0000803f0000803f0000803f0000803f0000803f5655553f32a13d3ef231873ffdff7f3e06fd763f40906abdfdffff3ea0375d3fedf6f8bca4b35dbf8687ff3e0000803f0000803f0000803f0000803f0000803facaa6a3f32a13d3ecda0863f2ede4cb2bf0c843fc06c87bd2edeccb290707f3ff3e21c3bcfff7fbf075226390000803f0000803f0000803f0000803f0000803f0000803f32a13d3e84b0d33f2fbd3bb3ad3e883f3cfb20bd2bbdbbb35ecd7f3ff7191d3bd1ff7fbf0ca1c5380000803f0000803f0000803f0000803f0000803f00000033368e633eca06d43f000080bea85a7f3fbf690bbdfeffffbefe875d3f821ba93cd1b35dbf37c8ffbe0000803f0000803f0000803f0000803f0000803fb0aaaa3d368e633e7bf2d43fdab3ddbe018a503ffdfaa0bcd7b35dbf60cdff3e6430043de8ffffbe728c5dbf0000803f0000803f0000803f0000803f0000803faeaa2a3e368e633e7134d63f000000bfa996103f00000000000080bf00000034f965103d43d7ffb343d77fbf0000803f0000803f0000803f0000803f0000803f0100803e368e633e6776d73fdab3ddbea446a13e00fba03cdab35dbf58cdffbebcd8eb3c11ffff3ebd945dbf0000803f0000803f0000803f0000803f0000803facaaaa3e388e633e1962d83ffbff7fbea24a073e006a0b3dfbffffbeff875dbf3a686f3c20b35d3f7ee6ffbe0000803f0000803f0000803f0000803f0000803f5655d53e388e633e5db8d83f2fbdbb33c87f853d00fb203d2fbd3b345ecd7fbf432664bb99ff7f3f08650fb90000803f0000803f0000803f0000803f0000803f0000003f388e633e1862d83f0900803eae4a073ec0690b3d0900003ff9875dbf141ba9bccab35d3f4ac8ff3e0000803f0000803f0000803f0000803f0000803f5555153f388e633e6776d73fd8b3dd3ea246a13e00fba03cd8b35d3f5ccdffbe9c3104bde4ffff3e728c5d3f0000803f0000803f0000803f0000803f0000803facaa2a3f388e633e7134d63f0000003fac96103f000000000000803f00000035806710bd43d7ffb443d77f3f0000803f0000803f0000803f0000803f0000803f0000403f3a8e633e7bf2d43fd6b3dd3e038a503ffffaa0bcd4b35d3f6acdff3ef0d9ebbc26ffffbeb6945d3f0000803f0000803f0000803f0000803f0000803f5655553f3a8e633ec906d43ffeff7f3eaa5a7f3ffd690bbdf8ffff3eff875d3ff4696fbc21b35dbf7ce6ff3e0000803f0000803f0000803f0000803f0000803facaa6a3f3a8e633e84b0d33f30de4cb2ad3e883f3cfb20bd2bdeccb25ecd7f3fd497953b51ff7fbf01453c390000803f0000803f0000803f0000803f0000803f0000803f3a8e633e0ced0b402fbd3bb3746a893ffd5d423c2cbdbbb364fb7f3f3bb5953b52ff7fbfe8a663b80000803f0000803f0000803f0000803f0000803f00000033a0bd843e07e00b40ffff7fbe90d7803f0154283c000000bfd9af5d3f9ec493bbc8b35dbf88fdffbe0000803f0000803f0000803f0000803f0000803fb0aaaa3da0bd843e75bc0b40d9b3ddbe0dd6523ffe5fc23bd7b35dbf62fbff3e046874bc4affffbea0ab5dbf0000803f0000803f0000803f0000803f0000803faeaa2a3ea0bd843edd8b0b40000000bf35d7123f00000000000080bf000000345fc2aebc16f1ffb316f17fbf0000803f0000803f0000803f0000803f0000803f0000803ea0bd843e455b0b40dab3ddbebab0a53e0060c2bbdab35dbf5cfbffbe2772b4bc71fbff3ecca25dbf0000803f0000803f0000803f0000803f0000803facaaaa3ea0bd843eb3370b40fbff7fbe1cfd0f3e005428bcfbffffbedaaf5dbf32c189bc7bb05d3f8ee6ffbe0000803f0000803f0000803f0000803f0000803f5655d53ea1bd843eae2a0b402fbdbb3314cc963d005e42bc2fbd3b3463fb7fbf50bfe8bb59fe7f3f7d17b1380000803f0000803f0000803f0000803f0000803f0000003fa1bd843eb3370b400900803e2afd0f3e015428bc0a00003fd4af5dbfe9be933bc4b35d3f9cfdff3e0000803f0000803f0000803f0000803f0000803f5555153fa1bd843e455b0b40d8b3dd3eb8b0a53e0060c2bbd8b35d3f60fbffbefd64743c49ffff3ea2ab5d3f0000803f0000803f0000803f0000803f0000803fabaa2a3fa2bd843edd8b0b400000003f38d7123f000000000000803f0000003551c1ae3c16f1ffb416f17f3f0000803f0000803f0000803f0000803f0000803f0000403fa2bd843e75bc0b40d5b3dd3e0fd6523f0060c23bd5b35d3f6cfbff3eb570b43c81fbffbec8a25d3f0000803f0000803f0000803f0000803f0000803f5655553fa2bd843e07e00b40fdff7f3e91d7803fff53283cfbffff3edaaf5d3f61c0893c7cb05dbf8fe6ff3e0000803f0000803f0000803f0000803f0000803facaa6a3fa2bd843e0ced0b402fde4cb2746a893ffd5d423c2cdeccb264fb7f3f70e11d3cf5fc7fbf32d7efb80000803f0000803f0000803f0000803f0000803f0000803fa2bd843e6ad928402fbd3bb37b1d863fc022f53d2fbdbbb3d8287e3f83be1c3cf5fc7fbffc2f97ba0000803f0000803f0000803f0000803f0000803f0000003324b4973e0b562840000080be72347b3f004bd43d000000bfd01b5c3fb0a975bdd7b35dbfcf26febe0000803f0000803f0000803f0000803f0000803fb0aaaa3d25b4973e24ef2640d9b3ddbebfb04c3f8022753dd9b35dbfd428fe3e3cbff9bdd7f4ffbe9a815bbf0000803f0000803f0000803f0000803f0000803faeaa2a3e25b4973edf042540000000bf8b260d3f00000000000080bf000000347fec1abe9e0dfdb39e0d7dbf0000803f0000803f0000803f0000803f0000803f0000803e26b4973e9a1a2340d9b3ddbeaa389b3e802275bdd9b35dbfd428febeda5f0fbedbd3ff3e13d65abf0000803f0000803f0000803f0000803f0000803facaaaa3e26b4973eb3b32140faff7fbe0cc5f83d004bd4bdfaffffbed11b5cbf0eb7babd8a975d3ff018fcbe0000803f0000803f0000803f0000803f0000803f5655d53e26b4973e543021402fbdbb33e021613dc022f5bd2fbd3b34d8287ebf014c93bc40f57f3f27140e3b0000803f0000803f0000803f0000803f0000803f0000003f26b4973eb3b321400800803e28c5f83d004bd4bd0800003fca1b5cbf18a9753dd2b35d3fe226fe3e0000803f0000803f0000803f0000803f0000803f5555153f26b4973e9a1a2340d7b3dd3ea8389b3e802275bdd7b35d3fd828febef6bef93ddaf4ff3e9a815b3f0000803f0000803f0000803f0000803f0000803fabaa2a3f26b4973edf0425400000003f8d260d3f000000000000803f0000c03448ec1a3e38cabdb4a00d7d3f0000803f0000803f0000803f0000803f0000803f0000403f26b4973e24ef2640d5b3dd3ec1b04c3f8122753dd6b35d3fdd28fe3ed85f0f3ee5d3ffbe11d65a3f0000803f0000803f0000803f0000803f0000803f5655553f27b4973e0c562840fdff7f3e74347b3f3d4bd43df9ffff3ed11b5c3faab6ba3d8c975dbff318fc3e0000803f0000803f0000803f0000803f0000803facaa6a3f27b4973e6ad928402ede4cb27b1d863fc022f53d2edeccb2d8287e3f822bd83cd9e87fbf4b7f50bb0000803f0000803f0000803f0000803f0000803f0000803f28b4973e5fe442402ebd3bb3284a723fb1d4d13e2fbdbbb39183693f689cc63cd9e87fbf287832bc0000803f0000803f0000803f0000803f0000803f00000000aaaaaa3e94224140ffff7fbeaea5623f03b8b53e020000bf9f3a4a3fb18a4cbeeeb25dbf99b2eabe0000803f0000803f0000803f0000803f0000803facaaaa3daaaaaa3eb9553c40d9b3ddbe44e9373fa0d4513ed9b35dbf9083e93ef732c6be99d6ffbe925f46bf0000803f0000803f0000803f0000803f0000803facaa2a3eaaaaaa3e14c73540000000bfbf10fb3e00000000000080bf000080b34d54f1be5cc761335cc761bf0000803f0000803f0000803f0000803f0000803f0000803eaaaaaa3e6f382f40d9b3ddbef94e863ea0d451bed9b35dbf8e83e9bef43fdbbe1825ff3e73fc40bf0000803f0000803f0000803f0000803f0000803facaaaa3eaaaaaa3e946b2a40f8ff7fbe7858c33d01b8b5bef9ffffbea33a4abf2e228abec0215d3fe9ddd9be0000803f0000803f0000803f0000803f0000803f5655d53eabaaaa3ec9a928402ebdbb3370690c3db0d4d1be2ebd3b34928369bf6a4324bda1c07f3ff09a933c000080bf0000803f0000803f0000803f0000803f0000003fabaaaa3e946b2a400800803e9058c33d00b8b5be0800003f9c3a4abfc78a4c3eeab25d3fa3b2ea3e000080bf0000803f0000803f0000803f0000803f5555153fabaaaa3e6f382f40d7b3dd3ef64e863ea0d451bed7b35d3f9483e9bee832c63e9dd6ff3e955f463f0000803f0000803f0000803f0000803f0000803fabaa2a3facaaaa3e14c735400000003fc510fb3e000000000000803f0000a0345454f13e991c8db45ac7613f0000803f0000803f0000803f0000803f0000803f0000403facaaaa3eba553c40d5b3dd3e46e9373fc0d4513ed5b35d3f9883e93ef23fdb3e2825ffbe6efc403f0000803f0000803f0000803f0000803f0000803f5555553facaaaa3e94224140fdff7f3eb1a5623f00b8b53efdffff3ea23a4a3f1c228a3ec0215dbff5ddd93e0000803f0000803f0000803f0000803f0000803fabaa6a3facaaaa3e5fe442402dde4cb2284a723fb1d4d13e2edeccb29183693f2e12653db5847fbfa6d6cdbc0000803f0000803f0000803f0000803f0000803f0000803facaaaa3ec81e5b402ebd3bb39a7e103fb3c26c3f30bdbbb332bcc23e8807bf3cb5847fbf8d4168bd0000803f0000803f0000803f0000803f0000803f000000002ea1bd3ebf275740ffff7fbedef8093f690a4d3f000000bf41a5a83ebce6e0bea8515dbf9c147abe0000803f0000803f0000803f0000803f0000803facaaaa3d2ea1bd3e9d524c40d9b3ddbe274ef03eb0c2ec3ed9b35dbf2cbc423e616348bfd6bbffbe2d0fbebe0000803f0000803f0000803f0000803f0000803facaa2a3e2ea1bd3e72863d40ffffffbe1b9fbf3e00000000000080bf010080b391f66abfb841cb32b941cbbe0000803f0000803f0000803f0000803f0000803f0000803e2ea1bd3e47ba2e40d9b3ddbe11f08e3eb0c2ecbed9b35dbf2cbc42bea6774ebfb8f8ff3ef493a1be0000803f0000803f0000803f0000803f0000803facaaaa3e2ea1bd3e25e52340f9ff7fbef598563e6a0a4dbffbffffbe44a5a8bedcacf4be7a825d3fa2121bbe000080bf0000803f0000803f0000803f0000803f5655d53e2fa1bd3e1cee1f402ebdbb330a823c3eb4c26cbf31bd3b3431bcc2bed02fb1bcf0957f3f506d573d000080bf0000803f0000803f0000803f0000803f0000003f2fa1bd3e26e523400800803efb98563e630a4dbf0a00003f40a5a8bed0e6e03ea2515d3fa4147a3e000080bf0000803f0000803f0000803f0000803f5555153f2fa1bd3e47ba2e40d7b3dd3e10f08e3eb1c2ecbed8b35d3f31bc42be6063483fd9bbff3e320fbe3e0000803f0000803f0000803f0000803f0000803fabaa2a3f30a1bd3e73863d400000003f1e9fbf3e000000350000803f000000348ef66a3f632f02b5c241cb3e0000803f0000803f0000803f0000803f0000803f0000403f30a1bd3e9e524c40d6b3dd3e284ef03ebec2ec3ed4b35d3f2ebc423ea1774e3fc5f8ffbef893a13e0000803f0000803f0000803f0000803f0000803f5555553f30a1bd3ebf275740fdff7f3edff8093f690a4d3ffeffff3e45a5a83edcacf43e79825dbfb2121b3e0000803f0000803f0000803f0000803f0000803fabaa6a3f30a1bd3ec81e5b402ede4cb29a7e103fb3c26c3f30deccb232bcc23e8955a33ce4a57fbf519546bd0000803f0000803f0000803f0000803f0000803f0000803f30a1bd3e04f45c402fbd3bb37c8bad3d2cc7783f2cbdbbb3fa8271beca914abce4a57fbf88a950bd0000803f0000803f0000803f0000803f0000803f00000000b297d03e74c95840000080bebbe6cd3db472573f030000bfc32751beb271ffbec3515dbf094a783d0000803f0000803f0000803f0000803f0000803facaaaa3db397d03e91674d40d9b3ddbe7d26133e2ec7f83ed7b35dbffe82f1bddbcf5abfe07effbe3f4e123e0000803f0000803f0000803f0000803f0000803facaa2a3eb397d03e1edb3d40000000bf3d874f3e00000000000080bf000000008f717bbf00000000a456403e0000803f0000803f0000803f0000803f0000803f0000803eb397d03eab4e2e40d9b3ddbefef3853e2ec7f8bed7b35dbffa82f13d19b358bfc5f0ff3e98a73b3e0000803f0000803f0000803f0000803f0000803facaaaa3eb497d03ec7ec2240faff7fbe8f0d9c3eb87257bffaffffbec227513e4c70f7be6fb05d3f6aa9033e0000803f0000803f0000803f0000803f0000803f5555d53eb497d03e38c21e402fbdbb335e24a43e2cc778bf2cbd3b34fa82713eb4d4193c0ecc7f3fc8741e3d000080bf0000803f0000803f0000803f0000803f0000003fb497d03ec8ec22400800803e8d0d9c3eb17257bf0900003fbb27513ebe71ff3ebf515d3fd44978bd0000803f0000803f0000803f0000803f0000803f5555153fb497d03eab4e2e40d7b3dd3efef3853e30c7f8bed7b35d3ffc82f13dddcf5a3fe17eff3e2f4e12be0000803f0000803f0000803f0000803f0000803fabaa2a3fb497d03e1fdb3d400000003f3a874f3e000000350000803f0000c0b38f717b3fcf3a02b5975640be0000803f0000803f0000803f0000803f0000803f0000403fb597d03e91674d40d5b3dd3e7c26133e31c7f83ed6b35d3f0583f1bd19b3583fcaf0ffbe8da73bbe0000803f0000803f0000803f0000803f0000803f5555553fb597d03e75c95840fdff7f3eb7e6cd3db672573ffbffff3ec12751be5170f73e6eb05dbf46a903be0000803f0000803f0000803f0000803f0000803fabaa6a3fb597d03e04f45c402ede4cb27c8bad3d2cc7783f2bdeccb2fa8271be6e04d2bbcde77fbfb255d8bc0000803f0000803f0000803f0000803f0000803f0000803fb697d03e4b3053402ebd3bb3d87d89beb8985a3f2ebdbbb3243c05bfe5b967bccde77fbfe117bebc0000803f0000803f0000803f0000803f0000803f00000000388ee33e21874f40ffff7fbe6e486fbe684f3d3fffffffbe06c5e6be3963e2befa9a5dbf3a79703e0000803f0000803f0000803f0000803f0000803facaaaa3d388ee33ebf864540d8b3ddbe8abf0dbeb198da3ed9b35dbf233c85bea23d41bf30e2ffbe217cd93e0000803f0000803f0000803f0000803f0000803facaa2a3e388ee33e34dd3740feffffbe5f3608bc00000000000080bf02004833678a5dbffd6fc832aa47003f0000803f0000803f0000803f0000803f0000803f0000803e388ee33ea9332a40d8b3ddbe7771f93db198dabed9b35dbf243c853e26783ebf78fdff3efeeee23e0000803f0000803f0000803f0000803f0000803fabaaaa3e388ee33e47332040f8ff7fbea4415e3e694f3dbff9ffffbe0dc5e63e1ea9d8be5db25d3fe565883e0000803f0000803f0000803f0000803f0000803f5555d53e398ee33e1d8a1c402ebdbb3371fa803eb8985abf2ebd3b34253c053f80db343c42f17f3fbd5c943c0000803f0000803f0000803f0000803f0000803f0000003f398ee33e483320400800803e9e415e3e614f3dbf0900003f08c5e63e4c63e23ef49a5d3f487970be0000803f0000803f0000803f0000803f0000803f5555153f398ee33ea9332a40d6b3dd3e7b71f93db398dabed9b35d3f273c853ea53d413f34e2ff3e147cd9be0000803f0000803f0000803f0000803f0000803fabaa2a3f3a8ee33e35dd3740ffffff3ebd3608bc010000350000803f01000ab46a8a5d3fde0e00b5a64700bf0000803f0000803f0000803f0000803f0000803f0000403f3a8ee33ec0864540d5b3dd3e8ebf0dbec098da3ed5b35d3f263c85be25783e3f85fdffbeeaeee2be0000803f0000803f0000803f0000803f0000803f5555553f3a8ee33e21874f40fcff7f3e70486fbe694f3d3ffdffff3e09c5e6be25a9d83e5bb25dbfe16588be0000803f0000803f0000803f0000803f0000803fabaa6a3f3a8ee33e4b3053402ede4cb2d87d89beb8985a3f2edeccb2243c05bfd1f501bc64f87fbf053955bc0000803f0000803f0000803f0000803f0000803f0000803f3a8ee33eaab9444030bd3bb3766312bfd8a6403f29bdbbb3109628bfd57124bc64f87fbfd0ea3bbc0000803f0000803f0000803f0000803f0000803f00000000bd84f63eba7f4140000080be691807bf5fd7263ffeffffbefcff11bf62dbc5be04ad5dbf5797a23e0000803f0000803f0000803f0000803f0000803facaaaa3dbd84f63e3caf3840dab3ddbee07bd0bedda6c03ed7b35dbf1396a8be022c29bfabf9ffbed34d0f3f0000803f0000803f0000803f0000803f0000803facaa2a3ebd84f63ecea42c40000000bfac6178be00000000000080bf000080b3691742bf38ed26b339ed263f0000803f0000803f0000803f0000803f0000803f0000803ebd84f63e619a2040dbb3ddbe38979fbdcea6c0bed9b35dbf0d96a83e97ff26bfefffff3e02d2113f0000803f0000803f0000803f0000803f0000803fabaaaa3ebe84f63ee2c91740fbff7fbe48792e3d60d726bffbffffbefeff113f204ebebe7bb25d3f1c42ab3e0000803f0000803f0000803f0000803f0000803f5555d53ebe84f63ef38f144030bdbb33f894b13dd8a640bf30bd3b341396283f68bb0b3c80fa7f3f9fac1f3c0000803f0000803f0000803f0000803f0000803f0000003fbe84f63ee3c917400900803e28792e3d59d726bf0a00003ffbff113f72dbc53effac5d3f6397a2be0000803f0000803f0000803f0000803f0000803f5555153fbe84f63e619a2040d9b3dd3e32979fbdd0a6c0bed9b35d3f1196a83e092c293fa0f9ff3ece4d0fbf0000803f0000803f0000803f0000803f0000803fabaa2a3fbe84f63ecfa42c400000003fb36178be000000350000803f000090b47317423f6ffe0fb52fed26bf0000803f0000803f0000803f0000803f0000803f0000403fbf84f63e3caf3840d6b3dd3ee17bd0bedea6c03ed4b35d3f1796a8be9bff263f010000bff5d111bf0000803f0000803f0000803f0000803f0000803f5555553fbf84f63eba7f4140ffff7f3e6b1807bf5dd7263ffbffff3effff11bf224ebe3e7ab25dbf1a42abbe0000803f0000803f0000803f0000803f0000803fabaa6a3fbf84f63eaab9444030de4cb2766312bfd8a6403f28deccb2109628bfaa03e6bb47fc7fbf686c03bc0000803f0000803f0000803f0000803f0000803f0000803fbf84f63ef5ae32402dbd3bb3ca145bbf5b272b3f30bdbbb3d75f3ebf99df01bc47fc7fbfcf84e9bb0000803f0000803f0000803f0000803f0000803f00000000a0bd043f31d12f40ffff7fbe1c544ebf3839143fffffffbe78de24bf52f3aebe02b15dbf98f1ba3e0000803f0000803f0000803f0000803f0000803facaaaa3da0bd043f80fc2740d8b3ddbed67c2bbf5f27ab3ed6b35dbfd75fbebe57a115bf38feffbe9b98233f0000803f0000803f0000803f0000803f0000803facaa2a3ea0bd043f0a4a1d40ffffffbec0c9f7be00000000000080bf0000000048b12bbf000000007de33d3f0000803f0000803f0000803f0000803f0000803f0000803ea1bd043f94971240d8b3ddbed69998be6027abbed8b35dbfd45fbe3efcbe13bfcdffff3e1e4c253f0000803f0000803f0000803f0000803f0000803fabaaaa3ea1bd043fe3c20a40f8ff7fbe8cd625be383914bff8ffffbe7ade243fd46ba8be64b25d3f71d2c03e0000803f0000803f0000803f0000803f0000803f5555d53ea1bd043f1fe507402dbdbb33a8a7e5bd59272bbf2ebd3b34d75f3e3f984af13bc9fc7f3f1cecd83b0000803f0000803f0000803f0000803f0000803f0000003fa1bd043fe4c20a400700803e94d625be313914bf0800003f77de243f67f3ae3efdb05d3f9ff1babe0000803f0000803f0000803f0000803f0000803f5555153fa1bd043f94971240d7b3dd3ed59998be6027abbed7b35d3fd65fbe3e67a1153f35feff3e8c9823bf0000803f0000803f0000803f0000803f0000803fabaa2a3fa1bd043f0a4a1d40ffffff3ec3c9f7be000000000000803f010040b458b12b3f936a0eb46de33dbf0000803f0000803f0000803f0000803f0000803f0000403fa1bd043f80fc2740d4b3dd3ed67c2bbf6127ab3ed6b35d3fd95fbebe0bbf133fd1ffffbe114c25bf0000803f0000803f0000803f0000803f0000803f5555553fa2bd043f31d12f40fcff7f3e1c544ebf3939143ffdffff3e79de24bff56ba83e65b25dbf58d2c0be0000803f0000803f0000803f0000803f0000803fabaa6a3fa2bd043ff5ae32402dde4cb2ca145bbf5b272b3f30deccb2d75f3ebf0cd3debb42fd7fbf9553c8bb0000803f0000803f0000803f0000803f0000803f0000803fa2bd043f71bd1d402fbd3bb3836c8fbf7ec3163f2cbdbbb39be54ebf0226f2bb42fd7fbfa972b0bb0000803f0000803f0000803f0000803f0000803f00000000e3380e3f17371b40000080be7f7e88bfb090023f000000bf8e2d33bfd9fd99be1cb25dbff888cc3e0000803f0000803f0000803f0000803f0000803facaaaa3de3380e3f39511440d9b3ddbe9d1f6bbf7fc3963ed7b35dbf96e5cebeee7203bf65ffffbe0d88323f0000803f0000803f0000803f0000803f0000803facaa2a3ee4380e3f01e50a40000000bf376637bf00000000000080bf00000000dbad16bf000000005ef54e3f0000803f0000803f0000803f0000803f0000803f0000803ee4380e3fc9780140dab3ddbed2ac03bf7fc396bed8b35dbf92e5ce3e228801bf2affff3e76ed333f0000803f0000803f0000803f0000803f0000803fabaaaa3ee4380e3fd625f53ffbff7fbede9ebbbeb09002bffbffffbe902d333f4d5b93beefb15d3f635ed13e0000803f0000803f0000803f0000803f0000803f5555d53ee4380e3f2219f03f2fbdbb33d4e69fbe80c316bf2fbd3b349ae54e3fe90df53b31fd7f3fc18fb23b0000803f0000803f0000803f0000803f0000803f0000003fe4380e3fd725f53f0900803ee49ebbbeac9002bf0900003f8a2d333f01fe993e16b25d3ff288ccbe0000803f0000803f0000803f0000803f0000803f5555153fe4380e3fc9780140d9b3dd3ed1ac03bf7fc396bed7b35d3f96e5ce3e0873033f65ffff3efa8732bf0000803f0000803f0000803f0000803f0000803fabaa2a3fe4380e3f01e50a400000003f3a6637bf000000000000803f0000c0b4e7ad163fff379bb454f54ebf0000803f0000803f0000803f0000803f0000803f0000403fe4380e3f39511440d6b3dd3e9f1f6bbf80c3963ed6b35d3fa0e5cebe3388013f35ffffbe68ed33bf0000803f0000803f0000803f0000803f0000803f5555553fe4380e3f17371b40fdff7f3e807e88bfaf90023ffbffff3e912d33bf735b933eefb15dbf4a5ed1be0000803f0000803f0000803f0000803f0000803fabaa6a3fe5380e3f71bd1d4030de4cb2836c8fbf7ec3163f2ddeccb29be54ebf0ff1f7bb20fd7fbfcbabb4bb0000803f0000803f0000803f0000803f0000803f0000803fe5380e3fa39506402ebd3bb320a2adbf8f3e003f2dbdbbb3ac8f5dbf2bc204bc21fd7fbf45af99bb0000803f0000803f0000803f0000803f0000803f0000000025b4173fd46f0440000080be6036a6bf3120de3e010000bfafe03fbf517083be5db25dbf60b4db3e0000803f0000803f0000803f0000803f0000803facaaaa3d25b4173f7423fd3fd8b3ddbe2af091bf903e803ed8b35dbfac8fddbe6d1edfbed4ffffbef0963f3f0000803f0000803f0000803f0000803f0000803facaa2a3e26b4173fa21bed3fffffffbe687c6cbf00000000000080bf010000348101ffbe20fddd331dfd5d3f0000803f0000803f0000803f0000803f0000803f0000803e26b4173fd013dd3fd9b3ddbe7f1835bf903e80bed9b35dbfa88fdd3e618fdabedefdff3ec0e6403f0000803f0000803f0000803f0000803f0000803faaaaaa3e26b4173f9b57d13ff8ff7fbe128c0cbf3920debef9ffffbeafe03f3f791e77beb0b05d3f9d41e03e0000803f0000803f0000803f0000803f0000803f5555d53e26b4173ffe0bcd3f2ebdbb332669fbbe913e00bf2fbd3b34ad8f5d3f136f113c8dfc7f3f985aa83b0000803f0000803f0000803f0000803f0000803f0000003f26b4173f9c57d13f0800803e148c0cbf3020debe0800003faae03f3f9270833e58b25d3f4cb4dbbe0000803f0000803f0000803f0000803f0000803f5555153f26b4173fd013dd3fd7b3dd3e7e1835bf903e80bed7b35d3fac8fdd3e8e1edf3ed5ffff3ee6963fbf0000803f0000803f0000803f0000803f0000803fabaa2a3f26b4173fa31bed3fffffff3e6b7c6cbf010080340000803f010080b48401ff3ef1beaeb41dfd5dbf0000803f0000803f0000803f0000803f0000803f0000403f26b4173f7423fd3fd5b3dd3e2bf091bf903e803ed5b35d3fb48fddbe7e8fda3eebfdffbeb4e640bf0000803f0000803f0000803f0000803f0000803f5555553f26b4173fd46f0440fdff7f3e6136a6bf2e20de3efbffff3eb1e03fbfb21e773eafb05dbf9141e0be0000803f0000803f0000803f0000803f0000803fabaa6a3f27b4173fa39506402ede4cb220a2adbf8f3e003f2cdeccb2ac8f5dbf9e161ebcedfb7fbf3802b7bb0000803f0000803f0000803f0000803f0000803f0000803f27b4173f529edb3f2fbd3bb36679c6bf5e29c73e2ebdbbb396d66bbf6a4228bcedfb7fbf07178ebb0000803f0000803f0000803f0000803f0000803f00000000672f213f7b48d83f010080be3b93bebfa77aac3e000000bfea3d4cbfba6b4ebe29b25dbf234cea3e0000803f0000803f0000803f0000803f0000803facaaaa3d682f213fbc2bcf3fdab3ddbe93fea8bf5d29473ed7b35dbf94d6ebbe5b95acbefeffffbe48384c3f0000803f0000803f0000803f0000803f0000803facaa2a3e682f213f26b9c23f010000bfc0838bbf00000000000080bf0000000079b1c3be000000001f906c3f0000803f0000803f0000803f0000803f0000803f0000803e682f213f9046b63fd9b3ddbedc115cbf602947bed9b35dbf90d6eb3e2a5ea6be81faff3e12834d3f0000803f0000803f0000803f0000803f0000803faaaaaa3e682f213fd129ad3ffaff7fbe89e830bfa77aacbef8ffffbeec3d4c3f06f738be71ad5d3fcecdee3e0000803f0000803f0000803f0000803f0000803f5455d53e682f213ffad3a93f2fbdbb33361c21bf6129c7be30bd3b3495d66b3f4dde453c5ffa7f3f2a17a73b0000803f0000803f0000803f0000803f0000803f0000003f682f213fd229ad3f0800803e8ce830bfa07aacbe0800003fe83d4c3f0d6c4e3e24b25d3f224ceabe0000803f0000803f0000803f0000803f0000803f5555153f682f213f9046b63fd8b3dd3edb115cbf602947bed8b35d3f94d6eb3e5a95ac3efeffff3e47384cbf0000803f0000803f0000803f0000803f0000803fabaa2a3f682f213f26b9c23f0000003fc1838bbf000000000000803f000080b480b1c33e1e906cb41e906cbf0000803f0000803f0000803f0000803f0000803f0000403f682f213fbd2bcf3fd7b3dd3e94fea8bf6d29473ed4b35d3f9cd6ebbe3d5ea63e91faffbe0a834dbf0000803f0000803f0000803f0000803f0000803f5555553f682f213f7b48d83ffeff7f3e3c93bebfa57aac3efaffff3eed3d4cbf42f7383e71ad5dbfc4cdeebe0000803f0000803f0000803f0000803f0000803fabaa6a3f682f213f529edb3f2fde4cb26679c6bf5e29c73e2ddeccb296d66bbf736a63bc90f87fbf310cc0bb0000803f0000803f0000803f0000803f0000803f0000803f692f213fe069a73f2dbd3bb348c4d7bf1071693e2dbdbbb3504279bf9a5c70bc90f87fbfa61a61bb0000803f0000803f0000803f0000803f0000803f00000000aaaa2a3f7975a53fffff7fbe0a6bcfbfa12a4a3e000000bf59dd57bf997402be72ae5dbf4da0f73e0000803f0000803f0000803f0000803f0000803facaaaa3daaaa2a3f581ea03fd9b3ddbefe9bb8bf1e71e93dd7b35dbf4e42f9be13aa53be04fdffbe5f4c573f0000803f0000803f0000803f0000803f0000803facaa2a3eaaaa2a3fcfd2983ffeffffbeb37399bf00000000000080bf0100803471226cbeb9197934b719793f0000803f0000803f0000803f0000803f0000803f0000803eabaa2a3f4687913fd9b3ddbed59674bf2071e9bdd9b35dbf4c42f93ea35145be35ffff3e4e25583f0000803f0000803f0000803f0000803f0000803faaaaaa3eabaa2a3f25308c3ff9ff7fbebaf846bfa02a4abef9ffffbe5cdd573ffd4ed3bd5bb05d3fcb89fa3e0000803f0000803f0000803f0000803f0000803f5455d53eabaa2a3fbe3b8a3f2dbdbb33404636bf107169be2dbd3b345042793fcfe1643c41f97f3f9358563b0000803f0000803f0000803f0000803f0000803f0000003fabaa2a3f25308c3f0700803ebef846bfa12a4abe0800003f55dd573f9974023e6dae5d3f5ca0f7be0000803f0000803f0000803f0000803f0000803f5555153fabaa2a3f4687913fd7b3dd3ed49674bf2071e9bdd7b35d3f5042f93e49aa533e05fdff3e5c4c57bf0000803f0000803f0000803f0000803f0000803fabaa2a3fabaa2a3fcfd2983ffeffff3eb57399bf000000000000803f010080b4f2226c3eb11979b4af1979bf0000803f0000803f0000803f0000803f0000803f0000403fabaa2a3f581ea03fd5b3dd3eff9bb8bf2071e93dd5b35d3f5842f9beed51453e43ffffbe472558bf0000803f0000803f0000803f0000803f0000803f5555553facaa2a3f7975a53ffcff7f3e0a6bcfbfa22a4a3efeffff3e5add57bf414fd33d5ab05dbfcd89fabe0000803f0000803f0000803f0000803f0000803fabaa6a3facaa2a3fe069a73f2dde4cb248c4d7bf1071693e2ddeccb2504279bfb86259bceaf97fbf6b964bbb0000803f0000803f0000803f0000803f0000803f0000803facaa2a3f1543623f2fbd3bb3a5d0dfbf0f289d3d2ebdbbb3c23e7fbf429a5ebceaf97fbfc20b89ba0000803f0000803f0000803f0000803f0000803f00000000ec25343f34f2603f000080be1444d7bfff19883dfeffffbe7e0c5dbf387557bd0fae5dbf78a8fe3e0000803f0000803f0000803f0000803f0000803fa8aaaa3dec25343fd4595d3fdab3ddbecde8bfbffe271d3dd7b35dbfc43effbe97d2a3bdf6f9ffbef7c25c3f0000803f0000803f0000803f0000803f0000803faaaa2a3eec25343f9470583fffffffbef400a0bf00000000000080bf00000000fcffafbd000000008c0d7f3f0000803f0000803f0000803f0000803f0000803ffeff7f3eed25343f5487533fd9b3ddbe1c1980bf00281dbdd9b35dbfc03eff3e8cff8cbdccffff3e45005d3f0000803f0000803f0000803f0000803f0000803faaaaaa3eed25343ff4ee4f3ff9ff7fbea87b51bf001a88bdf9ffffbe800c5d3f957808bd1fb35d3fd570ff3e0000803f0000803f0000803f0000803f0000803f5455d53eed25343f139e4e3f2fbdbb33866240bf0f289dbd2ebd3b34c23e7f3f5d4f363cecfb7f3f1774603a0000803f0000803f0000803f0000803f0000803fffffff3eed25343ff5ee4f3f0800803eac7b51bff11988bd0900003f790c5d3f3775573d09ae5d3f8ba8febe0000803f0000803f0000803f0000803f0000803f5555153fed25343f5487533fd8b3dd3e1c1980bf00281dbdd8b35d3fc03eff3e3cd3a33df2f9ff3ef7c25cbf0000803f0000803f0000803f0000803f0000803fabaa2a3fed25343f9470583fffffff3ef500a0bf000000000000803f010080b44801b03d8b0d7fb4890d7fbf0000803f0000803f0000803f0000803f0000803f0000403fed25343fd5595d3fd6b3dd3ecee8bfbf1f281d3dd4b35d3fce3effbe36008d3ddaffffbe3f005dbf0000803f0000803f0000803f0000803f0000803f5455553fee25343f34f2603ffdff7f3e1544d7bffe19883df9ffff3e810c5dbf9178083d20b35dbfd670ffbe0000803f0000803f0000803f0000803f0000803faaaa6a3fee25343f1543623f2fde4cb2a5d0dfbf0f289d3d2ddeccb2c23e7fbf21030ebc86fd7fbfb6de2eba0000803f0000803f0000803f0000803f0000803f0000803fee25343fe339df3e2dbd3bb36c31e1bf4163a9bc2ebdbbb3fdf17fbf24670ebc86fd7fbfe1953c390000803f0000803f0000803f0000803f0000803f000000002ea13d3f6fefdf3effff7fbeda9ed8bfc1b192bc000000bfb5a75dbf5f9fa23a7eb15dbff803003f0000803f0000803f0000803f0000803f0000803fa8aaaa3d2ea13d3f70dfe13ed9b3ddbe2c33c1bf406329bcd9b35dbff8f1ffbe87ea173c8bfdffbe4cb15d3f0000803f0000803f0000803f0000803f0000803faaaa2a3e2ea13d3ffd84e43e000000bfed34a1bf00000000000080bf00000000fbd6723c00000000cdf87f3f0000803f0000803f0000803f0000803f0000803ffeff7f3e2fa13d3f8a2ae73ed8b3ddbeae3681bf4163293cd9b35dbff9f1ff3ec25d863ce8ffff3eb1a95d3f0000803f0000803f0000803f0000803f0000803faaaaaa3e2fa13d3f8b1ae93ef9ff7fbefe9553bfc0b1923cf9ffffbeb8a75d3f65915e3c8db35d3fd1e8ff3e0000803f0000803f0000803f0000803f0000803f5455d53e2fa13d3f17d0e93e2dbdbb33dc7042bf4163a93c2ebd3b34fdf17f3f4573e93b57fe7f3f02af1ab90000803f0000803f0000803f0000803f0000803fffffff3e2fa13d3f8b1ae93e0800803e029653bfc0b1923c0800003fb0a75d3fa2a1a2ba79b15d3f000400bf0000803f0000803f0000803f0000803f0000803f5555153f2fa13d3f8a2ae73ed7b3dd3ead3681bf4063293cd7b35d3f00f2ff3ecce417bc8efdff3e4ab15dbf0000803f0000803f0000803f0000803f0000803fabaa2a3f2fa13d3ffd84e43e0000003fef34a1bf000000000000803f000000b53acd72bccff8ffb4cff87fbf0000803f0000803f0000803f0000803f0000803f0000403f2fa13d3f70dfe13ed5b3dd3e2e33c1bf406329bcd5b35d3f08f2ffbef25b86bcf8ffffbeaba95dbf0000803f0000803f0000803f0000803f0000803f5455553f30a13d3f6fefdf3efdff7f3edb9ed8bfbfb192bcfbffff3eb6a75dbf59915ebc8cb35dbfd2e8ffbe0000803f0000803f0000803f0000803f0000803faaaa6a3f30a13d3fe339df3e2dde4cb26c31e1bf4163a9bc2edeccb2fdf17fbf2217b6bbfdfe7fbf2f15f1380000803f0000803f0000803f0000803f0000803f0000803f30a13d3fac760ebd2fbd3bb327e9ddbff3afa9bd2bbdbbb3aa1e7fbf7181b5bbfdfe7fbf4e7af1390000803f0000803f0000803f0000803f0000803f00000000721c473f9e75efbc000080bea85dd5bf19f492bdfeffffbeb2f05cbfe6b7113ddeb25dbf4a5dff3e0000803f0000803f0000803f0000803f0000803fa8aaaa3d721c473fc27a66bcdab3ddbe5105bebff4af29bdd7b35dbfac1effbeee61873df5feffbe900e5d3f0000803f0000803f0000803f0000803f0000803faaaa2a3e721c473f50cad93b000000bf7b219ebf000000b2000080bf00000000b9a1a13dafa121b095337f3f0000803f0000803f0000803f0000803f0000803ffeff7f3e721c473f8422e03cdab3ddbe4e7b7cbfeeaf293ddab35dbfa01eff3efc92903debffff3efdf65c3f0000803f0000803f0000803f0000803f0000803faaaaaa3e721c473f662d2e3dfaff7fbe9cca4dbf1af4923df8ffffbeb2f05c3f978c313dbfb35d3f9909ff3e0000803f0000803f0000803f0000803f0000803f5455d53e721c473f3ee9443d2fbdbb33a2b33cbff4afa93d30bd3b34a91e7f3f9efd923b57ff7f3f93a0c3b90000803f0000803f0000803f0000803f0000803fffffff3e721c473f612d2e3d0900803ea0ca4dbf16f4923d0900003facf05c3f02b811bdd8b25d3f5f5dffbe0000803f0000803f0000803f0000803f0000803f5555153f721c473f8722e03cd8b3dd3e4c7b7cbff1af293dd8b35d3fa81eff3eb16187bdf2feff3e900e5dbf0000803f0000803f0000803f0000803f0000803faaaa2a3f721c473f30cad93b0000003f7d219ebf000020b30000803f000000b57da1a1bdd56300b595337fbf0000803f0000803f0000803f0000803f0000803f0000403f721c473fce7a66bcd6b3dd3e5205bebffcaf29bdd4b35d3fb61effbef89290bd010000bff8f65cbf0000803f0000803f0000803f0000803f0000803f5455553f721c473fa675efbcfdff7f3ea95dd5bf1bf492bdf7ffff3eb3f05cbf8d8c31bdbfb35dbf9909ffbe0000803f0000803f0000803f0000803f0000803faaaa6a3f721c473fac760ebd2fde4cb227e9ddbff3afa9bd2adeccb2aa1e7fbf8ff460bb9cff7fbf49a795390000803f0000803f0000803f0000803f0000803f0000803f721c473f402806bf2fbd3bb3a45fd7bf9e44f8bd2ebdbbb3ae1c7ebf8e0f60bb9cff7fbf05f3da390000803f0000803f0000803f0000803f0000803f00000000b497503f101404bf000080bec9dccebfa201d7bd010000bf46115cbfd4f7683d70b35dbf0058fe3e0000803f0000803f0000803f0000803f0000803fa8aaaa3db497503f35ccfcbedab3ddbe0e9cb7bf8e4478bdd8b35dbfae1cfebe5f2ccf3d83ffffbe762f5c3f0000803f0000803f0000803f0000803f0000803faaaa2a3eb497503fec47edbe000000bf78d897bf00000000000080bf000000000c5af23d0000000085337e3f0000803f0000803f0000803f0000803f0000803ffeff7f3eb497503fa3c3ddbedab3ddbec62970bf9044783ddab35dbfa81cfe3efc97d43defffff3eaa1a5c3f0000803f0000803f0000803f0000803f0000803faaaaaa3eb497503fb867d2befaff7fbe4ca841bfa001d73dfaffffbe48115c3f97bc7b3dd4b35d3f120ffe3e0000803f0000803f0000803f0000803f0000803f5455d53eb497503f593fcebe2ebdbb3399a230bf9844f83d2ebd3b34ae1c7e3fcc592d3bc4ff7f3fd674a9b90000803f0000803f0000803f0000803f0000803fffffff3eb497503fb967d2be0900803e50a841bf9901d73d0a00003f41115c3ffef768bd6ab35d3f1358febe0000803f0000803f0000803f0000803f0000803f5455153fb497503fa3c3ddbed9b3dd3ec52970bf8e44783dd7b35d3faa1cfe3e6a2ccfbd83ffff3e772f5cbf0000803f0000803f0000803f0000803f0000803faaaa2a3fb497503fed47edbe0000003f79d897bf000080b30000803f000080b4c559f2bd29e382b485337ebf0000803f0000803f0000803f0000803f0000803f0000403fb497503f36ccfcbed6b3dd3e0f9cb7bf9e4478bdd4b35d3fb61cfebec297d4bdfdffffbea81a5cbf0000803f0000803f0000803f0000803f0000803f5455553fb497503f101404bffdff7f3ecadccebf9e01d7bdfbffff3e46115cbfb5bc7bbdd3b35dbf150ffebe0000803f0000803f0000803f0000803f0000803faaaa6a3fb497503f402806bf2fde4cb2a45fd7bf9e44f8bd2ddeccb2ae1c7ebfad49f5bae2ff7fbfbbad6f390000803f0000803f0000803f0000803f0000803f0000803fb497503ff22e83bf2ebd3bb360c5cebfbf8f11be2dbdbbb37e667dbfed9cf4bae2ff7fbf288e8c390000803f0000803f0000803f0000803f0000803f000080b3f6125a3fecf681bf000080be9f48c6bfc21efcbd010000bf7e735bbf03f38c3db0b35dbfb590fd3e0000803f0000803f0000803f0000803f0000803fa8aaaa3df6125a3fe8447dbfd9b3ddbe9018afbfbf8f91bdd7b35dbf7e66fdbea9a6f63dc4ffffbe6b8c5b3f0000803f0000803f0000803f0000803f0000803faaaa2a3ef6125a3fec2b74bf000000bfc06b8fbf00000000000080bf00000000eb210f3e00000000a07c7d3f0000803f0000803f0000803f0000803f0000803ffeff7f3ef6125a3ff0126bbfd9b3ddbee27d5fbfc08f913dd9b35dbf7866fd3eba2cf93de8ffff3ef9805b3f0000803f0000803f0000803f0000803f0000803faaaaaa3ef7125a3f006a64bffaff7fbec01d31bfc01efc3dfaffffbe80735b3f6e50913dd8b35d3fbe68fd3e0000803f0000803f0000803f0000803f0000803f5455d53ef7125a3ff4f961bf2ebdbb33412420bfc08f113e2ebd3b347e667d3ffb43a13af3ff7f3f2f7539b90000803f0000803f0000803f0000803f0000803fffffff3ef7125a3f016a64bf0800803ec31d31bfb01efc3d0800003f7a735b3f1ff38cbdadb35d3fc590fdbe0000803f0000803f0000803f0000803f0000803f5455153ff7125a3ff0126bbfd7b3dd3ee17d5fbfc18f913dd8b35d3f7d66fd3e11a6f6bdc2ffff3e6e8c5bbf0000803f0000803f0000803f0000803f0000803faaaa2a3ff7125a3fec2b74bf0000003fc16b8fbf000000000000803f000080b42f210fbea67c7db4a67c7dbf0000803f0000803f0000803f0000803f0000803f0000403ff8125a3fe8447dbfd5b3dd3e9018afbfc18f91bdd6b35d3f8166fdbef12bf9bdf5ffffbefa805bbf0000803f0000803f0000803f0000803f0000803f5455553ff8125a3fecf681bffeff7f3ea048c6bfbe1efcbdfcffff3e7e735bbf795091bdd7b35dbfc068fdbe0000803f0000803f0000803f0000803f0000803faaaa6a3ff8125a3ff22e83bf2fde4cb260c5cebfbf8f11be2ddeccb27e667dbf9bdf1bbafdff7fbf721cb3380000803f0000803f0000803f0000803f0000803f0000803ff8125a3f0facc3bf2fbd3bb3c636c5bf4e6018be2cbdbbb35c267dbf33c01bbafdff7fbf82a7bb380000803f0000803f0000803f0000803f0000803f000080b3388e633f6d65c2bf010080be2cbcbcbf2ef603befeffffbef53b5bbf131b963dcfb35dbf2c3cfd3e0000803f0000803f0000803f0000803f0000803fa8aaaa3d388e633f0ce9bebfdab3ddbefa91a5bf3e6098bdd7b35dbf5c26fdbec5fe013edfffffbec84e5b3f0000803f0000803f0000803f0000803f0000803faaaa2a3e388e633f0a26babf010000bf2eed85bf00000000000080bf00000000611b163e000000000c3c7d3f0000803f0000803f0000803f0000803f0000803ffeff7f3e388e633f0863b5bfd9b3ddbec6904cbf4060983dd9b35dbf5826fd3e31ff013edcffff3ec74e5b3f0000803f0000803f0000803f0000803f0000803faaaaaa3e398e633fa7e6b1bffaff7fbe603c1ebf2ff6033ef8ffffbef63b5b3f0b1b963dd0b35d3f293cfd3e0000803f0000803f0000803f0000803f0000803f5455d53e398e633f05a0b0bf2fbdbb332e470dbf5060183e2fbd3b345c267d3f2f6f27b40000803f3ca824b40000803f0000803f0000803f0000803f0000803fffffff3e398e633fa8e6b1bf0900803e643c1ebf20f6033e0900003ff03b5b3f2e1b96bdc9b35d3f3f3cfdbe0000803f0000803f0000803f0000803f0000803f5455153f398e633f0863b5bfd8b3dd3ec5904cbf4060983dd8b35d3f5c26fd3e4bfe01bee0ffff3ece4e5bbf0000803f0000803f0000803f0000803f0000803faaaa2a3f398e633f0a26babf0100003f30ed85bf000000000000803ffeffffb47c1a16be123cfdb4143c7dbf0000803f0000803f0000803f0000803f0000803f0000403f3a8e633f0ce9bebfd6b3dd3efb91a5bf3f6098bdd4b35d3f6626fdbec5fe01bee8ffffbec74e5bbf0000803f0000803f0000803f0000803f0000803f5455553f3a8e633f6d65c2bffeff7f3e2dbcbcbf2df603bef8ffff3ef73b5bbf121b96bdd0b35dbf273cfdbe0000803f0000803f0000803f0000803f0000803faaaa6a3f3a8e633f0facc3bf2fde4cb2c636c5bf4e6018be2cdeccb25c267dbf0dbc1b3afdff7fbff074bbb80000803f0000803f0000803f0000803f0000803f0000803f3a8e633f8da701c02ebd3bb33bc8bbbfbf8f11be2dbdbbb37e667dbf72dc1b3afdff7fbfe0e9b2b80000803f0000803f0000803f0000803f0000803f000080b37a096d3f8a0b01c0000080be7a4bb3bfc21efcbd010000bf7e735bbf7850913dd7b35dbfc468fd3e0000803f0000803f0000803f0000803f0000803fa8aaaa3d7a096d3f9cc2febfd9b3ddbe6b1b9cbfbf8f91bdd7b35dbf7e66fdbee32bf93df0ffffbefc805b3f0000803f0000803f0000803f0000803f0000803faaaa2a3e7a096d3f1e36fabf000000bf36dd78bf00000000000080bf0000000012220f3e00000000a07c7d3f0000803f0000803f0000803f0000803f0000803ffeff7f3e7a096d3fa0a9f5bfd9b3ddbe988339bfc08f913dd9b35dbf7866fd3e30a7f63dbeffff3e6a8c5b3f0000803f0000803f0000803f0000803f0000803faaaaaa3e7b096d3f2855f2bff9ff7fbe76230bbfc01efc3df9ffffbe80735b3feef28c3db3b35d3fae90fd3e0000803f0000803f0000803f0000803f0000803f5455d53e7b096d3f221df1bf2ebdbb33ee53f4bec08f113e2ebd3b347e667d3f4c4ca1baf3ff7f3fe61f39390000803f0000803f0000803f0000803f0000803fffffff3e7b096d3f2955f2bf0800803e79230bbfa01efc3d0800003f7a735b3f7b5091bdd3b35d3fd468fdbe0000803f0000803f0000803f0000803f0000803f5455153f7b096d3fa0a9f5bfd7b3dd3e968339bfc08f913dd7b35d3f8066fd3ef12af9bdf0ffff3eff805bbf0000803f0000803f0000803f0000803f0000803faaaa2a3f7b096d3f1e36fabf0000003f39dd78bf000000000000803f0000c0b458210fbe7d1dbeb4a67c7dbf0000803f0000803f0000803f0000803f0000803f0000403f7c096d3f9cc2febfd5b3dd3e6b1b9cbfc18f91bdd6b35d3f8166fdbea9a6f6bdc9ffffbe698c5bbf0000803f0000803f0000803f0000803f0000803f5455553f7c096d3f8a0b01c0fdff7f3e7b4bb3bfc01efcbdfdffff3e80735bbff6f28cbdb3b35dbfb190fdbe0000803f0000803f0000803f0000803f0000803faaaa6a3f7c096d3f8da701c02fde4cb23bc8bbbfbf8f11be2ddeccb27e667dbfda9bf43ae2ff7fbf347b8cb90000803f0000803f0000803f0000803f0000803f0000803f7c096d3f1e5e20c02fbd3bb30e89b3bf7c44f8bd2cbdbbb3ae1c7ebfaa4af53ae2ff7fbf72946fb90000803f0000803f0000803f0000803f0000803f000080b3be84763f12d91fc0000080be3306abbf8001d7bd000000bf46115cbf9cbc7b3dd2b35dbf1a0ffe3e0000803f0000803f0000803f0000803f0000803fa8aaaa3dbe84763f956d1ec0dab3ddbe77c593bf7e4478bdd8b35dbfaa1cfebe9a97d43df0ffffbeac1a5c3f0000803f0000803f0000803f0000803f0000803faaaa2a3ebe84763f0c7d1cc0000000bfc30368bf00000000000080bf00000000475af23d0000000084337e3f0000803f0000803f0000803f0000803f0000803ffeff7f3ebe84763f838c1ac0dab3ddbe997c28bf8044783ddab35dbfa81cfe3e402ccf3d7dffff3e792f5c3f0000803f0000803f0000803f0000803f0000803faaaaaa3ebe84763f062119c0faff7fbe3ef6f3be8001d73dfaffffbe48115c3fa1f7683d72b35d3ffb57fe3e0000803f0000803f0000803f0000803f0000803f5455d53ebe84763ffa9b18c02ebdbb33d8ead1be8044f83d2ebd3b34ae1c7e3f5a592dbbc4ff7f3f0e45a9390000803f0000803f0000803f0000803f0000803fffffff3ebe84763f062119c00900803e45f6f3be8001d73d0900003f41115c3fa4bc7bbdccb35d3f2d0ffebe0000803f0000803f0000803f0000803f0000803f5455153fbe84763f838c1ac0d9b3dd3e987c28bf8044783dd9b35d3fac1cfe3e5b97d4bdf2ffff3ead1a5cbf0000803f0000803f0000803f0000803f0000803faaaa2a3fbe84763f0c7d1cc00000003fc60368bf000000000000803f0000c0b40c5af2bda4a6beb485337ebf0000803f0000803f0000803f0000803f0000803fffff3f3fbe84763f956d1ec0d6b3dd3e78c593bf804478bdd6b35d3fb41cfebe462ccfbd88ffffbe752f5cbf0000803f0000803f0000803f0000803f0000803f5455553fbe84763f12d91fc0fdff7f3e3406abbf7e01d7bdfbffff3e48115cbfa9f768bd73b35dbffd57febe0000803f0000803f0000803f0000803f0000803faaaa6a3fbe84763f1e5e20c02fde4cb20e89b3bf7c44f8bd2cdeccb2ae1c7ebfee0a603b9cff7fbfeadcdab90000803f0000803f0000803f0000803f0000803f0000803fbe84763fb1393dc02fbd3bb38c80adbffcafa9bd2bbdbbb3aa1e7fbf1eb9a83b20ff7fbfe969e0b90000803f0000803f0000803f0000803f0000803f000080b30000803fc1de3cc0000080be0df5a4bffff392bdfeffffbeb2f05cbfcb17503d55b15dbf92b5fe3e0000803f0000803f0000803f0000803f0000803fa8aaaa3d0000803f51e63bc0dab3ddbeb69c8dbffdaf29bdd7b35dbfac1effbe1b2ead3d98faffbe34a65c3f0000803f0000803f0000803f0000803f0000803faaaa2a3e0000803ff1923ac0000000bfc1715bbf00000000000080bf000000b4cae9c33d9de1fcb373d37e3f0000803f0000803f0000803f0000803f0000803ffeff7f3e0000803f913f39c0dab3ddbe18aa1bbf00b0293ddab35dbfa01eff3e8c27a63d10fdff3e19bb5c3f0000803f0000803f0000803f0000803f0000803faaaaaa3e0000803f214738c0faff7fbecdf2d9be00f4923dfaffffbeb3f05c3f15bf373d82b35d3fd8f8fe3e0000803f0000803f0000803f0000803f0000803f5455d53e0000803f31ec37c02fbdbb33d7c4b7be00b0a93d2fbd3b34a91e7f3fe6f360bb9cff7f3f6e8895390000803f0000803f0000803f0000803f0000803fffffff3e0000803f214738c00900803ed4f2d9be00f4923d0900003facf05c3fdb1750bd4fb15d3fa4b5febe0000803f0000803f0000803f0000803f0000803f5455153f0000803f913f39c0d8b3dd3e16aa1bbf00b0293dd8b35d3fa81eff3e192eadbd94faff3e36a65cbf0000803f0000803f0000803f0000803f0000803faaaa2a3f0000803ff1923ac00000003fc4715bbf000000000000803f000000b5c9e9c3bd690500b573d37ebf0000803f0000803f0000803f0000803f0000803fffff3f3f0000803f51e63bc0d6b3dd3eb79c8dbfffaf29bdd4b35d3fb61effbe8f27a6bd27fdffbe12bb5cbf0000803f0000803f0000803f0000803f0000803f5455553f0000803fc1de3cc0fdff7f3e0ef5a4bffef392bdf9ffff3eb5f05cbf1abf37bd83b35dbfd5f8febe0000803f0000803f0000803f0000803f0000803faaaa6a3f0000803fb1393dc02fde4cb28c80adbffcafa9bd2adeccb2aa1e7fbff02514b5000080bf34a1bd330000803f0000803f0000803f0000803f0000803f0000803f0000803f + m_CompressedMesh: + m_Vertices: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_UV: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_Normals: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_Tangents: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_Weights: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_NormalSigns: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_TangentSigns: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_FloatColors: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_BoneIndices: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_Triangles: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_UVInfo: 0 + m_LocalAABB: + m_Center: {x: 0.24787366, y: 0, z: -0.34287977} + m_Extent: {x: 3.2045197, y: 0.50000006, z: 1.416441} + m_MeshUsageFlags: 0 + m_CookingOptions: 30 + m_BakedConvexCollisionMesh: + m_BakedTriangleCollisionMesh: + m_MeshMetrics[0]: 1 + m_MeshMetrics[1]: 1 + m_MeshOptimizationFlags: 1 + m_StreamData: serializedVersion: 2 - m_Bits: 133177343 ---- !u!114 &1220250192 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1220250190} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} - m_Name: - m_EditorClassIdentifier: - m_UiScaleMode: 0 - m_ReferencePixelsPerUnit: 100 - m_ScaleFactor: 1 - m_ReferenceResolution: {x: 800, y: 600} - m_ScreenMatchMode: 0 - m_MatchWidthOrHeight: 0 - m_PhysicalUnit: 3 - m_FallbackScreenDPI: 96 - m_DefaultSpriteDPI: 96 - m_DynamicPixelsPerUnit: 1 - m_PresetInfoIsWorld: 0 ---- !u!223 &1220250193 -Canvas: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1220250190} - m_Enabled: 1 - serializedVersion: 3 - m_RenderMode: 0 - m_Camera: {fileID: 0} - m_PlaneDistance: 100 - m_PixelPerfect: 0 - m_ReceivesEvents: 1 - m_OverrideSorting: 0 - m_OverridePixelPerfect: 0 - m_SortingBucketNormalizedSize: 0 - m_VertexColorAlwaysGammaSpace: 0 - m_AdditionalShaderChannelsFlag: 0 - m_UpdateRectTransformForStandalone: 0 - m_SortingLayerID: 0 - m_SortingOrder: 0 - m_TargetDisplay: 0 ---- !u!224 &1220250194 -RectTransform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1220250190} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 0, y: 0, z: 0} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 1318097841} - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} - m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 0, y: 0} - m_Pivot: {x: 0, y: 0} ---- !u!224 &1318097841 stripped -RectTransform: - m_CorrespondingSourceObject: {fileID: 3147078739715781144, guid: a9919bda663539247848cb56fdf9bd16, type: 3} - m_PrefabInstance: {fileID: 388332281} - m_PrefabAsset: {fileID: 0} ---- !u!1 &1329252893 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1329252895} - - component: {fileID: 1329252894} - m_Layer: 0 - m_Name: Note (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1329252894 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1329252893} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: a212c074803b6824cae48ffa7abb84cf, type: 3} - m_Name: - m_EditorClassIdentifier: - type: 0 - connections: - - invertTangents: 0 - _pointIndex: 1 - _computer: {fileID: 1179692613} - point: - _type: 0 - position: {x: 0, y: 0, z: 0} - color: {r: 1, g: 1, b: 1, a: 1} - normal: {x: 0, y: 0.9999625, z: 0} - size: 0.2 - tangent: {x: 4.298085, y: 0.38843536, z: -48.7895} - tangent2: {x: 4.298085, y: 0.38843536, z: -48.7895} - _transformSize: 1 - _transformNormals: 1 - _transformTangents: 1 ---- !u!4 &1329252895 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1329252893} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -10, y: -5, z: 0} - m_LocalScale: {x: 5, y: 5, z: 5} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1631765331 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1631765337} - - component: {fileID: 1631765336} - m_Layer: 0 - m_Name: GameObject - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1631765336 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1631765331} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 95f34794054a7fb4aa9e0ea91bb40849, type: 3} - m_Name: - m_EditorClassIdentifier: - Typings: [] ---- !u!4 &1631765337 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1631765331} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + offset: 0 + size: 0 + path: --- !u!1 &1670575211 GameObject: m_ObjectHideFlags: 0 @@ -1552,11 +1085,6 @@ SceneRoots: m_Roots: - {fileID: 348951191} - {fileID: 1670575213} - - {fileID: 1220250194} - {fileID: 800919135} - - {fileID: 189182382} - - {fileID: 1329252895} - - {fileID: 1631765337} - - {fileID: 1179692614} - - {fileID: 500533165} - {fileID: 214697394} + - {fileID: 1500120302} diff --git a/Assets/Scripts/Editor.meta b/Assets/Scripts/Editor.meta new file mode 100644 index 0000000..9728ba0 --- /dev/null +++ b/Assets/Scripts/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 200725c262851254db49e0c1a5729c77 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Editor/SOEditor.cs b/Assets/Scripts/Editor/SOEditor.cs new file mode 100644 index 0000000..cdc74d8 --- /dev/null +++ b/Assets/Scripts/Editor/SOEditor.cs @@ -0,0 +1,10 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEditor; +using UnityEngine; + +[CustomEditor(typeof(Demo.ScriptableObject), true)] +public class SOEditor : Convention.AbstractCustomEditor +{ + +} diff --git a/Assets/Scripts/Editor/SOEditor.cs.meta b/Assets/Scripts/Editor/SOEditor.cs.meta new file mode 100644 index 0000000..d521c2a --- /dev/null +++ b/Assets/Scripts/Editor/SOEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e4af2f5018ef1934cb4055d18185a75c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Environment/PrefabRootObject.cs b/Assets/Scripts/Environment/PrefabRootObject.cs index 9a64c05..fc29b54 100644 --- a/Assets/Scripts/Environment/PrefabRootObject.cs +++ b/Assets/Scripts/Environment/PrefabRootObject.cs @@ -11,18 +11,8 @@ namespace Demo.Game return new GameObject().AddComponent(); } - private List AssetBundleLoadings = new(); - private List AssetBundles = new(); - private List Prefabs = new(); - - public override IEnumerator LoadScript(string script) - { - yield return base.LoadScript(script); - foreach (var loading in AssetBundleLoadings) - { - yield return loading; - } - } + private readonly List AssetBundles = new(); + private readonly List Prefabs = new(); public override IEnumerator UnloadScript() { @@ -45,36 +35,31 @@ namespace Demo.Game ")] - public void Load(string ab, string prefab) + public IEnumerator Load(string ab, string prefab) { - IEnumerator Foo() + AssetBundle assetBundle = null; + yield return this.LoadAssetBundle(ab, x => assetBundle = x); + GameObject prefabObject = null; + if (assetBundle != null) { - AssetBundle assetBundle = null; - yield return this.LoadAssetBundle(ab, x => assetBundle = x); - GameObject prefabObject = null; - if (assetBundle != null) + var ir = assetBundle.LoadAssetAsync(prefab); + yield return ir; + if (ir.asset != null) { - var ir = assetBundle.LoadAssetAsync(prefab); - yield return ir; - if (ir.asset != null) - { - prefabObject = Instantiate(ir.asset as GameObject); - Prefabs.Add(prefabObject); - prefabObject.transform.SetParent(transform); - AssetBundles.Add(ab); - } - else - { - Debug.LogError($"Load Prefab failed", this); - } + prefabObject = Instantiate(ir.asset as GameObject); + Prefabs.Add(prefabObject); + prefabObject.transform.SetParent(transform); + AssetBundles.Add(ab); } else { - Debug.LogError($"Load AssetBundle failed", this); + Debug.LogError($"Load Prefab failed", this); } } - - AssetBundleLoadings.Add(Foo()); + else + { + Debug.LogError($"Load AssetBundle failed", this); + } } } } diff --git a/Assets/Scripts/Environment/SkyUpdatement.cs b/Assets/Scripts/Environment/SkyUpdatement.cs index eda8039..c6d3baa 100644 --- a/Assets/Scripts/Environment/SkyUpdatement.cs +++ b/Assets/Scripts/Environment/SkyUpdatement.cs @@ -59,9 +59,9 @@ namespace Demo.Game ")] - public void Load(string ab) + public IEnumerator Load(string ab) { - SkyAssetBundleLoading = this.LoadAssetBundle(ab, x => + yield return this.LoadAssetBundle(ab, x => { SkyAssetBundlePath = ab; SkyAssetBundle = x; diff --git a/Assets/Scripts/Framework/GameContent/GameController.cs b/Assets/Scripts/Framework/GameContent/GameController.cs index 5570882..69d6301 100644 --- a/Assets/Scripts/Framework/GameContent/GameController.cs +++ b/Assets/Scripts/Framework/GameContent/GameController.cs @@ -117,7 +117,7 @@ namespace Demo.Game yield return null; - // Setup Game Rules + // Setup Game Rules (Main) if (Editor.EditorController.instance.MainGameController == this) { ScriptableObject.FastScriptableObjectTypen = content.ScriptableObjectTypen; @@ -126,11 +126,23 @@ namespace Demo.Game SongOffset = (float)MainConfig.FindItem(nameof(SongOffset), SongOffset); SetupSongDuration = GameContent.instance.SetupSongDuration; SetSongCurrentTime = GameContent.instance.SetSongCurrentTime; + } + // Setup Game Rules + { + foreach (var ab in ((string)MainConfig.FindItem(nameof(AssetBundle), "")).Split(';')) + { + if (string.IsNullOrEmpty(ab)) + continue; + StartCoroutine(AssetBundlesLoadHelper.LoadAssetBundleAsync(ab.Trim(), null)); + } + IsHideTrackRender = (bool)MainConfig.FindItem(nameof(IsHideTrackRender), false); + IsAutoPlay = GameContent.instance.IsAutoPlay; + WhichOpenScript = (string)MainConfig.FindItem(nameof(WhichOpenScript), WhichOpenScript); // Open Project WhichOpenProject = (string)MainConfig.FindItem(nameof(WhichOpenProject), WhichOpenProject); if (string.IsNullOrEmpty(WhichOpenProject) == false) { - string path = string.Format($"{WhichOpenProject}", $"\"{Editor.EditorController.instance.PersistentDataPath}\"") ; + string path = string.Format($"{WhichOpenProject}", $"\"{Editor.EditorController.instance.PersistentDataPath}\""); try { System.Diagnostics.Process.Start(path); @@ -141,55 +153,51 @@ namespace Demo.Game Debug.LogException(ex, this); } } + CurrentProjectDefaultFileStyle = content.CurrentProjectDefaultFileStyle; + } + + + MainConfig.SaveProperties(); + + yield return null; + + // Load Root Object + { + while (MainConfig.Contains("root") == false) { - IsHideTrackRender = (bool)MainConfig.FindItem(nameof(IsHideTrackRender), false); - IsAutoPlay = GameContent.instance.IsAutoPlay; - WhichOpenScript = (string)MainConfig.FindItem(nameof(WhichOpenScript), WhichOpenScript); - CurrentProjectDefaultFileStyle = content.CurrentProjectDefaultFileStyle; - } - - yield return null; - - MainConfig.SaveProperties(); - - // Load Root Object - { - while (MainConfig.Contains("root") == false) + string defaultRootPath = "root" + CurrentProjectDefaultFileStyle switch { - string defaultRootPath = "root" + CurrentProjectDefaultFileStyle switch + ProjectDefaultFileStyle.PY => ".py", + _ => ".cpp" + }; + if (content.IsCreateNewProject) + { + MainConfig["root"] = defaultRootPath; + if (MainConfig.CreateFile(defaultRootPath)) { - ProjectDefaultFileStyle.PY => ".py", - _ => ".cpp" - }; - if (content.IsCreateNewProject) - { - MainConfig["root"] = defaultRootPath; - if (MainConfig.CreateFile(defaultRootPath)) - { - MainConfig.SaveProperties(); - break; - } + MainConfig.SaveProperties(); + break; } - Debug.LogError($"{nameof(defaultRootPath)} is cannt create or config's root property is not exist", this); - StartCoroutine(GameExit()); - yield break; - } - var rootFileName = (string)MainConfig.FindItem("root"); - var rootObject = new ToolFile(Path.Combine(content.RootSourceDir, rootFileName)); - rootObject.MustExistsPath(); - var rootGameObject = new GameObject(rootObject.GetName(true)).AddComponent(); - rootGameObject.transform.SetParent(transform); - rootGameObject.ScriptName = rootObject.GetName(true); - rootGameObject.audioSystem = MainAudio; - rootGameObject.EnableScript(content.RootSourceDir, rootObject.GetFullPath(), this); - try - { - yield return rootGameObject.LoadScript(rootObject.LoadAsText()); - } - finally - { - MainObject = rootGameObject; } + Debug.LogError($"{nameof(defaultRootPath)} is cannt create or config's root property is not exist", this); + StartCoroutine(GameExit()); + yield break; + } + var rootFileName = (string)MainConfig.FindItem("root"); + var rootObject = new ToolFile(Path.Combine(content.RootSourceDir, rootFileName)); + rootObject.MustExistsPath(); + var rootGameObject = new GameObject(rootObject.GetName(true)).AddComponent(); + rootGameObject.transform.SetParent(transform); + rootGameObject.ScriptName = rootObject.GetName(true); + rootGameObject.audioSystem = MainAudio; + rootGameObject.EnableScript(content.RootSourceDir, rootObject.GetFullPath(), this); + try + { + yield return rootGameObject.LoadScript(rootObject.LoadAsText()); + } + finally + { + MainObject = rootGameObject; } } } diff --git a/Assets/Scripts/Framework/ScriptableObject.cs b/Assets/Scripts/Framework/ScriptableObject.cs index 800f2fd..657b7e1 100644 --- a/Assets/Scripts/Framework/ScriptableObject.cs +++ b/Assets/Scripts/Framework/ScriptableObject.cs @@ -569,6 +569,9 @@ namespace Demo MyHierarchyItem.GetHierarchyItem().title = this.ScriptName + $"<{scriptType}>"; MyHierarchyItem.GetHierarchyItem().target = this; MyHierarchyItem.GetHierarchyItem().ButtonGameObject.GetComponent().ScriptObjectMenu = OnHierarchyItemRightClick; + var parentHierarchyItem = MyHierarchyItem.GetParent(); + if (parentHierarchyItem != null) + parentHierarchyItem.GetPropertyListItem().RefreshChilds(); } public ScriptableObject FindWithPath(string path, bool isMustExist = true) @@ -639,6 +642,48 @@ namespace Demo return result; } + public IEnumerator LoadSubScriptAsync([In] string type, [In] string path, [Opt] Action callback) + { + // 判断类型是否合法 + if (DefaultInstantiate.GetScriptableObjectInstantiate().TryGetValue(type, out var creater) == false) + { + Debug.LogError($"{type} is not exist or {type}'s Instantiater is not valid", this); + callback?.Invoke(null); + yield break; + } + // 生成对象 + var child = creater(); + // 路径预处理 + if (path.Replace('\\', '/').ToLower().StartsWith("project/")) + path = $"{new ToolFile(GetRoot().SourcePath) | path[5..]}"; + // 获取文件 + ToolFile file; + if (File.Exists(path)) + file = new(path); + else + file = new ToolFile(SourcePath) | path; + // 找不到脚本 + if (file.Exists() == false) + { + Debug.LogError($"{file}<{path}> is not found", this); + callback?.Invoke(null); + yield break; + } + child.ScriptName = file.GetName(true); + child.transform.SetParent(this.transform); + child.transform.SetLocalPositionAndRotation(Vector3.zero, Quaternion.identity); + child.transform.localScale = Vector3.one; + child.EnableScript(file.GetCurrentDirName(), Path.Combine(file.GetCurrentDirName(), file.GetName(false)), type, this); + + // Add Child + Childs.Add(child); + + // Load Child Script + yield return child.LoadScript(file.LoadAsText()); + + callback?.Invoke(child); + } + /// /// 加载子脚本 /// @@ -651,49 +696,9 @@ namespace Demo 指定类型 指定脚本,可用决定路径或与当前脚本目录的相对路径 ")] - [return:ReturnMayNull] - public ScriptableObject LoadSubScript(string type, string path) + public IEnumerator LoadSubScript([In] string type, [In] string path) { - // 判断类型是否合法 - if (DefaultInstantiate.GetScriptableObjectInstantiate().TryGetValue(type, out var creater) == false) - { - Debug.LogError($"{type} is not exist or {type}'s Instantiater is not valid", this); - return null; - } - // 生成对象 - var child = creater(); - // 路径预处理 - if (path.Replace('\\', '/').ToLower().StartsWith("project/")) - path = $"{new ToolFile(GetRoot().SourcePath) | path[5..]}"; - // 获取文件 - ToolFile file; - if (File.Exists(path)) - file = new(path); - else - file = new ToolFile(SourcePath)| path; - // 找不到脚本 - if (file.Exists() == false) - { - Debug.LogError($"{file}<{path}> is not found", this); - return null; - } - child.ScriptName = file.GetName(true); - child.transform.SetParent(this.transform); - child.transform.SetLocalPositionAndRotation(Vector3.zero, Quaternion.identity); - child.transform.localScale = Vector3.one; - child.EnableScript(file.GetCurrentDirName(), Path.Combine(file.GetCurrentDirName(), file.GetName(false)), type, this); - - // Add Child - Childs.Add(child); - - // Load Child Script - if (gameObject.activeInHierarchy) - StartCoroutine(child.LoadScript(file.LoadAsText())); - else - GetRoot().GetComponent().StartCoroutine(child.LoadScript(file.LoadAsText())); - - - return child; + yield return LoadSubScriptAsync(type, path, null); } public object DynamicBindingTarget { get; protected set; } = null; @@ -705,6 +710,8 @@ namespace Demo Break } + // TODO : 过多的逻辑都挤在这里, 需要拆分 + // TODO : 如何统计整个游戏关卡是否加载完成, 尤其是此处的resultEnumerator与ILoadAssetBundle, 将会同时存在多条异步加载的时间线 private IEnumerator ParseScript2Expr(string script) { // 预处理 @@ -816,9 +823,21 @@ namespace Demo MethodInvokerCache[this.GetType()].Add(command, commandInfo); } Debug.Log($"in line \"{expr}\" of \"{ScriptPath}\", {command} is try to invoke", this); + IEnumerator resultEnumerator = null; try { - if (ConventionUtility.TryInvokeMember(commandInfo, this, out var _, paramsList) == false) + // 调用成功 + if (ConventionUtility.TryInvokeMember(commandInfo, this, out var invokeResult, paramsList) == true) + { + Debug.Log($"in line \"{expr}\" of \"{ScriptPath}\", {command} is invoke succeed", this); + // 尤其用于加载子类时 + if (invokeResult != null && invokeResult is IEnumerator _resultEnumerator) + { + resultEnumerator = _resultEnumerator; + } + } + // 调用失败 + else { MethodInvokerCache[this.GetType()].Remove(command); var attr = commandInfo.GetCustomAttribute(); @@ -827,10 +846,6 @@ namespace Demo else Debug.LogError($"in line \"{expr}\" of \"{ScriptPath}\", {command} is failed to invoke, see: {attr.Description}", this); } - else - { - Debug.Log($"in line \"{expr}\" of \"{ScriptPath}\", {command} is invoke succeed", this); - } } catch (Exception ex) { @@ -838,7 +853,7 @@ namespace Demo Debug.LogException(ex, this); yield break; } - yield return null; + yield return resultEnumerator; } } @@ -988,13 +1003,12 @@ namespace Demo private static Dictionary AssetBundleLoading = new(); private static PropertiesWindow.ItemEntry AssetBundlesItemEntry = null; - public static IEnumerator LoadAssetBundle(this IAssetBundleLoader self, string ab, Action callback) + public static IEnumerator LoadAssetBundleAsync(string ab, Action callback) { - Debug.Log($"{self.SharedInterfaceScriptObject.ScriptName}.{nameof(LoadAssetBundle)}({ab})", self.SharedInterfaceScriptObject); if (AssetBundleCounter.TryGetValue(ab, out var result)) { result.referenceCounter++; - callback(result.assetBundle); + callback?.Invoke(result.assetBundle); yield break; } if (AssetBundleLoading.TryGetValue(ab, out var tir)) @@ -1003,7 +1017,7 @@ namespace Demo if (AssetBundleCounter.TryGetValue(ab, out result)) { result.referenceCounter++; - callback(result.assetBundle); + callback?.Invoke(result.assetBundle); yield break; } } @@ -1047,13 +1061,19 @@ namespace Demo loadingHierarchyItem.title = $"{ab}"; } AssetBundleLoading.Remove(ab); - callback(x); + callback?.Invoke(x); }); AssetBundleLoading.Add(ab, ir); yield return ir; AssetBundleLoading.Remove(ab); } + public static IEnumerator LoadAssetBundle(this IAssetBundleLoader self, string ab, Action callback) + { + Debug.Log($"{self.SharedInterfaceScriptObject.ScriptName}.{nameof(LoadAssetBundle)}({ab})", self.SharedInterfaceScriptObject); + yield return LoadAssetBundleAsync(ab, callback); + } + public static IEnumerator UnloadAssetBundle(this IAssetBundleLoader self, string ab) { // Editor中暂时忽略卸载功能 diff --git a/Assets/Scripts/Framework/ScriptableObjectInstantiate/DefaultScriptableObjectInstantiate.cs b/Assets/Scripts/Framework/ScriptableObjectInstantiate/DefaultScriptableObjectInstantiate.cs index a0328cf..fc3b588 100644 --- a/Assets/Scripts/Framework/ScriptableObjectInstantiate/DefaultScriptableObjectInstantiate.cs +++ b/Assets/Scripts/Framework/ScriptableObjectInstantiate/DefaultScriptableObjectInstantiate.cs @@ -128,17 +128,19 @@ namespace Demo.Game childFileStream.Close(); } //不刷新世界,直接加载 - var targetChildSO = so.LoadSubScript(type, childFile); - // 打开手动编辑 - try + so.StartCoroutine(so.LoadSubScriptAsync(type, childFile, targetChildSO => { - DefaultScriptUtility.OpenScriptFile(targetChildSO); - } - catch (Exception ex) - { - Debug.LogError($"Cannt open {childFile}", so); - Debug.LogException(ex, so); - } + // 打开手动编辑 + try + { + DefaultScriptUtility.OpenScriptFile(targetChildSO); + } + catch (Exception ex) + { + Debug.LogError($"Cannt open {childFile}", so); + Debug.LogException(ex, so); + } + })); } } else diff --git a/Assets/Scripts/Framework/Updatement.cs b/Assets/Scripts/Framework/Updatement.cs index b2dfae5..e7ff4b7 100644 --- a/Assets/Scripts/Framework/Updatement.cs +++ b/Assets/Scripts/Framework/Updatement.cs @@ -56,6 +56,12 @@ namespace Demo.Game } } + public override void ResetEnterGameStatus() + { + base.ResetEnterGameStatus(); + UpdateEntry(0, 0); + } + public override IEnumerator UnloadScript() { Content = 0; @@ -71,18 +77,8 @@ namespace Demo.Game return (currentTime - Entries[Content].TimePoint) / (Entries[Content + 1].TimePoint - Entries[Content].TimePoint); } - if (Entries.Count == 0) + if (Entries.Count <= 1) return; - if (Entries.Count == 1) - { - UpdateEntry(0, 0); - return; - } - // TODO : 删除后存在问题 - if (Entries[0].TimePoint <= 0 && tickType == TickType.Reset) - { - UpdateEntry(0, 0); - } switch (tickType) { case TickType.Reset: diff --git a/Assets/Scripts/Interaction/Effect/ParticleEffect.cs b/Assets/Scripts/Interaction/Effect/ParticleEffect.cs index aa6fb7d..889594c 100644 --- a/Assets/Scripts/Interaction/Effect/ParticleEffect.cs +++ b/Assets/Scripts/Interaction/Effect/ParticleEffect.cs @@ -11,18 +11,8 @@ namespace Demo.Game return new GameObject().AddComponent(); } - private List AssetBundleLoadings = new(); - private List AssetBundles = new(); - private List Prefabs = new(); - - public override IEnumerator LoadScript(string script) - { - yield return base.LoadScript(script); - foreach (var loading in AssetBundleLoadings) - { - yield return loading; - } - } + private readonly List AssetBundles = new(); + private readonly List Prefabs = new(); public override IEnumerator UnloadScript() { @@ -45,9 +35,9 @@ namespace Demo.Game ")] - public void Load(string ab, string prefab) + public IEnumerator Load(string ab, string prefab) { - AssetBundleLoadings.Add(this.LoadAssetBundle(ab, x => + yield return this.LoadAssetBundle(ab, x => { GameObject sub = Instantiate(x.LoadAsset(prefab)); sub.SetActive(false); @@ -55,7 +45,7 @@ namespace Demo.Game sub.transform.SetParent(transform); sub.transform.localPosition = Vector3.zero; AssetBundles.Add(ab); - })); + }); } public override void OnBegin() diff --git a/Assets/Scripts/Interaction/JudgementEffect/ParticleJudgement.cs b/Assets/Scripts/Interaction/JudgementEffect/ParticleJudgement.cs index aa2e1ed..e33fe18 100644 --- a/Assets/Scripts/Interaction/JudgementEffect/ParticleJudgement.cs +++ b/Assets/Scripts/Interaction/JudgementEffect/ParticleJudgement.cs @@ -12,18 +12,10 @@ namespace Demo.Game return new GameObject().AddComponent(); } - private List AssetBundleLoadings = new(); [Content, SerializeField] private Dictionary AssetBundles = new(); [Content, SerializeField] private Dictionary Prefabs = new(); [Content, SerializeField] private Dictionary Durations = new(); - public override IEnumerator LoadScript(string script) - { - yield return base.LoadScript(script); - foreach (var loading in AssetBundleLoadings) - yield return loading; - } - public override IEnumerator UnloadScript() { yield return base.UnloadScript(); @@ -47,26 +39,20 @@ namespace Demo.Game 判定效果会现形的持续时间 ")] - public void Load(string level, string ab, string prefab, string duration) + public IEnumerator Load(string level, string ab, string prefab, string duration) { var levelId = (IInteraction.JudgementLevel)int.Parse(level); - IEnumerator Foo() - { - AssetBundle assetBundle = null; - var ir = this.LoadAssetBundle(ab, x => assetBundle = x); - yield return ir; - var req = assetBundle.LoadAssetAsync(prefab); - yield return req; - GameObject sub = Instantiate(req.asset as GameObject); - sub.SetActive(false); - Prefabs.Add(levelId, sub); - sub.transform.SetParent(transform); - AssetBundles.Add(levelId, ab); - Durations.Add(levelId, float.Parse(duration)); - } - - AssetBundleLoadings.Add(Foo()); + AssetBundle assetBundle = null; + yield return this.LoadAssetBundle(ab, x => assetBundle = x); + var req = assetBundle.LoadAssetAsync(prefab); + yield return req; + GameObject sub = Instantiate(req.asset as GameObject); + sub.SetActive(false); + Prefabs.Add(levelId, sub); + sub.transform.SetParent(transform); + AssetBundles.Add(levelId, ab); + Durations.Add(levelId, float.Parse(duration)); } private void CreateParticle(GameObject prefab) diff --git a/Assets/Scripts/MaterialUpdatement.cs b/Assets/Scripts/MaterialUpdatement.cs index a06a2a0..9a0513e 100644 --- a/Assets/Scripts/MaterialUpdatement.cs +++ b/Assets/Scripts/MaterialUpdatement.cs @@ -52,17 +52,13 @@ namespace Demo.Game ")] - public void Load(string ab) + public IEnumerator Load(string ab) { - var ir = this.LoadAssetBundle(ab, x => + yield return this.LoadAssetBundle(ab, x => { MaterialAssetBundlePath = ab; MaterialAssetBundle = x; }); - if (gameObject.activeInHierarchy) - StartCoroutine(ir); - else - GetRoot().StartCoroutine(ir); } /// diff --git a/Assets/Scripts/MoreSpline/BasicSplineRenderer.cs b/Assets/Scripts/MoreSpline/BasicSplineRenderer.cs index a04e2ef..8ce1c58 100644 --- a/Assets/Scripts/MoreSpline/BasicSplineRenderer.cs +++ b/Assets/Scripts/MoreSpline/BasicSplineRenderer.cs @@ -28,7 +28,6 @@ namespace Demo.Game [Content] public AssetBundle LinesAssetBundle; [Content] public string LineMaterial; [Content] public Material MyLineMaterial; - IEnumerator AssetBundleLoading; public abstract Vector3 EvaluateClipFromPosition(float time); @@ -42,7 +41,6 @@ namespace Demo.Game this.GetOrAddComponent(); MyMeshRenderer = this.GetOrAddComponent(); MyMeshRenderer.enabled = true; - yield return AssetBundleLoading; if (string.IsNullOrEmpty(LinesAssetBundlePath) == false) { var ir = LinesAssetBundle.LoadAssetAsync(LineMaterial); @@ -85,9 +83,9 @@ namespace Demo.Game } [ScriptableCall(DependOnSplineCoreUtility.LoadSplineDescription)] - public void LoadSpline(string path) + public IEnumerator LoadSpline(string path) { - this.LoadSplineTool(path); + yield return this.LoadSplineTool(path); } @@ -103,9 +101,9 @@ namespace Demo.Game ")] - public void LoadMaterial(string ab, string material) + public IEnumerator LoadMaterial(string ab, string material) { - AssetBundleLoading = this.LoadAssetBundle(ab, x => + yield return this.LoadAssetBundle(ab, x => { LinesAssetBundlePath = ab; LinesAssetBundle = x; diff --git a/Assets/Scripts/MoreSpline/SplineAnchor.cs b/Assets/Scripts/MoreSpline/SplineAnchor.cs index 82a2c99..ab9b305 100644 --- a/Assets/Scripts/MoreSpline/SplineAnchor.cs +++ b/Assets/Scripts/MoreSpline/SplineAnchor.cs @@ -20,9 +20,9 @@ namespace Demo.Game /// /// 对象路径, 不存在时则立刻加载 [ScriptableCall(DependOnSplineCoreUtility.LoadSplineDescription)] - public void LoadSpline(string path) + public IEnumerator LoadSpline(string path) { - this.LoadSplineTool(path); + yield return this.LoadSplineTool(path); } /// diff --git a/Assets/Scripts/MoreSpline/SplineCore.cs b/Assets/Scripts/MoreSpline/SplineCore.cs index c4a5afc..79cdec4 100644 --- a/Assets/Scripts/MoreSpline/SplineCore.cs +++ b/Assets/Scripts/MoreSpline/SplineCore.cs @@ -22,7 +22,7 @@ namespace Demo.Game public interface IDependOnSplineCore : IScriptableObject { SplineCore MySplineCore { get; set; } - void LoadSpline(string path); + IEnumerator LoadSpline(string path); } public static class DependOnSplineCoreUtility @@ -38,14 +38,14 @@ namespace Demo.Game /// 加载并绑定到新样条线 /// /// 对象相对路径,若对象不存在则作为脚本相对路径加载 - public static void LoadSplineTool(this IDependOnSplineCore self, string path) + public static IEnumerator LoadSplineTool(this IDependOnSplineCore self, string path) { var spline = self.SharedInterfaceScriptObject.FindWithPath(path, false); if (spline == null) - spline = self.SharedInterfaceScriptObject.LoadSubScript(nameof(SplineCore), path); - if (spline != null) + yield return self.SharedInterfaceScriptObject.LoadSubScriptAsync(nameof(SplineCore), path, x => spline = x); + if (spline is SplineCore sc) { - self.MySplineCore = spline as SplineCore; + self.MySplineCore = sc; } else { @@ -158,13 +158,15 @@ namespace Demo.Game 脚本位置 ")] - public void LoadNode(string path) + public IEnumerator LoadNode(string path) { - var node = LoadSubScript(nameof(SplineNode), path); - if (node != null) + yield return LoadSubScriptAsync(nameof(SplineNode), path, node => { - MySplineNodes.Add(node as SplineNode); - } + if (node != null) + { + MySplineNodes.Add(node as SplineNode); + } + }); } /// diff --git a/Assets/Scripts/MoreSpline/Updatement/BasicSplineJustFollow.cs b/Assets/Scripts/MoreSpline/Updatement/BasicSplineJustFollow.cs index 9c86ab2..95c4f0c 100644 --- a/Assets/Scripts/MoreSpline/Updatement/BasicSplineJustFollow.cs +++ b/Assets/Scripts/MoreSpline/Updatement/BasicSplineJustFollow.cs @@ -16,6 +16,11 @@ namespace Demo.Game protected override abstract void UpdateData(float data); + public override IEnumerator LoadScript(string script) + { + yield return base.LoadScript(script); + } + public override IEnumerator UnloadScript() { MySplineCore = null; @@ -51,14 +56,15 @@ namespace Demo.Game 脚本位置 ")] - public void Load(string path) + public IEnumerator Load(string path) { - var spline = FindWithPath(path, false); - if (spline == null) - spline = LoadSubScript(nameof(SplineCore), path); - if (spline != null) + MySplineCore = FindWithPath(path, false) as SplineCore; + if (MySplineCore == null) { - MySplineCore = spline as SplineCore; + yield return LoadSubScriptAsync(nameof(SplineCore), path, x => + { + MySplineCore = x as SplineCore; + }); } } }