diff --git a/Documentation~/MacroObjectAnalyzerReadme.md b/Documentation~/MacroObjectAnalyzerReadme.md new file mode 100644 index 0000000..0673145 --- /dev/null +++ b/Documentation~/MacroObjectAnalyzerReadme.md @@ -0,0 +1,326 @@ +# XericUnityAnalyzer 规则文档 + +## 所有诊断规则一览 + +本文档列出 `com.lrss3.deconstruction` 包中 `XericUnityAnalyzer` Roslyn 分析器的所有诊断规则, +涵盖 MacroObject(Unity 层级/组件操作)和 MacroString(TextBlockBuilder 富文本)的优化建议。 + +--- + +### XRX0001 — 重复访问 Transform.parent 属性 + +| 属性 | 值 | +|------|---| +| 分类 | Usage | +| 严重性 | Warning | + +**触发条件:** 对 Transform 对象的 `.parent` 属性进行重复链式访问(直接链式、变量中转、赋值链)。 + +**示例:** +```csharp +// 触发警告 +transform.parent.parent; +Transform p = transform.parent; +p.parent; // ← 这里报警 +``` + +**建议方案:** `MacroObject.GetParents()` 扩展方法,返回 `IEnumerable`。 + +--- + +### XRX0002 — 重复调用 GetParents() + +| 属性 | 值 | +|------|---| +| 分类 | Performance | +| 严重性 | Warning | + +**触发条件:** 在同一方法中对同一对象调用 `GetParents()` 超过 1 次。 + +**示例:** +```csharp +// 触发警告 +transform.GetParents(); +transform.GetParents(); // ← 第二次调用报警 +``` + +**建议方案:** `MacroObject.GetParentsSafety()` 扩展方法,返回 `IList` 可复用。 + +--- + +### XRX0003 — 重复调用 GetChild() + +| 属性 | 值 | +|------|---| +| 分类 | Performance | +| 严重性 | Warning | + +**触发条件:** 在同一方法中对同一对象调用 `Transform.GetChild()` 超过 1 次。 + +**示例:** +```csharp +// 触发警告 +transform.GetChild(0); +transform.GetChild(1); // ← 第二次调用报警 +``` + +**建议方案:** `MacroObject.GetChildren()` 扩展方法,一次性获取所有子节点。 + +--- + +### XRX0004 — for 循环 + GetChild 遍历子节点 + +| 属性 | 值 | +|------|---| +| 分类 | Usage | +| 严重性 | Warning | + +**触发条件:** 使用 `for (int i = 0; i < xxx.childCount; i++)` 配合 `GetChild(i)` 遍历子节点。 + +**示例:** +```csharp +// 触发警告 +for (int i = 0; i < transform.childCount; i++) +{ + transform.GetChild(i); // ← 建议替换为 foreach +} +``` + +**建议方案:** `MacroObject.GetChildren()` 扩展方法,配合 `foreach` 更简洁。 + +--- + +### XRX0005 — 重复调用 GetChildren() + +| 属性 | 值 | +|------|---| +| 分类 | Performance | +| 严重性 | Warning | + +**触发条件:** 在同一方法中对同一对象调用 `GetChildren()` 超过 1 次。 + +**示例:** +```csharp +// 触发警告 +transform.GetChildren(); +transform.GetChildren(); // ← 第二次调用报警 +``` + +**建议方案:** `MacroObject.GetChildrenSafety()` 扩展方法,返回 `IList` 可复用。 + +--- + +### XRX0006 — GetChildren 后提取 gameObject + +| 属性 | 值 | +|------|---| +| 分类 | Usage | +| 严重性 | Warning | + +**触发条件:** 对 `GetChildren()` 结果使用 `.Select(x => x.gameObject)` 或 LINQ 查询提取 gameObject。 + +**示例:** +```csharp +// 触发警告 +transform.GetChildren().Select(c => c.gameObject); +// 或 +from c in transform.GetChildren() select c.gameObject; +``` + +**建议方案:** `MacroObject.GetChildrenGameObject()` 扩展方法,直接返回 `IEnumerable`。 + +--- + +### XRX0007 — 嵌套遍历子节点层级 + +| 属性 | 值 | +|------|---| +| 分类 | Usage | +| 严重性 | Warning | + +**触发条件:** 嵌套调用 `GetChildren()` 或嵌套使用 for + GetChild 遍历多层子节点。 + +**示例:** +```csharp +// 触发警告 +foreach (var child in transform.GetChildren()) +{ + foreach (var grandchild in child.GetChildren()) // ← 嵌套报警 + { + // ... + } +} +``` + +**建议方案:** `MacroObject.GetChildrenBFS()` 扩展方法,BFS 一步到位返回所有层级子节点。 + +--- + +### XRX0008 — 在 parent 和 GetChild 之间跳跃访问 + +| 属性 | 值 | +|------|---| +| 分类 | Usage | +| 严重性 | Warning | + +**触发条件:** 在同一方法中对同一对象同时访问 `.parent` 属性和调用 `GetChild()` 方法。 + +**示例:** +```csharp +// 触发警告 +var p = transform.parent; // ← 访问父级 +var c = transform.GetChild(0); // ← 访问子级 +// 可能在寻找兄弟节点 +``` + +**建议方案:** `MacroObject.GetBrother()` 扩展方法,返回所有兄弟节点。 + +--- + +### XRX0009 — GetComponent 判空后 AddComponent + +| 属性 | 值 | +|------|---| +| 分类 | Usage | +| 严重性 | Warning | + +**触发条件:** 先调用 `GetComponent()`,判空后再调用 `AddComponent()` 的"获取或添加"模式。 + +**示例:** +```csharp +// 触发警告 +var comp = obj.GetComponent(); +if (comp == null) + comp = obj.AddComponent(); +``` + +**建议方案:** `MacroObject.GetComponentAnyway()` 扩展方法,一步完成获取或添加。 + +--- + +### XRX0010 — 对枚举器逐项 GetComponent + +| 属性 | 值 | +|------|---| +| 分类 | Usage | +| 严重性 | Warning | + +**触发条件:** 在 `.Select()` / `foreach` / `for` 循环中对成员逐项调用 `GetComponent`。 + +**示例:** +```csharp +// 触发警告 +transform.GetChildren().Select(c => c.GetComponent()); +// 或 +foreach (var child in transform.GetChildren()) + child.GetComponent(); // ← 逐项报警 +``` + +**建议方案:** `MacroObject.IEnumerable.GetComponent()` 扩展方法,针对枚举器直接提取组件。 + +--- + +### XRX0011 — 循环中查找特定组件后跳出 + +| 属性 | 值 | +|------|---| +| 分类 | Usage | +| 严重性 | Warning | + +**触发条件:** 在循环中逐项 GetComponent 并在找到后判空 break 的"搜索组件"模式。 + +**示例:** +```csharp +// 触发警告 +Image found = null; +foreach (var child in transform.GetChildren()) +{ + found = child.GetComponent(); + if (found != null) break; // ← 搜索模式报警 +} +``` + +**建议方案:** `MacroObject.IEnumerable.GetComponent(out T comp)` 扩展方法,一次完成搜索。 + +--- + +### XRX0012 — 通过名称查找返回对象 + +| 属性 | 值 | +|------|---| +| 分类 | Usage | +| 严重性 | Warning | + +**触发条件:** 遍历子节点并比较 `.name` 来查找特定名称的对象(foreach + name == "xxx" + return)。 + +**示例:** +```csharp +// 触发警告 +foreach (var child in transform.GetChildren()) +{ + if (child.name == "Target") // ← 名称比较 + return child; // ← 找到返回 +} +// 或 LINQ: +transform.GetChildren().FirstOrDefault(c => c.name == "Target"); +``` + +**建议方案:** `MacroObject.FindFamilyMember()` / `FindFamilyMemberExact()` / `FindFamilyMemberFuzzy()` 扩展方法。 + +--- + +### XRX0101 — 富文本字符串字面量 + +| 属性 | 值 | +|------|---| +| 分类 | Usage | +| 严重性 | Warning | + +**触发条件:** 检测到字符串字面量中包含类似 XML 的 Unity 富文本标签(如 ``, ``, `` 等)。 + +**示例:** +```csharp +// 触发警告 +var text = "abc"; +``` + +**建议方案:** 使用 **TextBlockBuilder 包裹器语法** 或 **BlockUtilKit 框架语法** 进行类型安全构建: + + +```csharp +// 优化为 TextBlockBuilder 语法 +new TextBlockBuilder() +{ + new BBlock("abc") +} +``` + + +```csharp +// 优化为框架语法(配合 using static BlockUtilKit) +Pure( + B(Label("abc")) +).BuildBlockByAgentOnce() +``` + +**注意:** 此规则提供两个 CodeFix 选项——"转换为 TextBlockBuilder 语法"和"转换为框架语法",可通过 IDE 的自动修复功能直接应用。 + +--- + +## 规则索引 + +| ID | 规则标题 | 文件 | +|----|---------|------| +| XRX0001 | 重复访问 parent 属性 | ObjectRelation | +| XRX0002 | 重复调用 GetParents() | ObjectRelation | +| XRX0003 | 重复调用 GetChild() | ObjectRelation | +| XRX0004 | for 循环 + GetChild 遍历 | ObjectRelation | +| XRX0005 | 重复调用 GetChildren() | ObjectRelation | +| XRX0006 | GetChildren + Select gameObject | ObjectRelation | +| XRX0007 | 嵌套遍历子节点层级 | ObjectRelation | +| XRX0008 | parent 和 GetChild 跳跃访问 | ObjectRelation | +| XRX0009 | GetComponent + AddComponent | ComponentSearch | +| XRX0010 | 枚举器逐项 GetComponent | ComponentSearch | +| XRX0011 | 循环查找特定组件 | ComponentSearch | +| XRX0012 | 名称查找返回对象 | FamilyNaming | +| XRX0101 | 富文本字符串字面量 | RichTextDetection | diff --git a/Editor/XericLibraryEditor.dll b/Editor/XericLibraryEditor.dll index 1059df5..a7fcf76 100644 Binary files a/Editor/XericLibraryEditor.dll and b/Editor/XericLibraryEditor.dll differ diff --git a/Resources/Material/Graph/UI/XUIBasic.shader b/Resources/Material/Graph/UI/XUIBasic.shader new file mode 100644 index 0000000..ceea92b --- /dev/null +++ b/Resources/Material/Graph/UI/XUIBasic.shader @@ -0,0 +1,292 @@ +// Made with Amplify Shader Editor v1.9.9.1 +// Available at the Unity Asset Store - http://u3d.as/y3X +Shader "XUIBasic" +{ + Properties + { + [PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {} + _Color ("Tint", Color) = (1,1,1,1) + + _StencilComp ("Stencil Comparison", Float) = 8 + _Stencil ("Stencil ID", Float) = 0 + _StencilOp ("Stencil Operation", Float) = 0 + _StencilWriteMask ("Stencil Write Mask", Float) = 255 + _StencilReadMask ("Stencil Read Mask", Float) = 255 + + _ColorMask ("Color Mask", Float) = 15 + + [Toggle(UNITY_UI_ALPHACLIP)] _UseUIAlphaClip ("Use Alpha Clip", Float) = 0 + + _CoordTransform( "CoordTransform", Vector ) = ( 1, 1, 0, 0 ) + _CoordCenterv2( "CoordCenter(v2)", Vector ) = ( 0.5, 0.5, 0, 0 ) + _CoordRotateAngle( "CoordRotateAngle", Float ) = 0 + [KeywordEnum( Gradient,Polygon )] _ElementType( "Element Type", Float ) = 0 + [KeywordEnum( Linear,Sin,Cos,Exponential )] _GradientType( "GradientType", Float ) = 0 + _ExpNumber( "ExpNumber", Float ) = 1 + _ColorA( "Color A", Color ) = ( 0, 1, 0.07612991, 1 ) + _ColorB( "Color B", Color ) = ( 1, 0, 0, 1 ) + _PolygonSides( "PolygonSides", Float ) = 5 + _PolygonSizev2( "PolygonSize(v2)", Vector ) = ( 0.5, 0.5, 0, 0 ) + [KeywordEnum( Normal,Mode,ABS )] _CoordRange( "CoordRange", Float ) = 0 + + } + + SubShader + { + LOD 0 + + Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } + + Stencil + { + Ref [_Stencil] + ReadMask [_StencilReadMask] + WriteMask [_StencilWriteMask] + Comp [_StencilComp] + Pass [_StencilOp] + } + + + Cull Off + Lighting Off + ZWrite Off + ZTest [unity_GUIZTestMode] + Blend One OneMinusSrcAlpha + ColorMask [_ColorMask] + + + Pass + { + Name "Default" + CGPROGRAM + #define ASE_VERSION 19901 + + #pragma vertex vert + #pragma fragment frag + #pragma target 3.5 + + #include "UnityCG.cginc" + #include "UnityUI.cginc" + + #pragma multi_compile_local _ UNITY_UI_CLIP_RECT + #pragma multi_compile_local _ UNITY_UI_ALPHACLIP + + #define ASE_NEEDS_TEXTURE_COORDINATES0 + #define ASE_NEEDS_FRAG_TEXTURE_COORDINATES0 + #pragma shader_feature_local _ELEMENTTYPE_GRADIENT _ELEMENTTYPE_POLYGON + #pragma shader_feature_local _GRADIENTTYPE_LINEAR _GRADIENTTYPE_SIN _GRADIENTTYPE_COS _GRADIENTTYPE_EXPONENTIAL + #pragma shader_feature_local _COORDRANGE_NORMAL _COORDRANGE_MODE _COORDRANGE_ABS + + + struct appdata_t + { + float4 vertex : POSITION; + float4 color : COLOR; + float2 texcoord : TEXCOORD0; + UNITY_VERTEX_INPUT_INSTANCE_ID + + }; + + struct v2f + { + float4 vertex : SV_POSITION; + fixed4 color : COLOR; + float2 texcoord : TEXCOORD0; + float4 worldPosition : TEXCOORD1; + float4 mask : TEXCOORD2; + UNITY_VERTEX_OUTPUT_STEREO + + }; + + sampler2D _MainTex; + fixed4 _Color; + fixed4 _TextureSampleAdd; + float4 _ClipRect; + float4 _MainTex_ST; + float _UIMaskSoftnessX; + float _UIMaskSoftnessY; + + uniform float4 _ColorA; + uniform float4 _ColorB; + uniform float4 _CoordTransform; + uniform float2 _CoordCenterv2; + uniform float _CoordRotateAngle; + uniform float _ExpNumber; + uniform float2 _PolygonSizev2; + uniform float _PolygonSides; + + + v2f vert(appdata_t v ) + { + v2f OUT; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(OUT); + + + + v.vertex.xyz += float3( 0, 0, 0 ) ; + + float4 vPosition = UnityObjectToClipPos(v.vertex); + OUT.worldPosition = v.vertex; + OUT.vertex = vPosition; + + float2 pixelSize = vPosition.w; + pixelSize /= float2(1, 1) * abs(mul((float2x2)UNITY_MATRIX_P, _ScreenParams.xy)); + + float4 clampedRect = clamp(_ClipRect, -2e10, 2e10); + float2 maskUV = (v.vertex.xy - clampedRect.xy) / (clampedRect.zw - clampedRect.xy); + OUT.texcoord = v.texcoord; + OUT.mask = float4(v.vertex.xy * 2 - clampedRect.xy - clampedRect.zw, 0.25 / (0.25 * half2(_UIMaskSoftnessX, _UIMaskSoftnessY) + abs(pixelSize.xy))); + + OUT.color = v.color * _Color; + return OUT; + } + + fixed4 frag(v2f IN ) : SV_Target + { + //Round up the alpha color coming from the interpolator (to 1.0/256.0 steps) + //The incoming alpha could have numerical instability, which makes it very sensible to + //HDR color transparency blend, when it blends with the world's texture. + const half alphaPrecision = half(0xff); + const half invAlphaPrecision = half(1.0/alphaPrecision); + IN.color.a = round(IN.color.a * alphaPrecision)*invAlphaPrecision; + + float2 texCoord1 = IN.texcoord.xy * (_CoordTransform).xy + (_CoordTransform).zw; + float cos2 = cos( ( ( _CoordRotateAngle * 2.0 ) * UNITY_PI ) ); + float sin2 = sin( ( ( _CoordRotateAngle * 2.0 ) * UNITY_PI ) ); + float2 rotator2 = mul( texCoord1 - _CoordCenterv2 , float2x2( cos2 , -sin2 , sin2 , cos2 )) + _CoordCenterv2; + float2 temp_output_2_0_g3 = rotator2; + float2 temp_output_3_0_g3 = float2( 1,1 ); + float2 temp_output_1_0_g3 = ( temp_output_2_0_g3 % temp_output_3_0_g3 ); + float2 temp_output_6_0_g3 = saturate( sign( temp_output_2_0_g3 ) ); + float2 lerpResult4_g3 = lerp( ( ( temp_output_1_0_g3 + temp_output_3_0_g3 ) % temp_output_3_0_g3 ) , temp_output_1_0_g3 , temp_output_6_0_g3); + #if defined( _COORDRANGE_NORMAL ) + float2 staticSwitch26 = rotator2; + #elif defined( _COORDRANGE_MODE ) + float2 staticSwitch26 = lerpResult4_g3; + #elif defined( _COORDRANGE_ABS ) + float2 staticSwitch26 = abs( rotator2 ); + #else + float2 staticSwitch26 = rotator2; + #endif + float temp_output_18_0 = (staticSwitch26).x; + #if defined( _GRADIENTTYPE_LINEAR ) + float staticSwitch13 = temp_output_18_0; + #elif defined( _GRADIENTTYPE_SIN ) + float staticSwitch13 = sin( temp_output_18_0 ); + #elif defined( _GRADIENTTYPE_COS ) + float staticSwitch13 = cos( temp_output_18_0 ); + #elif defined( _GRADIENTTYPE_EXPONENTIAL ) + float staticSwitch13 = pow( temp_output_18_0 , _ExpNumber ); + #else + float staticSwitch13 = temp_output_18_0; + #endif + float temp_output_2_0_g4 = _PolygonSides; + float cosSides12_g4 = cos( ( UNITY_PI / temp_output_2_0_g4 ) ); + float2 appendResult18_g4 = (float2(( _PolygonSizev2.x * cosSides12_g4 ) , ( _PolygonSizev2.y * cosSides12_g4 ))); + float2 break23_g4 = ( (staticSwitch26*2.0 + -1.0) / appendResult18_g4 ); + float polarCoords30_g4 = atan2( break23_g4.x , -break23_g4.y ); + float temp_output_52_0_g4 = ( 6.28318548202515 / temp_output_2_0_g4 ); + float2 appendResult25_g4 = (float2(break23_g4.x , -break23_g4.y)); + float2 finalUVs29_g4 = appendResult25_g4; + float temp_output_44_0_g4 = ( cos( ( ( floor( ( 0.5 + ( polarCoords30_g4 / temp_output_52_0_g4 ) ) ) * temp_output_52_0_g4 ) - polarCoords30_g4 ) ) * length( finalUVs29_g4 ) ); + #if defined( _ELEMENTTYPE_GRADIENT ) + float staticSwitch11 = staticSwitch13; + #elif defined( _ELEMENTTYPE_POLYGON ) + float staticSwitch11 = saturate( ( ( 1.0 - temp_output_44_0_g4 ) / fwidth( temp_output_44_0_g4 ) ) ); + #else + float staticSwitch11 = staticSwitch13; + #endif + float4 lerpResult14 = lerp( _ColorA , _ColorB , staticSwitch11); + float4 appendResult7 = (float4(lerpResult14)); + + + half4 color = appendResult7; + + #ifdef UNITY_UI_CLIP_RECT + half2 m = saturate((_ClipRect.zw - _ClipRect.xy - abs(IN.mask.xy)) * IN.mask.zw); + color.a *= m.x * m.y; + #endif + + #ifdef UNITY_UI_ALPHACLIP + clip (color.a - 0.001); + #endif + + color.rgb *= color.a; + + return color; + } + ENDCG + } + } + CustomEditor "AmplifyShaderEditor.MaterialInspector" + + Fallback Off +} +/*ASEBEGIN +Version=19901 +Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;5;-1408,256;Inherit;False;Property;_CoordRotateAngle;CoordRotateAngle;2;0;Create;True;0;0;0;False;0;False;0;0;0;0;0;1;FLOAT;0 +Node;AmplifyShaderEditor.Vector4Node, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;28;-1920,0;Inherit;False;Property;_CoordTransform;CoordTransform;0;0;Create;True;0;0;0;False;0;False;1,1,0,0;1,1,0,0;0;5;FLOAT4;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 +Node;AmplifyShaderEditor.SimpleMultiplyOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;9;-1184,256;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;2;False;1;FLOAT;0 +Node;AmplifyShaderEditor.ComponentMaskNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;30;-1664,96;Inherit;False;False;False;True;True;1;0;FLOAT4;0,0,0,0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.ComponentMaskNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;29;-1664,16;Inherit;False;True;True;False;False;1;0;FLOAT4;0,0,0,0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.TextureCoordinatesNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;1;-1408,0;Inherit;False;0;-1;2;3;2;SAMPLER2D;;False;0;FLOAT2;1,1;False;1;FLOAT2;0,0;False;5;FLOAT2;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 +Node;AmplifyShaderEditor.PiNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;8;-1024,256;Inherit;False;1;0;FLOAT;1;False;1;FLOAT;0 +Node;AmplifyShaderEditor.Vector2Node, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;4;-1408,128;Inherit;False;Property;_CoordCenterv2;CoordCenter(v2);1;0;Create;True;0;0;0;False;0;False;0.5,0.5;0.5,0.5;0;3;FLOAT2;0;FLOAT;1;FLOAT;2 +Node;AmplifyShaderEditor.Vector2Node, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;34;-768,-128;Inherit;False;Constant;_Vector0;Vector 0;11;0;Create;True;0;0;0;False;0;False;1,1;0,0;0;3;FLOAT2;0;FLOAT;1;FLOAT;2 +Node;AmplifyShaderEditor.RotatorNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;2;-896,0;Inherit;False;3;0;FLOAT2;0,0;False;1;FLOAT2;0,0;False;2;FLOAT;1;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.FunctionNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;32;-512,0;Inherit;False;PMod;-1;;3;f21979a9080cb044ca372458f5a37d88;1,33,0;2;2;FLOAT2;0,0;False;3;FLOAT2;1,1;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.AbsOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;36;-480,128;Inherit;False;1;0;FLOAT2;0,0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.StaticSwitch, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;26;-256,-128;Inherit;False;Property;_CoordRange;CoordRange;10;0;Create;True;0;0;0;False;0;False;0;0;0;True;;KeywordEnum;3;Normal;Mode;ABS;Create;True;True;All;9;1;FLOAT2;0,0;False;0;FLOAT2;0,0;False;2;FLOAT2;0,0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT2;0,0;False;6;FLOAT2;0,0;False;7;FLOAT2;0,0;False;8;FLOAT2;0,0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.ComponentMaskNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;18;0,-128;Inherit;False;True;False;True;True;1;0;FLOAT2;0,0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;23;0,96;Inherit;False;Property;_ExpNumber;ExpNumber;5;0;Create;True;0;0;0;False;0;False;1;0;0;0;0;1;FLOAT;0 +Node;AmplifyShaderEditor.SinOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;19;256,-64;Inherit;False;1;0;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.CosOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;20;256,0;Inherit;False;1;0;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.PowerNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;22;256,64;Inherit;False;False;2;0;FLOAT;0;False;1;FLOAT;1;False;1;FLOAT;0 +Node;AmplifyShaderEditor.Vector2Node, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;25;0,384;Inherit;False;Property;_PolygonSizev2;PolygonSize(v2);9;0;Create;True;0;0;0;False;0;False;0.5,0.5;0,0;0;3;FLOAT2;0;FLOAT;1;FLOAT;2 +Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;24;0,288;Inherit;False;Property;_PolygonSides;PolygonSides;8;0;Create;True;0;0;0;False;0;False;5;0;0;0;0;1;FLOAT;0 +Node;AmplifyShaderEditor.FunctionNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;10;256,256;Inherit;False;Polygon;-1;;4;6906ef7087298c94c853d6753e182169;0;4;1;FLOAT2;0,0;False;2;FLOAT;5;False;3;FLOAT;0.5;False;4;FLOAT;0.5;False;1;FLOAT;0 +Node;AmplifyShaderEditor.StaticSwitch, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;13;512,-128;Inherit;False;Property;_GradientType;GradientType;4;0;Create;True;0;0;0;False;0;False;0;0;0;True;;KeywordEnum;4;Linear;Sin;Cos;Exponential;Create;True;True;All;9;1;FLOAT;0;False;0;FLOAT;0;False;2;FLOAT;0;False;3;FLOAT;0;False;4;FLOAT;0;False;5;FLOAT;0;False;6;FLOAT;0;False;7;FLOAT;0;False;8;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.StaticSwitch, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;11;896,-128;Inherit;False;Property;_ElementType;Element Type;3;0;Create;True;0;0;0;False;0;False;0;0;0;True;;KeywordEnum;2;Gradient;Polygon;Create;True;True;All;9;1;FLOAT;0;False;0;FLOAT;0;False;2;FLOAT;0;False;3;FLOAT;0;False;4;FLOAT;0;False;5;FLOAT;0;False;6;FLOAT;0;False;7;FLOAT;0;False;8;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.ColorNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;15;896,-512;Inherit;False;Property;_ColorA;Color A;6;0;Create;True;0;0;0;False;0;False;0,1,0.07612991,1;0,1,0.07612991,1;True;True;0;6;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5 +Node;AmplifyShaderEditor.ColorNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;16;896,-320;Inherit;False;Property;_ColorB;Color B;7;0;Create;True;0;0;0;False;0;False;1,0,0,1;1,0,0,1;True;True;0;6;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5 +Node;AmplifyShaderEditor.LerpOp, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;14;1152,-384;Inherit;False;3;0;COLOR;0,0,0,0;False;1;COLOR;0,0,0,0;False;2;FLOAT;0;False;1;COLOR;0 +Node;AmplifyShaderEditor.DynamicAppendNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;7;1312,-384;Inherit;False;FLOAT4;4;0;FLOAT4;0,0,0,0;False;1;FLOAT;0;False;2;FLOAT;0;False;3;FLOAT;1;False;1;FLOAT4;0 +Node;AmplifyShaderEditor.TemplateMultiPassMasterNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;0;1472,-384;Float;False;True;-1;3;AmplifyShaderEditor.MaterialInspector;0;3;XUIBasic;5056123faa0c79b47ab6ad7e8bf059a4;True;Default;0;0;Default;2;False;True;3;1;False;;10;False;;0;1;False;;0;False;;False;False;False;False;False;False;False;False;False;False;False;False;True;2;False;;False;True;True;True;True;True;0;True;_ColorMask;False;False;False;False;False;False;False;True;True;0;True;_Stencil;255;True;_StencilReadMask;255;True;_StencilWriteMask;0;True;_StencilComp;0;True;_StencilOp;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;False;True;2;False;;True;0;True;unity_GUIZTestMode;False;True;5;Queue=Transparent=Queue=0;IgnoreProjector=True;RenderType=Transparent=RenderType;PreviewType=Plane;CanUseSpriteAtlas=True;False;False;0;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;3;False;0;;0;0;Standard;0;0;1;True;False;;False;0 +WireConnection;9;0;5;0 +WireConnection;30;0;28;0 +WireConnection;29;0;28;0 +WireConnection;1;0;29;0 +WireConnection;1;1;30;0 +WireConnection;8;0;9;0 +WireConnection;2;0;1;0 +WireConnection;2;1;4;0 +WireConnection;2;2;8;0 +WireConnection;32;2;2;0 +WireConnection;32;3;34;0 +WireConnection;36;0;2;0 +WireConnection;26;1;2;0 +WireConnection;26;0;32;0 +WireConnection;26;2;36;0 +WireConnection;18;0;26;0 +WireConnection;19;0;18;0 +WireConnection;20;0;18;0 +WireConnection;22;0;18;0 +WireConnection;22;1;23;0 +WireConnection;10;1;26;0 +WireConnection;10;2;24;0 +WireConnection;10;3;25;1 +WireConnection;10;4;25;2 +WireConnection;13;1;18;0 +WireConnection;13;0;19;0 +WireConnection;13;2;20;0 +WireConnection;13;3;22;0 +WireConnection;11;1;13;0 +WireConnection;11;0;10;0 +WireConnection;14;0;15;0 +WireConnection;14;1;16;0 +WireConnection;14;2;11;0 +WireConnection;7;0;14;0 +WireConnection;0;0;7;0 +ASEEND*/ +//CHKSM=EF1BCF878CBE9DBF87503B5564BA985D4602AE12 \ No newline at end of file diff --git a/Resources/Material/Graph/UI/XUIBasic.shader.meta b/Resources/Material/Graph/UI/XUIBasic.shader.meta new file mode 100644 index 0000000..a3d788a --- /dev/null +++ b/Resources/Material/Graph/UI/XUIBasic.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 1b840b32ff140044cbe24edf0fea80a5 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Resources/Material/Graph/UI/Xuib_Cube.mat b/Resources/Material/Graph/UI/Xuib_Cube.mat new file mode 100644 index 0000000..86c8682 --- /dev/null +++ b/Resources/Material/Graph/UI/Xuib_Cube.mat @@ -0,0 +1,59 @@ +%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: Xuib_Cube + m_Shader: {fileID: 4800000, guid: 1b840b32ff140044cbe24edf0fea80a5, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: + - _COORDRANGE_NORMAL + - _ELEMENTTYPE_POLYGON + - _GRADIENTTYPE_LINEAR + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _ColorMask: 15 + - _CoordRange: 0 + - _CoordRotateAngle: 0 + - _ElementType: 1 + - _Elementtype: 0 + - _ExpNumber: 1 + - _GradientType: 0 + - _PolygonSides: 4 + - _PolygonSidesv1: 5 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UseUIAlphaClip: 0 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _ColorA: {r: 1, g: 1, b: 1, a: 1} + - _ColorB: {r: 1, g: 1, b: 1, a: 0} + - _CoordCenter: {r: 0.5, g: 0.5, b: 0, a: 0} + - _CoordCenterv2: {r: 0.5, g: 0.5, b: 0, a: 0} + - _CoordTransform: {r: 1, g: 1, b: 0, a: 0} + - _PolygonSize: {r: 0.5, g: 0.5, b: 0, a: 0} + - _PolygonSizev2: {r: 1.25, g: 1.25, b: 0, a: 0} + m_BuildTextureStacks: [] diff --git a/Resources/Material/Graph/UI/Xuib_Cube.mat.meta b/Resources/Material/Graph/UI/Xuib_Cube.mat.meta new file mode 100644 index 0000000..d9fe438 --- /dev/null +++ b/Resources/Material/Graph/UI/Xuib_Cube.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 459b300b87daebf4589bfaee0ea18161 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Resources/Material/Graph/UI/Xuib_GradientX01.mat b/Resources/Material/Graph/UI/Xuib_GradientX01.mat new file mode 100644 index 0000000..0a2a8fe --- /dev/null +++ b/Resources/Material/Graph/UI/Xuib_GradientX01.mat @@ -0,0 +1,59 @@ +%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: Xuib_GradientX01 + m_Shader: {fileID: 4800000, guid: 1b840b32ff140044cbe24edf0fea80a5, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: + - _COORDRANGE_NORMAL + - _ELEMENTTYPE_GRADIENT + - _GRADIENTTYPE_EXPONENTIAL + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _ColorMask: 15 + - _CoordRange: 0 + - _CoordRotateAngle: 0.5 + - _ElementType: 0 + - _Elementtype: 0 + - _ExpNumber: 0.5 + - _GradientType: 3 + - _PolygonSides: 5 + - _PolygonSidesv1: 5 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UseUIAlphaClip: 0 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _ColorA: {r: 1, g: 1, b: 1, a: 1} + - _ColorB: {r: 1, g: 1, b: 1, a: 0} + - _CoordCenter: {r: 0.5, g: 0.5, b: 0, a: 0} + - _CoordCenterv2: {r: 0.5, g: 0.5, b: 0, a: 0} + - _CoordTransform: {r: 1, g: 1, b: 0, a: 0} + - _PolygonSize: {r: 0.5, g: 0.5, b: 0, a: 0} + - _PolygonSizev2: {r: 0.5, g: 0.5, b: 0, a: 0} + m_BuildTextureStacks: [] diff --git a/Resources/Material/Graph/UI/Xuib_GradientX01.mat.meta b/Resources/Material/Graph/UI/Xuib_GradientX01.mat.meta new file mode 100644 index 0000000..6deaceb --- /dev/null +++ b/Resources/Material/Graph/UI/Xuib_GradientX01.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 50533983623ed3340aa999ad69777864 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Resources/Material/Graph/UI/Xuib_GradientX010.mat b/Resources/Material/Graph/UI/Xuib_GradientX010.mat new file mode 100644 index 0000000..c918947 --- /dev/null +++ b/Resources/Material/Graph/UI/Xuib_GradientX010.mat @@ -0,0 +1,59 @@ +%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: Xuib_GradientX010 + m_Shader: {fileID: 4800000, guid: 1b840b32ff140044cbe24edf0fea80a5, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: + - _COORDRANGE_ABS + - _ELEMENTTYPE_GRADIENT + - _GRADIENTTYPE_LINEAR + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _ColorMask: 15 + - _CoordRange: 2 + - _CoordRotateAngle: 0 + - _ElementType: 0 + - _Elementtype: 0 + - _ExpNumber: 0.5 + - _GradientType: 0 + - _PolygonSides: 5 + - _PolygonSidesv1: 5 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UseUIAlphaClip: 0 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _ColorA: {r: 1, g: 1, b: 1, a: 1} + - _ColorB: {r: 1, g: 1, b: 1, a: 0} + - _CoordCenter: {r: 0.5, g: 0.5, b: 0, a: 0} + - _CoordCenterv2: {r: 0, g: 0.5, b: 0, a: 0} + - _CoordTransform: {r: 2, g: 2, b: -1, a: 0} + - _PolygonSize: {r: 0.5, g: 0.5, b: 0, a: 0} + - _PolygonSizev2: {r: 0.5, g: 0.5, b: 0, a: 0} + m_BuildTextureStacks: [] diff --git a/Resources/Material/Graph/UI/Xuib_GradientX010.mat.meta b/Resources/Material/Graph/UI/Xuib_GradientX010.mat.meta new file mode 100644 index 0000000..2ff5f19 --- /dev/null +++ b/Resources/Material/Graph/UI/Xuib_GradientX010.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 97c6ab2cffb9c564a97a2df07ded5499 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Resources/Material/Graph/UI/Xuib_GradientX10.mat b/Resources/Material/Graph/UI/Xuib_GradientX10.mat new file mode 100644 index 0000000..c44307a --- /dev/null +++ b/Resources/Material/Graph/UI/Xuib_GradientX10.mat @@ -0,0 +1,59 @@ +%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: Xuib_GradientX10 + m_Shader: {fileID: 4800000, guid: 1b840b32ff140044cbe24edf0fea80a5, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: + - _COORDRANGE_NORMAL + - _ELEMENTTYPE_GRADIENT + - _GRADIENTTYPE_EXPONENTIAL + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _ColorMask: 15 + - _CoordRange: 0 + - _CoordRotateAngle: 0 + - _ElementType: 0 + - _Elementtype: 0 + - _ExpNumber: 0.5 + - _GradientType: 3 + - _PolygonSides: 5 + - _PolygonSidesv1: 5 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UseUIAlphaClip: 0 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _ColorA: {r: 1, g: 1, b: 1, a: 1} + - _ColorB: {r: 1, g: 1, b: 1, a: 0} + - _CoordCenter: {r: 0.5, g: 0.5, b: 0, a: 0} + - _CoordCenterv2: {r: 0.5, g: 0.5, b: 0, a: 0} + - _CoordTransform: {r: 1, g: 1, b: 0, a: 0} + - _PolygonSize: {r: 0.5, g: 0.5, b: 0, a: 0} + - _PolygonSizev2: {r: 0.5, g: 0.5, b: 0, a: 0} + m_BuildTextureStacks: [] diff --git a/Resources/Material/Graph/UI/Xuib_GradientX10.mat.meta b/Resources/Material/Graph/UI/Xuib_GradientX10.mat.meta new file mode 100644 index 0000000..2d81007 --- /dev/null +++ b/Resources/Material/Graph/UI/Xuib_GradientX10.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4a8f3de3cefc1544c8e35a5c155f5d4a +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Resources/Material/Graph/UI/Xuib_GradientY01.mat b/Resources/Material/Graph/UI/Xuib_GradientY01.mat new file mode 100644 index 0000000..22caeb0 --- /dev/null +++ b/Resources/Material/Graph/UI/Xuib_GradientY01.mat @@ -0,0 +1,57 @@ +%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: Xuib_GradientY01 + m_Shader: {fileID: 4800000, guid: 1b840b32ff140044cbe24edf0fea80a5, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: + - _COORDRANGE_NORMAL + - _ELEMENTTYPE_GRADIENT + - _GRADIENTTYPE_EXPONENTIAL + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _ColorMask: 15 + - _CoordRange: 0 + - _CoordRotateAngle: 0.25 + - _ElementType: 0 + - _Elementtype: 0 + - _ExpNumber: 0.5 + - _GradientType: 3 + - _PolygonSides: 5 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UseUIAlphaClip: 0 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _ColorA: {r: 1, g: 1, b: 1, a: 1} + - _ColorB: {r: 1, g: 1, b: 1, a: 0} + - _CoordCenter: {r: 0.5, g: 0.5, b: 0, a: 0} + - _CoordCenterv2: {r: 0.5, g: 0.5, b: 0, a: 0} + - _CoordTransform: {r: 1, g: 1, b: 0, a: 0} + - _PolygonSizev2: {r: 0.5, g: 0.5, b: 0, a: 0} + m_BuildTextureStacks: [] diff --git a/Resources/Material/Graph/UI/Xuib_GradientY01.mat.meta b/Resources/Material/Graph/UI/Xuib_GradientY01.mat.meta new file mode 100644 index 0000000..275ee29 --- /dev/null +++ b/Resources/Material/Graph/UI/Xuib_GradientY01.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 842f2052018d45b4cbee58f9e3aa126a +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Resources/Material/Graph/UI/Xuib_GradientY010.mat b/Resources/Material/Graph/UI/Xuib_GradientY010.mat new file mode 100644 index 0000000..cebe9cc --- /dev/null +++ b/Resources/Material/Graph/UI/Xuib_GradientY010.mat @@ -0,0 +1,59 @@ +%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: Xuib_GradientY010 + m_Shader: {fileID: 4800000, guid: 1b840b32ff140044cbe24edf0fea80a5, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: + - _COORDRANGE_ABS + - _ELEMENTTYPE_GRADIENT + - _GRADIENTTYPE_LINEAR + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _ColorMask: 15 + - _CoordRange: 2 + - _CoordRotateAngle: 0.25 + - _ElementType: 0 + - _Elementtype: 0 + - _ExpNumber: 0.5 + - _GradientType: 0 + - _PolygonSides: 5 + - _PolygonSidesv1: 5 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UseUIAlphaClip: 0 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _ColorA: {r: 1, g: 1, b: 1, a: 1} + - _ColorB: {r: 1, g: 1, b: 1, a: 0} + - _CoordCenter: {r: 0.5, g: 0.5, b: 0, a: 0} + - _CoordCenterv2: {r: 0, g: 0.5, b: 0, a: 0} + - _CoordTransform: {r: 2, g: 2, b: 0, a: -0.5} + - _PolygonSize: {r: 0.5, g: 0.5, b: 0, a: 0} + - _PolygonSizev2: {r: 0.5, g: 0.5, b: 0, a: 0} + m_BuildTextureStacks: [] diff --git a/Resources/Material/Graph/UI/Xuib_GradientY010.mat.meta b/Resources/Material/Graph/UI/Xuib_GradientY010.mat.meta new file mode 100644 index 0000000..4cf4dce --- /dev/null +++ b/Resources/Material/Graph/UI/Xuib_GradientY010.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 056550500989d154080e2aab1e25f3f9 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Resources/Material/Graph/UI/Xuib_GradientY10.mat b/Resources/Material/Graph/UI/Xuib_GradientY10.mat new file mode 100644 index 0000000..2e6d66f --- /dev/null +++ b/Resources/Material/Graph/UI/Xuib_GradientY10.mat @@ -0,0 +1,59 @@ +%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: Xuib_GradientY10 + m_Shader: {fileID: 4800000, guid: 1b840b32ff140044cbe24edf0fea80a5, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: + - _COORDRANGE_NORMAL + - _ELEMENTTYPE_GRADIENT + - _GRADIENTTYPE_EXPONENTIAL + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _ColorMask: 15 + - _CoordRange: 0 + - _CoordRotateAngle: 0.75 + - _ElementType: 0 + - _Elementtype: 0 + - _ExpNumber: 0.5 + - _GradientType: 3 + - _PolygonSides: 5 + - _PolygonSidesv1: 5 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UseUIAlphaClip: 0 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _ColorA: {r: 1, g: 1, b: 1, a: 1} + - _ColorB: {r: 1, g: 1, b: 1, a: 0} + - _CoordCenter: {r: 0.5, g: 0.5, b: 0, a: 0} + - _CoordCenterv2: {r: 0.5, g: 0.5, b: 0, a: 0} + - _CoordTransform: {r: 1, g: 1, b: 0, a: 0} + - _PolygonSize: {r: 0.5, g: 0.5, b: 0, a: 0} + - _PolygonSizev2: {r: 0.5, g: 0.5, b: 0, a: 0} + m_BuildTextureStacks: [] diff --git a/Resources/Material/Graph/UI/Xuib_GradientY10.mat.meta b/Resources/Material/Graph/UI/Xuib_GradientY10.mat.meta new file mode 100644 index 0000000..ca0f736 --- /dev/null +++ b/Resources/Material/Graph/UI/Xuib_GradientY10.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3481ff25eecee72449e5e93a6fa64ee8 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Helper/MacroEventTrigger.cs b/Runtime/Helper/MacroEventTrigger.cs index ca23109..ed308c5 100644 --- a/Runtime/Helper/MacroEventTrigger.cs +++ b/Runtime/Helper/MacroEventTrigger.cs @@ -4,7 +4,7 @@ using UnityEngine.Events; using UnityEngine.EventSystems; using XericLibrary.Runtime.MacroLibrary; -namespace DigitalTwinTool +namespace Deconstruction.Runtime { public static class MacroEventTrigger { @@ -84,49 +84,49 @@ namespace DigitalTwinTool #region 细节事件 - public static EventTrigger.TriggerEvent OnPointerEnter(this EventTrigger eventTrigger) + public static EventTrigger.TriggerEvent onPointerEnter(this EventTrigger eventTrigger) => eventTrigger.GetEventTrigger(EventTriggerType.PointerEnter); - public static EventTrigger.TriggerEvent OnPointerExit(this EventTrigger eventTrigger) + public static EventTrigger.TriggerEvent onPointerExit(this EventTrigger eventTrigger) => eventTrigger.GetEventTrigger(EventTriggerType.PointerExit); - public static EventTrigger.TriggerEvent OnPointerDown(this EventTrigger eventTrigger) + public static EventTrigger.TriggerEvent onPointerDown(this EventTrigger eventTrigger) => eventTrigger.GetEventTrigger(EventTriggerType.PointerDown); - public static EventTrigger.TriggerEvent OnPointerUp(this EventTrigger eventTrigger) + public static EventTrigger.TriggerEvent onPointerUp(this EventTrigger eventTrigger) => eventTrigger.GetEventTrigger(EventTriggerType.PointerUp); - public static EventTrigger.TriggerEvent OnPointerClick(this EventTrigger eventTrigger) + public static EventTrigger.TriggerEvent onPointerClick(this EventTrigger eventTrigger) => eventTrigger.GetEventTrigger(EventTriggerType.PointerClick); - public static EventTrigger.TriggerEvent OnDrag(this EventTrigger eventTrigger) + public static EventTrigger.TriggerEvent onDrag(this EventTrigger eventTrigger) => eventTrigger.GetEventTrigger(EventTriggerType.Drag); - public static EventTrigger.TriggerEvent OnDrop(this EventTrigger eventTrigger) + public static EventTrigger.TriggerEvent onDrop(this EventTrigger eventTrigger) => eventTrigger.GetEventTrigger(EventTriggerType.Drop); - public static EventTrigger.TriggerEvent OnScroll(this EventTrigger eventTrigger) + public static EventTrigger.TriggerEvent onScroll(this EventTrigger eventTrigger) => eventTrigger.GetEventTrigger(EventTriggerType.Scroll); - public static EventTrigger.TriggerEvent OnUpdateSelected(this EventTrigger eventTrigger) + public static EventTrigger.TriggerEvent onUpdateSelected(this EventTrigger eventTrigger) => eventTrigger.GetEventTrigger(EventTriggerType.UpdateSelected); - public static EventTrigger.TriggerEvent OnSelect(this EventTrigger eventTrigger) + public static EventTrigger.TriggerEvent onSelect(this EventTrigger eventTrigger) => eventTrigger.GetEventTrigger(EventTriggerType.Select); - public static EventTrigger.TriggerEvent OnDeselect(this EventTrigger eventTrigger) + public static EventTrigger.TriggerEvent onDeselect(this EventTrigger eventTrigger) => eventTrigger.GetEventTrigger(EventTriggerType.Deselect); - public static EventTrigger.TriggerEvent OnMove(this EventTrigger eventTrigger) + public static EventTrigger.TriggerEvent onMove(this EventTrigger eventTrigger) => eventTrigger.GetEventTrigger(EventTriggerType.Move); - public static EventTrigger.TriggerEvent OnInitializePotentialDrag(this EventTrigger eventTrigger) + public static EventTrigger.TriggerEvent onInitializePotentialDrag(this EventTrigger eventTrigger) => eventTrigger.GetEventTrigger(EventTriggerType.InitializePotentialDrag); - public static EventTrigger.TriggerEvent OnBeginDrag(this EventTrigger eventTrigger) + public static EventTrigger.TriggerEvent onBeginDrag(this EventTrigger eventTrigger) => eventTrigger.GetEventTrigger(EventTriggerType.BeginDrag); - public static EventTrigger.TriggerEvent OnEndDrag(this EventTrigger eventTrigger) + public static EventTrigger.TriggerEvent onEndDrag(this EventTrigger eventTrigger) => eventTrigger.GetEventTrigger(EventTriggerType.EndDrag); /// @@ -134,10 +134,10 @@ namespace DigitalTwinTool /// /// /// - public static EventTrigger.TriggerEvent OnSubmit(this EventTrigger eventTrigger) + public static EventTrigger.TriggerEvent onSubmit(this EventTrigger eventTrigger) => eventTrigger.GetEventTrigger(EventTriggerType.Submit); - public static EventTrigger.TriggerEvent OnCancel(this EventTrigger eventTrigger) + public static EventTrigger.TriggerEvent onCancel(this EventTrigger eventTrigger) => eventTrigger.GetEventTrigger(EventTriggerType.Cancel); private static EventTrigger.TriggerEvent GetEventTrigger(this EventTrigger eventTrigger, EventTriggerType type) @@ -160,6 +160,8 @@ namespace DigitalTwinTool return e; } + public static void ClearAllEventTrigger(this EventTrigger eventTrigger) => eventTrigger.triggers.Clear(); + #endregion } } \ No newline at end of file diff --git a/Runtime/Helper/MacroLayout.cs b/Runtime/Helper/MacroLayout.cs index 6456445..c98b5b9 100644 --- a/Runtime/Helper/MacroLayout.cs +++ b/Runtime/Helper/MacroLayout.cs @@ -6,26 +6,42 @@ using UnityEngine; using UnityEngine.UI; using XericLibrary.Runtime.MacroLibrary; -namespace DigitalTwinTool +namespace Deconstruction.Runtime { public static class MacroLayout { /// - /// 将布局组标记为脏,以触发重算。 + /// 将布局组标记为脏,以触发重算布局。 /// /// - public static void SetDirty(this LayoutGroup layoutGroup) + public static void SetLayoutDirty(this LayoutGroup layoutGroup) { - var type = typeof(LayoutGroup); - var method = type.GetMethod("SetDirty", BindingFlags.Instance | BindingFlags.NonPublic); - method?.Invoke(layoutGroup, null); + // var type = typeof(LayoutGroup); + // var method = type.GetMethod("SetDirty", BindingFlags.Instance | BindingFlags.NonPublic); + // method?.Invoke(layoutGroup, null); + LayoutRebuilder.ForceRebuildLayoutImmediate(layoutGroup.RectTransform()); } - private static HashSet _rebuildSet = new HashSet(); - public static void WaitParentLayoutRebuild(this MonoBehaviour script) + /// + /// 将canvas组件白哦及为脏,以触发canvas充算布局 + /// + /// + public static void SetLayoutDirty(this RectTransform rectTrans) { + LayoutRebuilder.ForceRebuildLayoutImmediate(rectTrans); + } + + + private static HashSet _rebuildSet = new HashSet(); + /// + /// 等待这帧过去之后再触发重建 + /// + /// + public static void WaitParentLayoutRebuildThenRebuildAgen(this MonoBehaviour script) + { + if (!script.RectTransform()) + return; script.StartCoroutine(waitForRebuild()); - return; IEnumerator waitForRebuild() { diff --git a/Runtime/LitJSON.dll b/Runtime/LitJSON.dll new file mode 100644 index 0000000..3f22b63 Binary files /dev/null and b/Runtime/LitJSON.dll differ diff --git a/Runtime/LitJSON.dll.meta b/Runtime/LitJSON.dll.meta new file mode 100644 index 0000000..1391323 --- /dev/null +++ b/Runtime/LitJSON.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: af972e12c8e41814188a98b92de42e0c +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 1 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Lrss3.Deconstruction.asmdef b/Runtime/Lrss3.Deconstruction.asmdef index 60f5425..ab246f8 100644 --- a/Runtime/Lrss3.Deconstruction.asmdef +++ b/Runtime/Lrss3.Deconstruction.asmdef @@ -2,7 +2,7 @@ "name": "Lrss3.Deconstruction", "rootNamespace": "Deconstruction", "references": [ - "GUID:6055be8ebefd69e48b49212b09b47b2f" + "Unity.TextMeshPro" ], "includePlatforms": [], "excludePlatforms": [], diff --git a/Runtime/UI/TmpText/TMPHyperlinkManager.cs b/Runtime/UI/TmpText/TMPHyperlinkManager.cs index 745553d..e733c7c 100644 --- a/Runtime/UI/TmpText/TMPHyperlinkManager.cs +++ b/Runtime/UI/TmpText/TMPHyperlinkManager.cs @@ -60,7 +60,9 @@ namespace Deconstruction.UI.TmpText /// /// 当前超链接管理器下的所有超链接 /// +#if ODIN_INSPECTOR [ShowInInspector] +#endif public List Children { get; internal set; } /// diff --git a/Runtime/UI/TmpText/TMPHyperlinkReceiver.cs b/Runtime/UI/TmpText/TMPHyperlinkReceiver.cs index 0231b99..ab33201 100644 --- a/Runtime/UI/TmpText/TMPHyperlinkReceiver.cs +++ b/Runtime/UI/TmpText/TMPHyperlinkReceiver.cs @@ -115,7 +115,7 @@ namespace Deconstruction.UI.TmpText } catch (Exception e) { - Debug.LogError($"超链接目标事件存在错误 {_tmpText.text.LimitStringLength(32)} :\n{e.Message}\n{e.Data}", this); + Debug.LogError($"超链接目标事件存在错误 {_tmpText.text.LimitStringLength(32)} :\n{e.Message}\n{e}\n\n", this); } } } diff --git a/Runtime/UI/UILineRenderer.meta b/Runtime/UI/UILineRenderer.meta new file mode 100644 index 0000000..aa01962 --- /dev/null +++ b/Runtime/UI/UILineRenderer.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 579f0719bf2bbad4cbf32941bd430366 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/XericCecil.dll b/Runtime/XericCecil.dll index 3f455c5..ff6a4c2 100644 Binary files a/Runtime/XericCecil.dll and b/Runtime/XericCecil.dll differ diff --git a/Runtime/XericLibrary.dll b/Runtime/XericLibrary.dll index 23b1932..93e93c7 100644 Binary files a/Runtime/XericLibrary.dll and b/Runtime/XericLibrary.dll differ diff --git a/Samples~/XericUnityAnalyzer/XericUnityAnalyzer.dll b/Samples~/XericUnityAnalyzer/XericUnityAnalyzer.dll new file mode 100644 index 0000000..56e805d Binary files /dev/null and b/Samples~/XericUnityAnalyzer/XericUnityAnalyzer.dll differ diff --git a/Samples~/XericUnityAnalyzer/安装说明.txt b/Samples~/XericUnityAnalyzer/安装说明.txt new file mode 100644 index 0000000..d0c6ccf --- /dev/null +++ b/Samples~/XericUnityAnalyzer/安装说明.txt @@ -0,0 +1,23 @@ +安装说明 +-------- + +这个目录包含 Xeric Library 的 Roslyn 语法分析器 DLL。 + +重要:DLL 不能放在深层目录! +============================== + +Rider / VS 等 IDE 在扫描 Roslyn Analyzer 时,只会识别浅层目录下的 DLL。 +如果 DLL 被放在过深的路径中,IDE 将不会加载它,代码检查也会失效。 + +推荐放置位置(任选其一): + + Assets/ ← 项目根目录(直接放入) + Assets/Editor/ ← Editor 专用目录 + Assets/Plugins/ ← 传统插件目录 + +不推荐的位置: + + Assets/Samples/.../XericUnityAnalyzer/ ← Sample 导入后默认在这里,IDE 可能不识别! + +因此,从 Package Manager 导入此 Sample 后,请手动将 XericUnityAnalyzer.dll +移动到上述推荐位置之一,然后删除原 Sample 目录即可。 diff --git a/package.json b/package.json index 144de8e..610c1c1 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "com.lrss3.deconstruction", "displayName": "Xeric Library", - "version": "0.5.7", + "version": "0.5.8", "unity": "2021.3", "description": "\u6b22\u8fce\u4f7f\u7528Xeric Library, \u8fd9\u662f\u4e00\u4e2a\u4e13\u6ce8\u4ee3\u7801\u7684\u6269\u5c55\u5e93 \r\n\r\n * \u4e13\u6ce8Unity\u6210\u5458\u8bed\u6cd5, \u6269\u5c55\u591a\u79cd\u57fa\u672c\u7c7b\u578b\u7684\u6570\u636e\u7ed3\u6784\u7684Linq\u8bed\u6cd5/\u8bed\u6cd5\u7cd6, \u63d0\u4f9b\uff1a \u51fd\u6570\u5e73\u6ed1\u3001 \u591a\u9879\u5f0f\u8ba1\u7b97\u3001 \u6743\u91cd\u62df\u5408\u3001 \u8fc7\u7a0b\u5206\u7ea7\u3001 \u5de5\u4e1a\u63a7\u5236\u3001 \u66f2\u7ebf\u7ed8\u5236\u3001 \u8def\u5f84\u8bbe\u7f6e\u3001 \u5bf9\u8c61\u63a7\u5236\u3001 \u8fed\u4ee3\u6269\u5c55\u3001 \u7a7a\u95f4\u53d8\u6362\u3001 \u72ec\u7279\u7ed3\u6784\u3001 \u6587\u672c\u683c\u5f0f\u3001 \u7c7b\u578b\u8f6c\u6362\u3001 \u673a\u5668\u7f16\u7801\u3001 \u5f00\u53d1\u8c03\u8bd5\u3001 \u52a8\u6001\u751f\u6210\u3001 \u51e0\u4f55\u521b\u5efa\u3001 \u5feb\u901f\u6c60\u5316\u3001 \u5bfc\u822a\u5bfb\u8def\u3001 \u9694\u79bb\u63a7\u5236\u3001 \u9694\u79bb\u8f93\u5165\u3001 \u8bed\u4e49\u5316\u59d4\u6258\u3001 \u53cd\u5c04\u8d85\u9a70\u3001 \u6570\u5b66\u5e38\u6570\u3001 \u5355\u4f4d\u6362\u7b97\u3001 \u6392\u5e8f\u7b97\u6cd5\u3001 \u7a0b\u5e8f\u8c03\u7528\u3001 \u7f51\u7edc\u8fde\u63a5\u7b49\u5feb\u6377\u7528\u6cd5\u3002 \r\n\r\n * \u6269\u5c55\u7279\u6b8a\u7c7b\u578b, \u5305\u62ec\u4e14\u4e0d\u9650\u4e8e: \u591a\u7ef4\u5e03\u5c14\u3001 \u6837\u6761\u66f2\u7ebf\u3001 \u8d85\u7ea7\u5355\u4f8b\u3001 \u591a\u4f8b\u7cfb\u7edf\u3001 \u90bb\u5c45\u7f51\u7edc\u3001 \u56db\u53c9\u6811\u3001 \u5b57\u5178\u6811\u3001 \u8f6f\u5f15\u7528\u5c01\u88c5\u5668\u7b49\u3002 \r\n\r\n * \u6269\u5c55\u5404\u79cd\u5e38\u7528\u811a\u672c: \u6e38\u620f\u4ea4\u4e92\u3001 \u754c\u9762\u9002\u914d\u3001 \u5f31\u6269\u5c55\u3001 \u7ed8\u5236\u5de5\u5382\u3001 SQL\u6269\u5c55\u3002 \r\n\r\n * \u517c\u5bb9\u4e0d\u89c4\u8303\u7a0b\u5e8f: \u9488\u5bf9\u4e0d\u89c4\u8303\u6216\u6beb\u65e0\u8bbe\u8ba1\u89c4\u5219\u53ef\u8a00\u7684\u4ee3\u7801, \u63d0\u4f9b\u4e86\u66f4\u591a\u57fa\u4e8e\u53cd\u5c04, CIL\u7279\u6027\u7b49\u5e95\u5c42\u8bed\u6cd5\u7684\u7a0b\u5e8f\u6269\u5c55, \u4ee5\u4fbf\u5feb\u901f\u5b9e\u73b0\u76ee\u7684: \r\n1. \u811a\u672c\u6ca1\u6709\u7ee7\u627f\u5355\u4f8b? \"\u8d85\u7ea7\u5355\u4f8b\"\u4e0d\u9700\u8981\u58f0\u540d, \u4e5f\u4e0d\u9700\u8981\u4fee\u6539\u4efb\u4f55\u539f\u6765\u7684\u811a\u672c\u5185\u5bb9, \u5f84\u76f4\u8c03\u7528\u5c31\u662f\u5355\u4f8b\u3002\r\n2. \u6570\u636e\u7ed3\u6784\u5b57\u6bb5\u5197\u4f59\u91cd\u590d? \"\u8f6f\u63a5\u53e3\" (SoftInterface) \u652f\u6301\u5feb\u901f\u6267\u884c\u53cd\u5c04\u83b7\u53d6\u548c\u8bbe\u7f6e\uff0c\u65b9\u6cd5\u59d4\u6258\uff0c\u5b57\u6bb5\u5c5e\u6027\u4e00\u884c\u8c03\u7528\u3002 \r\n3. untiy\u5bf9\u8c61\u8981\u9075\u5faa\u751f\u547d\u5468\u671f\u6c60\u5316\u592a\u9ebb\u70e6? \"\u8054\u5408\u5bf9\u8c61\u6c60\" (MacroPool.UnionSet) \u76f4\u63a5\u5c06\u8bbe\u5b9a\u9879\u76ee\u5f00\u653e\u5230inspector\u4e0a\u914d\u7f6e\uff0c\u4ee3\u7801\u4e2d\u53ea\u9700\u8981get\u548crelease\u5c31\u53ef\u4ee5! \r\n4. \u7a0b\u5e8fUI\u6846\u67b6\u548c\u903b\u8f91\u6846\u67b6\u9ad8\u5ea6\u8026\u5408\u65e0\u4ece\u4e0b\u624b? \u6709\u70b9\u9ebb\u70e6, \u4e0d\u8fc7\u83dc\u5355\u7279\u6027, \u67e5\u627e\u7279\u6027, \u547d\u540d\u6807\u8bb0\u7279\u6027\u53ef\u4ee5\u5e2e\u52a9\u4f60\u65e0\u89c6\u5185\u5bb9\u67e5\u627e\u5b57\u6bb5\u5c5e\u6027\u65b9\u6cd5\u7c7b\u578b\u7b49\u5185\u5bb9, \u4f7f\u7528 `XericUIActionVessel` \u63d2\u4ef6\u66f4\u662f\u5141\u8bb8\u76f4\u63a5\u5c06\u7c7b\u4f20\u5165\u5c31\u80fd\u7a0b\u5e8f\u5316\u751f\u6210\u83dc\u5355\u754c\u9762\u3002 \r\n5. \u9a71\u52a8ui\u7684\u6570\u636e\u91cf\u592a\u5927? \u63d0\u4f9b\u591a\u79cd\u57fa\u4e8eUI\u6846\u67b6\u7684\u6570\u636e\u7ed3\u6784\u865a\u62df\u5316\u6280\u672f, \u4f7f\u7528\u865a\u62df\u5316\u62c6\u5206\u6570\u636e\u53ef\u4ee5\u6bcf\u6b21\u5237\u65b0\u7684\u538b\u529b\u3002 \u4f7f\u7528\u6b64\u529f\u80fd\u9700\u8981\u5b89\u88c5XericUIActionVessel\u63d2\u4ef6, \u4ee3\u7801\u4ee5\u811a\u672c\u5448\u73b0\uff0c\u76f4\u63a5\u6d4f\u89c8\uff0c\u7f16\u5199\u65f6\u9075\u5faa\u7cbe\u7ec6\u7684\u5de5\u5382\u6743\u80fd\u5212\u5206\uff01 \r\n6. \u559c\u6b22\u51fd\u6570\u5f0f\u7f16\u7a0b\u548c\u4fbf\u6377\u7684\u8bed\u6cd5\u7cd6? \u63d2\u4ef6\u63d0\u4f9b\u591a\u79cd\u5de5\u5177\u7c7b: \u679a\u4e3e\u53ef\u4ee5\u4f7f\u7528`MacroEnum`\u5206\u7c7b\u548c`MacroEnum`\u6269\u5c55; \u6570\u5b66, \u5411\u91cf, \u51e0\u4f55, \u6570\u636e\u7ed3\u6784\u6269\u5c55, \u5e38\u89c1\u7b97\u6cd5, \u5e38\u7528\u5b57\u7b26\u8ba1\u7b97\u5df2\u7ecf\u5168\u90e8\u5185\u5d4c`MacroMath`\u5206\u7c7b; \r\n7. \u9700\u8981\u4f7f\u7528\u9ad8\u7ea7\u6570\u636e\u7ed3\u6784? \u5927\u9876\u5806, \u56db\u53c9\u6811, \u516b\u53c9\u6811, \u5b57\u5178\u6811, \u65f6\u95f4\u6233, \u591a\u6bb5\u7ebf, \u8d1d\u585e\u5c14, \u591a\u7ef4\u5e03\u5c14(\u6bd4\u7279\u77e2\u91cf), \u6bd4\u7279\u56fe, \u53cc\u751f\u54c8\u5e0c\u8868, \u76f8\u90bb\u7f51\u683c\u7b49\u5185\u5bb9\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528\u3002 \r\n8. \u60f3\u8981\u7acb\u523b\u80fd\u591f\u5728\u573a\u666f\u4e2d\u79fb\u52a8\u89d2\u8272? \u7b2c\u4e00\u4eba\u79f0, \u7b2c\u4e09\u4eba\u79f0, \u4e0a\u5e1d\u89c6\u89d2\u5df2\u7ecf\u51c6\u5907\u5c31\u7eea! \r\n9. \u538c\u70e6\u590d\u6742\u7684\u6309\u952e\u68c0\u67e5\u903b\u8f91? \u6309\u952e\u5b8f (MacroKey) \u63d0\u4f9b\u72b6\u6001\u8868\u5904\u7406\u66f4\u591a\u6309\u952e, \u53ef\u4ee5\u8bc6\u522b\u77ed\u6309, \u957f\u6309, \u53cc\u51fb, \u8fde\u51fb, \u62d6\u62fd, \u4ee5\u53ca\u5b83\u4eec\u7684\u6309\u4e0b\u548c\u91ca\u653e\u72b6\u6001! \u4e14\u53ef\u4ee5\u9009\u62e9\u4ee5\u65f6\u95f4, \u5750\u6807\u7b49\u5171\u8ba14\u79cd\u6a21\u5f0f\u89e6\u53d1, \u652f\u6301\u65b0\u8f93\u5165\u7cfb\u7edf, \u6ee1\u8db3\u7edd\u5927\u90e8\u5206\u573a\u666f\u7684\u7ec6\u5206\u9700\u6c42\u3002 \r\n10. \u9700\u8981\u9690\u85cf\u65e5\u5fd7\u8c03\u7528\u6808\u4fe1\u606f? XericLogger \u53ef\u4ee5\u51cf\u5c11\u65e5\u5fd7\u8f93\u51fa\u5185\u5bb9\u3002 \r\n11. \u9700\u8981\u66f4\u591a\u8c03\u8bd5\u4fe1\u606f? \u63d0\u4f9b\u53ef\u4ee5\u548c\u865a\u5e7b\u539f\u751f\u5ab2\u7f8e\u7684Gizmos\u8c03\u8bd5\u663e\u793a\u529f\u80fd\u3002 \r\n11. \u62c5\u5fc3\u517c\u5bb9\u6027\u5417? \u7a0b\u5e8f\u4e3b\u8981\u57fa\u4e8e2022\u7248\u672c\u5f00\u53d1, \u5411\u4e0b\u517c\u5bb92021, \u5411\u4e0a\u652f\u63016000, \u4e0d\u6d89\u53ca\u6e32\u67d3\u7ba1\u7ebfAPI, \u6709\u9488\u5bf9webgl\u7248\u672c\u7684\u5355\u72ec\u6784\u5efa\u7248\u672c, \u4e14\u7ecf\u8fc7\u9879\u76ee\u5b9e\u6218\u9a8c\u8bc1\u3002 \r\n\r\n\u66f4\u591a\u7f16\u8f91\u5668\u529f\u80fd\u53c2\u8003: \r\n * \u5b89\u88c5Xeric Blueprint Graph\u4ee5\u83b7\u53d6Unity\u4e0a\u84dd\u56fe\u8282\u70b9\u529f\u80fd, \u5e76\u652f\u6301Xeric\u51fd\u6570\u5e93\u529f\u80fd\u3002\r\n * \u5b89\u88c5Xeric UI Graph\u4ee5\u83b7\u53d6\u84dd\u56fe\u5316UI\u751f\u6210\u529f\u80fd, \u4f7f\u7528\u84dd\u56fe\u903b\u8f91\u63a7\u5236UI\u4ea4\u4e92, \u751f\u6210\u903b\u8f91, \u5e76\u652f\u6301Xeric\u51fd\u6570\u5e93\u529f\u80fd\u3002\r\n * \u5b89\u88c5Digital Twin Tool\u4ee5\u83b7\u53d6\u5e38\u7528\u8c03\u8bd5\u5de5\u5177\u96c6\u3002\r\n * \u5b89\u88c5Nexus Frame Flow\u4ee5\u83b7\u53d6\u5de5\u4f5c\u67b6\u6784\u6d41\u5904\u7406\u529f\u80fd\u3002\r\n * \u5b89\u88c5Xeric Editor\u8f85\u52a9\u5f15\u64ce\u5927\u7eb2\u7f8e\u5316\u7ec4\u4ef6\u3001 \u8d44\u6e90\u5783\u573e\u5904\u7406\u7ec4\u4ef6\u3001 \u8d44\u6e90\u7f13\u5b58\u7ec4\u4ef6\u3001 \u5feb\u901f\u622a\u56fe\u529f\u80fd, \u4ee5\u53ca\u66f4\u591a\u5feb\u6377\u952e\u529f\u80fd", "keywords": [ @@ -22,6 +22,11 @@ "displayName": "\u8f68\u8ff9\u7ebf\u8def\u9884\u8bbe\u811a\u672c", "description": "\u9002\u7528\u4e8e\u5e73\u9762\u7ebf\u8def\u7ed8\u5236\u53ca\u5bfc\u822a\u7684\u4e00\u79cd\u89e3\u51b3\u65b9\u6848", "path": "Samples~/HorizonLineOrbit" + }, + { + "displayName": "Roslyn 语法分析器", + "description": "Xeric Library 的 C# 语法分析器,提供代码检查和优化建议。导入后请将 DLL 移至 Assets/ 等浅层目录,IDE 才能识别", + "path": "Samples~/XericUnityAnalyzer" } ] } \ No newline at end of file