com.wallstop-studios.unity-helpers 2.1.1 → 2.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +1 -0
- package/Docs/ILIST_SORTING_PERFORMANCE.md +16 -16
- package/Docs/INDEX.md +1 -0
- package/Docs/RANDOM_PERFORMANCE.md +15 -15
- package/Docs/REFLECTION_HELPERS.md +84 -1
- package/Docs/REFLECTION_PERFORMANCE.md +169 -0
- package/{package-lock.json.meta → Docs/REFLECTION_PERFORMANCE.md.meta} +1 -1
- package/Docs/RELATIONAL_COMPONENTS.md +6 -0
- package/Docs/RELATIONAL_COMPONENT_PERFORMANCE.md +63 -0
- package/Docs/RELATIONAL_COMPONENT_PERFORMANCE.md.meta +7 -0
- package/Docs/SPATIAL_TREE_2D_PERFORMANCE.md +64 -64
- package/Docs/SPATIAL_TREE_3D_PERFORMANCE.md +64 -64
- package/Editor/Sprites/AnimationCopier.cs +1 -1
- package/Editor/Sprites/AnimationViewerWindow.cs +4 -4
- package/Editor/Sprites/SpriteSettingsApplierAPI.cs +2 -1
- package/Editor/Sprites/TextureResizerWizard.cs +4 -3
- package/Editor/Utils/ScriptableObjectSingletonCreator.cs +3 -3
- package/README.md +8 -3
- package/Runtime/Core/Attributes/BaseRelationalComponentAttribute.cs +147 -20
- package/Runtime/Core/Attributes/ChildComponentAttribute.cs +630 -117
- package/Runtime/Core/Attributes/NotNullAttribute.cs +5 -2
- package/Runtime/Core/Attributes/ParentComponentAttribute.cs +477 -103
- package/Runtime/Core/Attributes/RelationalComponentAssigner.cs +26 -3
- package/Runtime/Core/Attributes/RelationalComponentExtensions.cs +19 -3
- package/Runtime/Core/Attributes/SiblingComponentAttribute.cs +265 -92
- package/Runtime/Core/CodeGen.meta +8 -0
- package/Runtime/Core/DataStructure/ImmutableBitSet.cs +5 -20
- package/Runtime/Core/Helper/Helpers.cs +8 -0
- package/Runtime/Core/Helper/Logging/UnityLogTagFormatter.cs +11 -7
- package/Runtime/Core/Helper/Objects.cs +1 -1
- package/Runtime/Core/Helper/ReflectionHelpers.Factory.cs +5142 -0
- package/Runtime/Core/Helper/ReflectionHelpers.Factory.cs.meta +11 -0
- package/Runtime/Core/Helper/ReflectionHelpers.cs +1812 -1518
- package/Runtime/Core/Math/Line2D.cs +2 -4
- package/Runtime/Core/Math/Line3D.cs +2 -4
- package/Runtime/Core/Random/FlurryBurstRandom.cs +0 -6
- package/Runtime/Tags/AttributeMetadataCache.cs +4 -6
- package/Runtime/Tags/CosmeticEffectData.cs +1 -1
- package/Runtime/Visuals/UIToolkit/MultiFileSelectorElement.cs +3 -3
- package/Tests/Editor/Helper/HelpersTests.cs +2 -2
- package/Tests/Editor/Helper/ReflectionHelpersTypedEditorTests.cs +87 -0
- package/Tests/Editor/Helper/ReflectionHelpersTypedEditorTests.cs.meta +11 -0
- package/Tests/Editor/Helper/SpriteHelpersTests.cs +1 -1
- package/Tests/Editor/PrefabCheckerReportTests.cs +3 -3
- package/Tests/Editor/Sprites/AnimationCopierFilterTests.cs +18 -12
- package/Tests/Editor/Sprites/AnimationCopierWindowTests.cs +8 -7
- package/Tests/Editor/Sprites/AnimationViewerWindowTests.cs +2 -1
- package/Tests/Editor/Sprites/ScriptableSpriteAtlasEditorTests.cs +6 -5
- package/Tests/Editor/Sprites/SpriteCropperAdditionalTests.cs +2 -1
- package/Tests/Editor/Sprites/SpriteCropperTests.cs +7 -6
- package/Tests/Editor/Sprites/SpritePivotAdjusterAdditionalTests.cs +2 -1
- package/Tests/Editor/Sprites/SpritePivotAdjusterTests.cs +4 -3
- package/Tests/Editor/Sprites/TextureResizerWizardTests.cs +10 -9
- package/Tests/Editor/Sprites/TextureSettingsApplierAPITests.cs +2 -1
- package/Tests/Runtime/Helper/ObjectsTests.cs +1 -1
- package/Tests/Runtime/Helper/ReflectionHelperCapabilityMatrixTests.cs +2923 -0
- package/Tests/Runtime/Helper/ReflectionHelperCapabilityMatrixTests.cs.meta +11 -0
- package/Tests/Runtime/Helper/ReflectionHelperTests.cs +660 -0
- package/Tests/Runtime/Performance/ReflectionPerformanceTests.cs +1238 -0
- package/Tests/Runtime/Performance/ReflectionPerformanceTests.cs.meta +11 -0
- package/Tests/Runtime/Performance/RelationalComponentBenchmarkTests.cs +832 -0
- package/Tests/Runtime/Performance/RelationalComponentBenchmarkTests.cs.meta +11 -0
- package/package.json +1 -1
- package/Tests/Runtime/Performance/RelationComponentPerformanceTests.cs +0 -60
- package/Tests/Runtime/Performance/RelationComponentPerformanceTests.cs.meta +0 -3
|
@@ -32,34 +32,34 @@ This document contains performance benchmarks for the 2D spatial tree implementa
|
|
|
32
32
|
|
|
33
33
|
| Construction | KDTree2D (Balanced) | KDTree2D (Unbalanced) | QuadTree2D | RTree2D |
|
|
34
34
|
| ----------------- | ------------------- | --------------------- | ---------- | ---------- |
|
|
35
|
-
| 1,000,000 entries | 4 (0.
|
|
35
|
+
| 1,000,000 entries | 4 (0.243s) | 4 (0.207s) | 4 (0.245s) | 1 (0.617s) |
|
|
36
36
|
|
|
37
37
|
##### Elements In Range
|
|
38
38
|
|
|
39
39
|
| Elements In Range | KDTree2D (Balanced) | KDTree2D (Unbalanced) | QuadTree2D | RTree2D |
|
|
40
40
|
| --------------------------- | ------------------- | --------------------- | ---------- | ------- |
|
|
41
|
-
| Full (~span/2) (r=499.5) | 59 |
|
|
42
|
-
| Half (~span/4) (r=249.8) | 238 | 237 |
|
|
43
|
-
| Quarter (~span/8) (r=124.9) | 946 |
|
|
44
|
-
| Tiny (~span/1000) (r=1) |
|
|
41
|
+
| Full (~span/2) (r=499.5) | 59 | 59 | 55 | 7 |
|
|
42
|
+
| Half (~span/4) (r=249.8) | 238 | 237 | 204 | 28 |
|
|
43
|
+
| Quarter (~span/8) (r=124.9) | 946 | 946 | 815 | 119 |
|
|
44
|
+
| Tiny (~span/1000) (r=1) | 103,114 | 105,599 | 143,605 | 107,881 |
|
|
45
45
|
|
|
46
46
|
##### Get Elements In Bounds
|
|
47
47
|
|
|
48
48
|
| Get Elements In Bounds | KDTree2D (Balanced) | KDTree2D (Unbalanced) | QuadTree2D | RTree2D |
|
|
49
49
|
| -------------------------- | ------------------- | --------------------- | ---------- | ------- |
|
|
50
|
-
| Full (size=999.0x999.0) |
|
|
51
|
-
| Half (size=499.5x499.5) | 1,
|
|
52
|
-
| Quarter (size=249.8x249.8) | 6,
|
|
53
|
-
| Unit (size=1) |
|
|
50
|
+
| Full (size=999.0x999.0) | 387 | 387 | 260 | 18 |
|
|
51
|
+
| Half (size=499.5x499.5) | 1,743 | 1,783 | 1,225 | 78 |
|
|
52
|
+
| Quarter (size=249.8x249.8) | 6,999 | 7,184 | 3,830 | 379 |
|
|
53
|
+
| Unit (size=1) | 149,073 | 153,060 | 197,411 | 112,249 |
|
|
54
54
|
|
|
55
55
|
##### Approximate Nearest Neighbors
|
|
56
56
|
|
|
57
57
|
| Approximate Nearest Neighbors | KDTree2D (Balanced) | KDTree2D (Unbalanced) | QuadTree2D | RTree2D |
|
|
58
58
|
| ----------------------------- | ------------------- | --------------------- | ---------- | ------- |
|
|
59
|
-
| 500 neighbors | 8,
|
|
60
|
-
| 100 neighbors |
|
|
61
|
-
| 10 neighbors |
|
|
62
|
-
| 1 neighbor |
|
|
59
|
+
| 500 neighbors | 8,393 | 16,831 | 12,443 | 69,035 |
|
|
60
|
+
| 100 neighbors | 79,169 | 76,070 | 73,196 | 175,174 |
|
|
61
|
+
| 10 neighbors | 375,437 | 347,050 | 210,299 | 283,034 |
|
|
62
|
+
| 1 neighbor | 548,229 | 537,303 | 236,159 | 296,044 |
|
|
63
63
|
|
|
64
64
|
#### **100,000 entries**
|
|
65
65
|
|
|
@@ -67,34 +67,34 @@ This document contains performance benchmarks for the 2D spatial tree implementa
|
|
|
67
67
|
|
|
68
68
|
| Construction | KDTree2D (Balanced) | KDTree2D (Unbalanced) | QuadTree2D | RTree2D |
|
|
69
69
|
| --------------- | ------------------- | --------------------- | ----------- | ----------- |
|
|
70
|
-
| 100,000 entries |
|
|
70
|
+
| 100,000 entries | 30 (0.033s) | 83 (0.012s) | 50 (0.020s) | 52 (0.019s) |
|
|
71
71
|
|
|
72
72
|
##### Elements In Range
|
|
73
73
|
|
|
74
74
|
| Elements In Range | KDTree2D (Balanced) | KDTree2D (Unbalanced) | QuadTree2D | RTree2D |
|
|
75
75
|
| --------------------------- | ------------------- | --------------------- | ---------- | ------- |
|
|
76
|
-
| Full (~span/2) (r=199.5) |
|
|
77
|
-
| Half (~span/4) (r=99.75) | 1,
|
|
78
|
-
| Quarter (~span/8) (r=49.88) | 4,
|
|
79
|
-
| Tiny (~span/1000) (r=1) | 123,
|
|
76
|
+
| Full (~span/2) (r=199.5) | 601 | 601 | 601 | 75 |
|
|
77
|
+
| Half (~span/4) (r=99.75) | 1,355 | 1,360 | 1,247 | 186 |
|
|
78
|
+
| Quarter (~span/8) (r=49.88) | 4,647 | 5,176 | 4,308 | 724 |
|
|
79
|
+
| Tiny (~span/1000) (r=1) | 123,882 | 127,973 | 178,801 | 146,439 |
|
|
80
80
|
|
|
81
81
|
##### Get Elements In Bounds
|
|
82
82
|
|
|
83
83
|
| Get Elements In Bounds | KDTree2D (Balanced) | KDTree2D (Unbalanced) | QuadTree2D | RTree2D |
|
|
84
84
|
| -------------------------- | ------------------- | --------------------- | ---------- | ------- |
|
|
85
|
-
| Full (size=399.0x249.0) | 4,
|
|
86
|
-
| Half (size=199.5x124.5) | 9,
|
|
87
|
-
| Quarter (size=99.75x62.25) |
|
|
88
|
-
| Unit (size=1) | 183,
|
|
85
|
+
| Full (size=399.0x249.0) | 4,564 | 4,426 | 4,528 | 236 |
|
|
86
|
+
| Half (size=199.5x124.5) | 9,936 | 11,933 | 7,900 | 968 |
|
|
87
|
+
| Quarter (size=99.75x62.25) | 25,355 | 34,261 | 19,666 | 3,807 |
|
|
88
|
+
| Unit (size=1) | 183,758 | 185,397 | 243,205 | 154,754 |
|
|
89
89
|
|
|
90
90
|
##### Approximate Nearest Neighbors
|
|
91
91
|
|
|
92
92
|
| Approximate Nearest Neighbors | KDTree2D (Balanced) | KDTree2D (Unbalanced) | QuadTree2D | RTree2D |
|
|
93
93
|
| ----------------------------- | ------------------- | --------------------- | ---------- | ------- |
|
|
94
|
-
| 500 neighbors | 9,
|
|
95
|
-
| 100 neighbors | 49,
|
|
96
|
-
| 10 neighbors |
|
|
97
|
-
| 1 neighbor |
|
|
94
|
+
| 500 neighbors | 9,954 | 9,765 | 11,488 | 68,918 |
|
|
95
|
+
| 100 neighbors | 49,784 | 92,586 | 54,095 | 228,430 |
|
|
96
|
+
| 10 neighbors | 495,765 | 392,500 | 232,811 | 330,114 |
|
|
97
|
+
| 1 neighbor | 474,000 | 548,240 | 276,662 | 373,417 |
|
|
98
98
|
|
|
99
99
|
#### **10,000 entries**
|
|
100
100
|
|
|
@@ -102,34 +102,34 @@ This document contains performance benchmarks for the 2D spatial tree implementa
|
|
|
102
102
|
|
|
103
103
|
| Construction | KDTree2D (Balanced) | KDTree2D (Unbalanced) | QuadTree2D | RTree2D |
|
|
104
104
|
| -------------- | ------------------- | --------------------- | ------------ | ------------ |
|
|
105
|
-
| 10,000 entries |
|
|
105
|
+
| 10,000 entries | 547 (0.002s) | 834 (0.001s) | 400 (0.002s) | 495 (0.002s) |
|
|
106
106
|
|
|
107
107
|
##### Elements In Range
|
|
108
108
|
|
|
109
109
|
| Elements In Range | KDTree2D (Balanced) | KDTree2D (Unbalanced) | QuadTree2D | RTree2D |
|
|
110
110
|
| --------------------------- | ------------------- | --------------------- | ---------- | ------- |
|
|
111
|
-
| Full (~span/2) (r=49.50) | 5,
|
|
112
|
-
| Half (~span/4) (r=24.75) | 22,
|
|
113
|
-
| Quarter (~span/8) (r=12.38) | 44,
|
|
114
|
-
| Tiny (~span/1000) (r=1) | 167,
|
|
111
|
+
| Full (~span/2) (r=49.50) | 5,936 | 5,940 | 5,937 | 728 |
|
|
112
|
+
| Half (~span/4) (r=24.75) | 22,308 | 22,212 | 13,883 | 2,898 |
|
|
113
|
+
| Quarter (~span/8) (r=12.38) | 44,216 | 51,466 | 38,049 | 12,112 |
|
|
114
|
+
| Tiny (~span/1000) (r=1) | 167,797 | 162,536 | 225,225 | 167,319 |
|
|
115
115
|
|
|
116
116
|
##### Get Elements In Bounds
|
|
117
117
|
|
|
118
118
|
| Get Elements In Bounds | KDTree2D (Balanced) | KDTree2D (Unbalanced) | QuadTree2D | RTree2D |
|
|
119
119
|
| -------------------------- | ------------------- | --------------------- | ---------- | ------- |
|
|
120
|
-
| Full (size=99.00x99.00) |
|
|
121
|
-
| Half (size=49.50x49.50) |
|
|
122
|
-
| Quarter (size=24.75x24.75) | 75,
|
|
123
|
-
| Unit (size=1) | 240,
|
|
120
|
+
| Full (size=99.00x99.00) | 43,812 | 45,320 | 45,943 | 2,393 |
|
|
121
|
+
| Half (size=49.50x49.50) | 165,611 | 167,277 | 37,147 | 9,201 |
|
|
122
|
+
| Quarter (size=24.75x24.75) | 75,380 | 103,887 | 74,913 | 35,161 |
|
|
123
|
+
| Unit (size=1) | 240,461 | 232,011 | 316,878 | 179,116 |
|
|
124
124
|
|
|
125
125
|
##### Approximate Nearest Neighbors
|
|
126
126
|
|
|
127
127
|
| Approximate Nearest Neighbors | KDTree2D (Balanced) | KDTree2D (Unbalanced) | QuadTree2D | RTree2D |
|
|
128
128
|
| ----------------------------- | ------------------- | --------------------- | ---------- | ------- |
|
|
129
|
-
| 500 neighbors | 13,
|
|
130
|
-
| 100 neighbors |
|
|
131
|
-
| 10 neighbors |
|
|
132
|
-
| 1 neighbor |
|
|
129
|
+
| 500 neighbors | 13,093 | 13,040 | 14,300 | 64,499 |
|
|
130
|
+
| 100 neighbors | 61,778 | 56,766 | 92,858 | 234,910 |
|
|
131
|
+
| 10 neighbors | 384,629 | 375,996 | 277,725 | 418,141 |
|
|
132
|
+
| 1 neighbor | 570,984 | 631,087 | 315,877 | 458,622 |
|
|
133
133
|
|
|
134
134
|
#### **1,000 entries**
|
|
135
135
|
|
|
@@ -137,34 +137,34 @@ This document contains performance benchmarks for the 2D spatial tree implementa
|
|
|
137
137
|
|
|
138
138
|
| Construction | KDTree2D (Balanced) | KDTree2D (Unbalanced) | QuadTree2D | RTree2D |
|
|
139
139
|
| ------------- | ------------------- | --------------------- | -------------- | -------------- |
|
|
140
|
-
| 1,000 entries |
|
|
140
|
+
| 1,000 entries | 5,068 (0.000s) | 8,012 (0.000s) | 4,892 (0.000s) | 4,601 (0.000s) |
|
|
141
141
|
|
|
142
142
|
##### Elements In Range
|
|
143
143
|
|
|
144
144
|
| Elements In Range | KDTree2D (Balanced) | KDTree2D (Unbalanced) | QuadTree2D | RTree2D |
|
|
145
145
|
| -------------------------- | ------------------- | --------------------- | ---------- | ------- |
|
|
146
|
-
| Full (~span/2) (r=24.50) |
|
|
147
|
-
| Half (~span/4) (r=12.25) |
|
|
148
|
-
| Quarter (~span/8) (r=6.13) |
|
|
149
|
-
| Tiny (~span/1000) (r=1) |
|
|
146
|
+
| Full (~span/2) (r=24.50) | 57,446 | 57,835 | 57,233 | 7,336 |
|
|
147
|
+
| Half (~span/4) (r=12.25) | 59,633 | 76,664 | 56,713 | 14,575 |
|
|
148
|
+
| Quarter (~span/8) (r=6.13) | 94,257 | 108,779 | 94,736 | 37,945 |
|
|
149
|
+
| Tiny (~span/1000) (r=1) | 234,339 | 237,770 | 336,003 | 248,171 |
|
|
150
150
|
|
|
151
151
|
##### Get Elements In Bounds
|
|
152
152
|
|
|
153
153
|
| Get Elements In Bounds | KDTree2D (Balanced) | KDTree2D (Unbalanced) | QuadTree2D | RTree2D |
|
|
154
154
|
| ------------------------- | ------------------- | --------------------- | ---------- | ------- |
|
|
155
|
-
| Full (size=49.00x19.00) |
|
|
156
|
-
| Half (size=24.50x9.5) |
|
|
157
|
-
| Quarter (size=12.25x4.75) |
|
|
158
|
-
| Unit (size=1) | 339,
|
|
155
|
+
| Full (size=49.00x19.00) | 470,407 | 412,267 | 538,202 | 24,028 |
|
|
156
|
+
| Half (size=24.50x9.5) | 165,816 | 290,631 | 126,258 | 74,325 |
|
|
157
|
+
| Quarter (size=12.25x4.75) | 268,875 | 284,067 | 192,865 | 167,079 |
|
|
158
|
+
| Unit (size=1) | 339,691 | 328,876 | 456,878 | 277,918 |
|
|
159
159
|
|
|
160
160
|
##### Approximate Nearest Neighbors
|
|
161
161
|
|
|
162
162
|
| Approximate Nearest Neighbors | KDTree2D (Balanced) | KDTree2D (Unbalanced) | QuadTree2D | RTree2D |
|
|
163
163
|
| ----------------------------- | ------------------- | --------------------- | ---------- | ------- |
|
|
164
|
-
| 500 neighbors |
|
|
165
|
-
| 100 neighbors |
|
|
166
|
-
| 10 neighbors |
|
|
167
|
-
| 1 neighbor |
|
|
164
|
+
| 500 neighbors | 45,750 | 42,976 | 39,035 | 69,433 |
|
|
165
|
+
| 100 neighbors | 81,044 | 75,353 | 88,211 | 270,879 |
|
|
166
|
+
| 10 neighbors | 519,642 | 601,494 | 355,438 | 532,110 |
|
|
167
|
+
| 1 neighbor | 703,159 | 575,482 | 385,585 | 546,455 |
|
|
168
168
|
|
|
169
169
|
#### **100 entries**
|
|
170
170
|
|
|
@@ -172,33 +172,33 @@ This document contains performance benchmarks for the 2D spatial tree implementa
|
|
|
172
172
|
|
|
173
173
|
| Construction | KDTree2D (Balanced) | KDTree2D (Unbalanced) | QuadTree2D | RTree2D |
|
|
174
174
|
| ------------ | ------------------- | --------------------- | --------------- | --------------- |
|
|
175
|
-
| 100 entries |
|
|
175
|
+
| 100 entries | 43,103 (0.000s) | 37,453 (0.000s) | 27,322 (0.000s) | 23,640 (0.000s) |
|
|
176
176
|
|
|
177
177
|
##### Elements In Range
|
|
178
178
|
|
|
179
179
|
| Elements In Range | KDTree2D (Balanced) | KDTree2D (Unbalanced) | QuadTree2D | RTree2D |
|
|
180
180
|
| -------------------------- | ------------------- | --------------------- | ---------- | ------- |
|
|
181
|
-
| Full (~span/2) (r=4.5) |
|
|
182
|
-
| Half (~span/4) (r=2.25) |
|
|
183
|
-
| Quarter (~span/8) (r=1.13) |
|
|
184
|
-
| Tiny (~span/1000) (r=1) |
|
|
181
|
+
| Full (~span/2) (r=4.5) | 505,251 | 506,757 | 504,329 | 71,963 |
|
|
182
|
+
| Half (~span/4) (r=2.25) | 430,851 | 430,658 | 256,517 | 235,075 |
|
|
183
|
+
| Quarter (~span/8) (r=1.13) | 430,724 | 430,736 | 601,355 | 338,153 |
|
|
184
|
+
| Tiny (~span/1000) (r=1) | 430,754 | 430,284 | 598,471 | 340,692 |
|
|
185
185
|
|
|
186
186
|
##### Get Elements In Bounds
|
|
187
187
|
|
|
188
188
|
| Get Elements In Bounds | KDTree2D (Balanced) | KDTree2D (Unbalanced) | QuadTree2D | RTree2D |
|
|
189
189
|
| ------------------------ | ------------------- | --------------------- | ---------- | ------- |
|
|
190
|
-
| Full (size=9x9) | 2,
|
|
191
|
-
| Half (size=4.5x4.5) |
|
|
192
|
-
| Quarter (size=2.25x2.25) |
|
|
193
|
-
| Unit (size=1) |
|
|
190
|
+
| Full (size=9x9) | 2,448,546 | 2,259,205 | 2,137,171 | 223,802 |
|
|
191
|
+
| Half (size=4.5x4.5) | 567,838 | 557,169 | 365,308 | 370,472 |
|
|
192
|
+
| Quarter (size=2.25x2.25) | 583,946 | 592,479 | 788,572 | 393,465 |
|
|
193
|
+
| Unit (size=1) | 556,276 | 593,260 | 788,937 | 392,330 |
|
|
194
194
|
|
|
195
195
|
##### Approximate Nearest Neighbors
|
|
196
196
|
|
|
197
197
|
| Approximate Nearest Neighbors | KDTree2D (Balanced) | KDTree2D (Unbalanced) | QuadTree2D | RTree2D |
|
|
198
198
|
| ----------------------------- | ------------------- | --------------------- | ---------- | ------- |
|
|
199
|
-
| 100 neighbors (max) |
|
|
200
|
-
| 10 neighbors |
|
|
201
|
-
| 1 neighbor |
|
|
199
|
+
| 100 neighbors (max) | 158,290 | 155,464 | 200,721 | 301,513 |
|
|
200
|
+
| 10 neighbors | 605,208 | 436,057 | 535,377 | 756,820 |
|
|
201
|
+
| 1 neighbor | 573,182 | 536,531 | 597,137 | 799,246 |
|
|
202
202
|
|
|
203
203
|
<!-- tabs:end -->
|
|
204
204
|
<!-- SPATIAL_TREE_BENCHMARKS_END -->
|
|
@@ -33,34 +33,34 @@ This document contains performance benchmarks for the 3D spatial tree implementa
|
|
|
33
33
|
|
|
34
34
|
| Construction | KDTree3D (Balanced) | KDTree3D (Unbalanced) | OctTree3D | RTree3D |
|
|
35
35
|
| ----------------- | ------------------- | --------------------- | ---------- | ---------- |
|
|
36
|
-
| 1,000,000 entries | 2 (0.
|
|
36
|
+
| 1,000,000 entries | 2 (0.386s) | 3 (0.311s) | 3 (0.314s) | 2 (0.387s) |
|
|
37
37
|
|
|
38
38
|
##### Elements In Range
|
|
39
39
|
|
|
40
40
|
| Elements In Range | KDTree3D (Balanced) | KDTree3D (Unbalanced) | OctTree3D | RTree3D |
|
|
41
41
|
| --------------------------- | ------------------- | --------------------- | --------- | ------- |
|
|
42
|
-
| Full (~span/2) (r=49.50) | 17 | 20 |
|
|
43
|
-
| Half (~span/4) (r=24.75) |
|
|
44
|
-
| Quarter (~span/8) (r=12.38) |
|
|
45
|
-
| Tiny (~span/1000) (r=1) | 23,
|
|
42
|
+
| Full (~span/2) (r=49.50) | 17 | 20 | 34 | 17 |
|
|
43
|
+
| Half (~span/4) (r=24.75) | 134 | 157 | 256 | 150 |
|
|
44
|
+
| Quarter (~span/8) (r=12.38) | 925 | 1,215 | 1,661 | 1,427 |
|
|
45
|
+
| Tiny (~span/1000) (r=1) | 23,280 | 23,446 | 137,215 | 74,463 |
|
|
46
46
|
|
|
47
47
|
##### Get Elements In Bounds
|
|
48
48
|
|
|
49
49
|
| Get Elements In Bounds | KDTree3D (Balanced) | KDTree3D (Unbalanced) | OctTree3D | RTree3D |
|
|
50
50
|
| -------------------------------- | ------------------- | --------------------- | --------- | ------- |
|
|
51
|
-
| Full (size≈99.00x99.00x99.00) |
|
|
52
|
-
| Half (size≈49.50x49.50x49.50) |
|
|
53
|
-
| Quarter (size≈24.75x24.75x24.75) | 41 | 48 |
|
|
54
|
-
| Unit (size=1) | 41 |
|
|
51
|
+
| Full (size≈99.00x99.00x99.00) | 34 | 41 | 227 | 24 |
|
|
52
|
+
| Half (size≈49.50x49.50x49.50) | 41 | 47 | 1,259 | 279 |
|
|
53
|
+
| Quarter (size≈24.75x24.75x24.75) | 41 | 48 | 3,996 | 2,504 |
|
|
54
|
+
| Unit (size=1) | 41 | 46 | 181,169 | 73,748 |
|
|
55
55
|
|
|
56
56
|
##### Approximate Nearest Neighbors
|
|
57
57
|
|
|
58
58
|
| Approximate Nearest Neighbors | KDTree3D (Balanced) | KDTree3D (Unbalanced) | OctTree3D | RTree3D |
|
|
59
59
|
| ----------------------------- | ------------------- | --------------------- | --------- | ------- |
|
|
60
|
-
| 500 neighbors | 5,
|
|
61
|
-
| 100 neighbors | 62,
|
|
62
|
-
| 10 neighbors |
|
|
63
|
-
| 1 neighbor |
|
|
60
|
+
| 500 neighbors | 5,889 | 10,198 | 2,309 | 303 |
|
|
61
|
+
| 100 neighbors | 62,035 | 74,060 | 11,015 | 3,398 |
|
|
62
|
+
| 10 neighbors | 386,107 | 383,898 | 16,257 | 7,968 |
|
|
63
|
+
| 1 neighbor | 541,268 | 511,878 | 20,078 | 8,672 |
|
|
64
64
|
|
|
65
65
|
#### **100,000 entries**
|
|
66
66
|
|
|
@@ -68,34 +68,34 @@ This document contains performance benchmarks for the 3D spatial tree implementa
|
|
|
68
68
|
|
|
69
69
|
| Construction | KDTree3D (Balanced) | KDTree3D (Unbalanced) | OctTree3D | RTree3D |
|
|
70
70
|
| --------------- | ------------------- | --------------------- | ----------- | ----------- |
|
|
71
|
-
| 100,000 entries | 34 (0.029s) |
|
|
71
|
+
| 100,000 entries | 34 (0.029s) | 47 (0.021s) | 42 (0.024s) | 43 (0.023s) |
|
|
72
72
|
|
|
73
73
|
##### Elements In Range
|
|
74
74
|
|
|
75
75
|
| Elements In Range | KDTree3D (Balanced) | KDTree3D (Unbalanced) | OctTree3D | RTree3D |
|
|
76
76
|
| --------------------------- | ------------------- | --------------------- | --------- | ------- |
|
|
77
|
-
| Full (~span/2) (r=49.50) |
|
|
78
|
-
| Half (~span/4) (r=24.75) | 1,
|
|
79
|
-
| Quarter (~span/8) (r=12.38) | 2,
|
|
80
|
-
| Tiny (~span/1000) (r=1) | 26,
|
|
77
|
+
| Full (~span/2) (r=49.50) | 337 | 486 | 769 | 200 |
|
|
78
|
+
| Half (~span/4) (r=24.75) | 1,015 | 1,448 | 2,018 | 815 |
|
|
79
|
+
| Quarter (~span/8) (r=12.38) | 2,567 | 4,000 | 5,907 | 3,314 |
|
|
80
|
+
| Tiny (~span/1000) (r=1) | 26,783 | 29,830 | 176,298 | 100,804 |
|
|
81
81
|
|
|
82
82
|
##### Get Elements In Bounds
|
|
83
83
|
|
|
84
84
|
| Get Elements In Bounds | KDTree3D (Balanced) | KDTree3D (Unbalanced) | OctTree3D | RTree3D |
|
|
85
85
|
| ------------------------------- | ------------------- | --------------------- | --------- | ------- |
|
|
86
|
-
| Full (size≈99.00x99.00x9) |
|
|
87
|
-
| Half (size≈49.50x49.50x4.5) |
|
|
88
|
-
| Quarter (size≈24.75x24.75x2.25) |
|
|
89
|
-
| Unit (size=1) |
|
|
86
|
+
| Full (size≈99.00x99.00x9) | 637 | 772 | 2,696 | 339 |
|
|
87
|
+
| Half (size≈49.50x49.50x4.5) | 731 | 899 | 10,007 | 3,497 |
|
|
88
|
+
| Quarter (size≈24.75x24.75x2.25) | 745 | 924 | 47,730 | 24,350 |
|
|
89
|
+
| Unit (size=1) | 750 | 934 | 246,402 | 103,577 |
|
|
90
90
|
|
|
91
91
|
##### Approximate Nearest Neighbors
|
|
92
92
|
|
|
93
93
|
| Approximate Nearest Neighbors | KDTree3D (Balanced) | KDTree3D (Unbalanced) | OctTree3D | RTree3D |
|
|
94
94
|
| ----------------------------- | ------------------- | --------------------- | --------- | ------- |
|
|
95
|
-
| 500 neighbors | 6,
|
|
96
|
-
| 100 neighbors |
|
|
97
|
-
| 10 neighbors |
|
|
98
|
-
| 1 neighbor |
|
|
95
|
+
| 500 neighbors | 6,701 | 12,076 | 1,626 | 272 |
|
|
96
|
+
| 100 neighbors | 38,478 | 43,819 | 9,281 | 2,287 |
|
|
97
|
+
| 10 neighbors | 457,528 | 324,448 | 19,296 | 7,848 |
|
|
98
|
+
| 1 neighbor | 428,011 | 322,856 | 30,123 | 12,433 |
|
|
99
99
|
|
|
100
100
|
#### **10,000 entries**
|
|
101
101
|
|
|
@@ -103,34 +103,34 @@ This document contains performance benchmarks for the 3D spatial tree implementa
|
|
|
103
103
|
|
|
104
104
|
| Construction | KDTree3D (Balanced) | KDTree3D (Unbalanced) | OctTree3D | RTree3D |
|
|
105
105
|
| -------------- | ------------------- | --------------------- | ------------ | ------------ |
|
|
106
|
-
| 10,000 entries |
|
|
106
|
+
| 10,000 entries | 440 (0.002s) | 467 (0.002s) | 602 (0.002s) | 425 (0.002s) |
|
|
107
107
|
|
|
108
108
|
##### Elements In Range
|
|
109
109
|
|
|
110
110
|
| Elements In Range | KDTree3D (Balanced) | KDTree3D (Unbalanced) | OctTree3D | RTree3D |
|
|
111
111
|
| --------------------------- | ------------------- | --------------------- | --------- | ------- |
|
|
112
|
-
| Full (~span/2) (r=49.50) | 4,
|
|
113
|
-
| Half (~span/4) (r=24.75) | 5,
|
|
114
|
-
| Quarter (~span/8) (r=12.38) | 5,
|
|
115
|
-
| Tiny (~span/1000) (r=1) | 41,
|
|
112
|
+
| Full (~span/2) (r=49.50) | 4,788 | 4,609 | 8,939 | 2,061 |
|
|
113
|
+
| Half (~span/4) (r=24.75) | 5,959 | 6,429 | 8,899 | 4,006 |
|
|
114
|
+
| Quarter (~span/8) (r=12.38) | 5,929 | 6,874 | 11,071 | 7,017 |
|
|
115
|
+
| Tiny (~span/1000) (r=1) | 41,423 | 38,778 | 217,367 | 157,581 |
|
|
116
116
|
|
|
117
117
|
##### Get Elements In Bounds
|
|
118
118
|
|
|
119
119
|
| Get Elements In Bounds | KDTree3D (Balanced) | KDTree3D (Unbalanced) | OctTree3D | RTree3D |
|
|
120
120
|
| ------------------------------ | ------------------- | --------------------- | --------- | ------- |
|
|
121
|
-
| Full (size≈99.00x9x9) | 6,
|
|
122
|
-
| Half (size≈49.50x4.5x4.5) | 7,
|
|
123
|
-
| Quarter (size≈24.75x2.25x2.25) | 7,
|
|
124
|
-
| Unit (size=1) | 7,
|
|
121
|
+
| Full (size≈99.00x9x9) | 6,446 | 6,428 | 26,035 | 3,555 |
|
|
122
|
+
| Half (size≈49.50x4.5x4.5) | 7,296 | 7,344 | 45,721 | 37,319 |
|
|
123
|
+
| Quarter (size≈24.75x2.25x2.25) | 7,459 | 7,495 | 165,622 | 121,514 |
|
|
124
|
+
| Unit (size=1) | 7,506 | 7,548 | 317,874 | 163,916 |
|
|
125
125
|
|
|
126
126
|
##### Approximate Nearest Neighbors
|
|
127
127
|
|
|
128
128
|
| Approximate Nearest Neighbors | KDTree3D (Balanced) | KDTree3D (Unbalanced) | OctTree3D | RTree3D |
|
|
129
129
|
| ----------------------------- | ------------------- | --------------------- | --------- | ------- |
|
|
130
|
-
| 500 neighbors | 9,
|
|
131
|
-
| 100 neighbors |
|
|
132
|
-
| 10 neighbors |
|
|
133
|
-
| 1 neighbor |
|
|
130
|
+
| 500 neighbors | 9,716 | 10,667 | 638 | 184 |
|
|
131
|
+
| 100 neighbors | 50,838 | 68,861 | 5,947 | 2,267 |
|
|
132
|
+
| 10 neighbors | 452,030 | 403,786 | 27,125 | 13,409 |
|
|
133
|
+
| 1 neighbor | 625,292 | 623,208 | 43,364 | 22,623 |
|
|
134
134
|
|
|
135
135
|
#### **1,000 entries**
|
|
136
136
|
|
|
@@ -138,34 +138,34 @@ This document contains performance benchmarks for the 3D spatial tree implementa
|
|
|
138
138
|
|
|
139
139
|
| Construction | KDTree3D (Balanced) | KDTree3D (Unbalanced) | OctTree3D | RTree3D |
|
|
140
140
|
| ------------- | ------------------- | --------------------- | -------------- | -------------- |
|
|
141
|
-
| 1,000 entries | 3,
|
|
141
|
+
| 1,000 entries | 3,951 (0.000s) | 5,170 (0.000s) | 3,157 (0.000s) | 4,184 (0.000s) |
|
|
142
142
|
|
|
143
143
|
##### Elements In Range
|
|
144
144
|
|
|
145
145
|
| Elements In Range | KDTree3D (Balanced) | KDTree3D (Unbalanced) | OctTree3D | RTree3D |
|
|
146
146
|
| -------------------------- | ------------------- | --------------------- | --------- | ------- |
|
|
147
|
-
| Full (~span/2) (r=4.5) |
|
|
148
|
-
| Half (~span/4) (r=2.25) |
|
|
149
|
-
| Quarter (~span/8) (r=1.13) |
|
|
150
|
-
| Tiny (~span/1000) (r=1) |
|
|
147
|
+
| Full (~span/2) (r=4.5) | 12,041 | 14,157 | 24,772 | 21,692 |
|
|
148
|
+
| Half (~span/4) (r=2.25) | 52,426 | 62,638 | 123,516 | 146,308 |
|
|
149
|
+
| Quarter (~span/8) (r=1.13) | 62,349 | 64,703 | 323,699 | 226,590 |
|
|
150
|
+
| Tiny (~span/1000) (r=1) | 62,088 | 64,685 | 338,837 | 226,613 |
|
|
151
151
|
|
|
152
152
|
##### Get Elements In Bounds
|
|
153
153
|
|
|
154
154
|
| Get Elements In Bounds | KDTree3D (Balanced) | KDTree3D (Unbalanced) | OctTree3D | RTree3D |
|
|
155
155
|
| ----------------------------- | ------------------- | --------------------- | --------- | ------- |
|
|
156
|
-
| Full (size≈9x9x9) | 58,
|
|
157
|
-
| Half (size≈4.5x4.5x4.5) | 64,
|
|
158
|
-
| Quarter (size≈2.25x2.25x2.25) | 65,
|
|
159
|
-
| Unit (size=1) |
|
|
156
|
+
| Full (size≈9x9x9) | 58,987 | 64,476 | 322,955 | 36,020 |
|
|
157
|
+
| Half (size≈4.5x4.5x4.5) | 64,592 | 71,575 | 198,560 | 181,224 |
|
|
158
|
+
| Quarter (size≈2.25x2.25x2.25) | 65,299 | 73,113 | 500,481 | 239,455 |
|
|
159
|
+
| Unit (size=1) | 65,256 | 74,180 | 501,485 | 240,070 |
|
|
160
160
|
|
|
161
161
|
##### Approximate Nearest Neighbors
|
|
162
162
|
|
|
163
163
|
| Approximate Nearest Neighbors | KDTree3D (Balanced) | KDTree3D (Unbalanced) | OctTree3D | RTree3D |
|
|
164
164
|
| ----------------------------- | ------------------- | --------------------- | --------- | ------- |
|
|
165
|
-
| 500 neighbors | 15,
|
|
166
|
-
| 100 neighbors |
|
|
167
|
-
| 10 neighbors |
|
|
168
|
-
| 1 neighbor |
|
|
165
|
+
| 500 neighbors | 15,930 | 14,706 | 3,297 | 622 |
|
|
166
|
+
| 100 neighbors | 70,057 | 66,204 | 15,802 | 4,169 |
|
|
167
|
+
| 10 neighbors | 461,442 | 384,350 | 75,444 | 33,715 |
|
|
168
|
+
| 1 neighbor | 673,046 | 704,737 | 86,033 | 45,140 |
|
|
169
169
|
|
|
170
170
|
#### **100 entries**
|
|
171
171
|
|
|
@@ -173,33 +173,33 @@ This document contains performance benchmarks for the 3D spatial tree implementa
|
|
|
173
173
|
|
|
174
174
|
| Construction | KDTree3D (Balanced) | KDTree3D (Unbalanced) | OctTree3D | RTree3D |
|
|
175
175
|
| ------------ | ------------------- | --------------------- | --------------- | --------------- |
|
|
176
|
-
| 100 entries |
|
|
176
|
+
| 100 entries | 32,679 (0.000s) | 33,003 (0.000s) | 25,974 (0.000s) | 13,404 (0.000s) |
|
|
177
177
|
|
|
178
178
|
##### Elements In Range
|
|
179
179
|
|
|
180
180
|
| Elements In Range | KDTree3D (Balanced) | KDTree3D (Unbalanced) | OctTree3D | RTree3D |
|
|
181
181
|
| -------------------------- | ------------------- | --------------------- | --------- | ------- |
|
|
182
|
-
| Full (~span/2) (r=4.5) |
|
|
183
|
-
| Half (~span/4) (r=2.25) |
|
|
184
|
-
| Quarter (~span/8) (r=1.13) |
|
|
185
|
-
| Tiny (~span/1000) (r=1) |
|
|
182
|
+
| Full (~span/2) (r=4.5) | 125,671 | 127,643 | 291,486 | 184,062 |
|
|
183
|
+
| Half (~span/4) (r=2.25) | 146,268 | 149,611 | 314,058 | 296,509 |
|
|
184
|
+
| Quarter (~span/8) (r=1.13) | 146,574 | 151,138 | 376,930 | 419,883 |
|
|
185
|
+
| Tiny (~span/1000) (r=1) | 143,793 | 151,149 | 395,012 | 419,518 |
|
|
186
186
|
|
|
187
187
|
##### Get Elements In Bounds
|
|
188
188
|
|
|
189
189
|
| Get Elements In Bounds | KDTree3D (Balanced) | KDTree3D (Unbalanced) | OctTree3D | RTree3D |
|
|
190
190
|
| ----------------------- | ------------------- | --------------------- | --------- | ------- |
|
|
191
|
-
| Full (size≈9x4x1) |
|
|
192
|
-
| Half (size≈4.5x2x1) |
|
|
193
|
-
| Quarter (size≈2.25x1x1) |
|
|
194
|
-
| Unit (size=1) |
|
|
191
|
+
| Full (size≈9x4x1) | 539,503 | 540,192 | 1,850,861 | 335,224 |
|
|
192
|
+
| Half (size≈4.5x2x1) | 567,669 | 576,187 | 517,599 | 467,910 |
|
|
193
|
+
| Quarter (size≈2.25x1x1) | 580,752 | 579,288 | 772,525 | 747,066 |
|
|
194
|
+
| Unit (size=1) | 581,174 | 582,127 | 773,401 | 693,825 |
|
|
195
195
|
|
|
196
196
|
##### Approximate Nearest Neighbors
|
|
197
197
|
|
|
198
198
|
| Approximate Nearest Neighbors | KDTree3D (Balanced) | KDTree3D (Unbalanced) | OctTree3D | RTree3D |
|
|
199
199
|
| ----------------------------- | ------------------- | --------------------- | --------- | ------- |
|
|
200
|
-
| 100 neighbors (max) |
|
|
201
|
-
| 10 neighbors |
|
|
202
|
-
| 1 neighbor |
|
|
200
|
+
| 100 neighbors (max) | 92,209 | 88,369 | 69,873 | 66,050 |
|
|
201
|
+
| 10 neighbors | 626,406 | 497,039 | 105,917 | 102,085 |
|
|
202
|
+
| 1 neighbor | 886,386 | 681,324 | 170,819 | 226,654 |
|
|
203
203
|
|
|
204
204
|
<!-- tabs:end -->
|
|
205
205
|
<!-- SPATIAL_TREE_3D_BENCHMARKS_END -->
|
|
@@ -1530,7 +1530,7 @@ namespace WallstopStudios.UnityHelpers.Editor.Sprites
|
|
|
1530
1530
|
bool useSource
|
|
1531
1531
|
)
|
|
1532
1532
|
{
|
|
1533
|
-
|
|
1533
|
+
IList<AnimationFileInfo> arr = ApplyFilterAndSort(list.ToList()).AsList();
|
|
1534
1534
|
sb.AppendLine($"== {inputTitle} ({arr.Count}) ==");
|
|
1535
1535
|
for (int i = 0; i < arr.Count; i++)
|
|
1536
1536
|
{
|
|
@@ -598,8 +598,8 @@ namespace WallstopStudios.UnityHelpers.Editor.Sprites
|
|
|
598
598
|
// Prefer Assets-relative paths for UI components that expect them
|
|
599
599
|
if (!candidate.StartsWith("Assets", StringComparison.OrdinalIgnoreCase))
|
|
600
600
|
{
|
|
601
|
-
string assetsRoot = Application.dataPath.
|
|
602
|
-
string full = candidate.
|
|
601
|
+
string assetsRoot = Application.dataPath.SanitizePath();
|
|
602
|
+
string full = candidate.SanitizePath();
|
|
603
603
|
if (full.StartsWith(assetsRoot, StringComparison.OrdinalIgnoreCase))
|
|
604
604
|
{
|
|
605
605
|
candidate = "Assets" + full.Substring(assetsRoot.Length);
|
|
@@ -622,10 +622,10 @@ namespace WallstopStudios.UnityHelpers.Editor.Sprites
|
|
|
622
622
|
}
|
|
623
623
|
|
|
624
624
|
// Ensure Assets-relative if possible
|
|
625
|
-
string path = assetsRelativeDir.
|
|
625
|
+
string path = assetsRelativeDir.SanitizePath();
|
|
626
626
|
if (!path.StartsWith("Assets", StringComparison.OrdinalIgnoreCase))
|
|
627
627
|
{
|
|
628
|
-
string assetsRoot = Application.dataPath.
|
|
628
|
+
string assetsRoot = Application.dataPath.SanitizePath();
|
|
629
629
|
string full = path;
|
|
630
630
|
if (full.StartsWith(assetsRoot, StringComparison.OrdinalIgnoreCase))
|
|
631
631
|
{
|
|
@@ -7,6 +7,7 @@ namespace WallstopStudios.UnityHelpers.Editor.Sprites
|
|
|
7
7
|
using System.Text.RegularExpressions;
|
|
8
8
|
using UnityEditor;
|
|
9
9
|
using UnityEngine;
|
|
10
|
+
using WallstopStudios.UnityHelpers.Core.Helper;
|
|
10
11
|
|
|
11
12
|
/// <summary>
|
|
12
13
|
/// Public API to apply SpriteSettings profiles to assets. Mirrors the window logic
|
|
@@ -83,7 +84,7 @@ namespace WallstopStudios.UnityHelpers.Editor.Sprites
|
|
|
83
84
|
|
|
84
85
|
private static string SanitizePath(string p)
|
|
85
86
|
{
|
|
86
|
-
return string.IsNullOrEmpty(p) ? p : p.
|
|
87
|
+
return string.IsNullOrEmpty(p) ? p : p.SanitizePath();
|
|
87
88
|
}
|
|
88
89
|
|
|
89
90
|
public static SpriteSettings FindMatchingSettings(
|
|
@@ -10,6 +10,7 @@ namespace WallstopStudios.UnityHelpers.Editor.Sprites
|
|
|
10
10
|
using UnityEngine;
|
|
11
11
|
using UnityEngine.Serialization;
|
|
12
12
|
using WallstopStudios.UnityHelpers.Core.Extension;
|
|
13
|
+
using WallstopStudios.UnityHelpers.Core.Helper;
|
|
13
14
|
using WallstopStudios.UnityHelpers.Utils;
|
|
14
15
|
using Object = UnityEngine.Object;
|
|
15
16
|
|
|
@@ -299,7 +300,7 @@ namespace WallstopStudios.UnityHelpers.Editor.Sprites
|
|
|
299
300
|
{
|
|
300
301
|
string fileName = Path.GetFileName(assetPath);
|
|
301
302
|
finalAssetPath = Path.Combine(outputDirAssetPath, fileName)
|
|
302
|
-
.
|
|
303
|
+
.SanitizePath();
|
|
303
304
|
EnsureDirectory(finalAssetPath);
|
|
304
305
|
}
|
|
305
306
|
|
|
@@ -420,12 +421,12 @@ namespace WallstopStudios.UnityHelpers.Editor.Sprites
|
|
|
420
421
|
0,
|
|
421
422
|
Application.dataPath.Length - "Assets".Length
|
|
422
423
|
);
|
|
423
|
-
return Path.Combine(projectRoot, assetPath).
|
|
424
|
+
return Path.Combine(projectRoot, assetPath).SanitizePath();
|
|
424
425
|
}
|
|
425
426
|
|
|
426
427
|
private static void EnsureDirectory(string assetPath)
|
|
427
428
|
{
|
|
428
|
-
string dirAsset = Path.GetDirectoryName(assetPath)?.
|
|
429
|
+
string dirAsset = Path.GetDirectoryName(assetPath)?.SanitizePath();
|
|
429
430
|
if (string.IsNullOrEmpty(dirAsset))
|
|
430
431
|
{
|
|
431
432
|
return;
|