回答編集履歴

1

取得後のスプライト配列を並べ替えることについて追記

2018/09/17 19:53

投稿

Bongo
Bongo

スコア10807

test CHANGED
@@ -15,3 +15,99 @@
15
15
  とのことですので、大きいスプライトから順番に入っているのではないでしょうか。
16
16
 
17
17
  面積が同じならどうなのか...といったことも気になりますが、もうこの際リストの順番はあてにならないものとして、スプライト名をもとに[GetSprite](https://docs.unity3d.com/ScriptReference/U2D.SpriteAtlas.GetSprite.html)で取り出すのがいいかもしれません。
18
+
19
+
20
+
21
+ ### 追記
22
+
23
+ スプライト名の頭に連番を付けているのでしたら、[GetSprites](https://docs.unity3d.com/ja/current/ScriptReference/U2D.SpriteAtlas.GetSprites.html)で得たバラバラの配列をあらためて名前順に並べ替えることができそうです。
24
+
25
+
26
+
27
+ 下記のようなコードで実験してみたところ...
28
+
29
+ ```C#
30
+
31
+ using System.Linq;
32
+
33
+ using UnityEngine;
34
+
35
+ using UnityEngine.U2D;
36
+
37
+
38
+
39
+ public class GetSpritesTest : MonoBehaviour
40
+
41
+ {
42
+
43
+ public SpriteAtlas Atlas;
44
+
45
+ public Sprite[] Sprites;
46
+
47
+
48
+
49
+ private void Start()
50
+
51
+ {
52
+
53
+ if (this.Atlas == null)
54
+
55
+ {
56
+
57
+ return;
58
+
59
+ }
60
+
61
+
62
+
63
+ // GetSpritesによるスプライト取り出し
64
+
65
+ var spriteCount = this.Atlas.spriteCount;
66
+
67
+ var sprites = new Sprite[spriteCount];
68
+
69
+ this.Atlas.GetSprites(sprites);
70
+
71
+
72
+
73
+ // 取得したばかりの配列内のスプライト名を表示
74
+
75
+ Debug.Log("Obtained sprites:");
76
+
77
+ for (var i = 0; i < spriteCount; i++)
78
+
79
+ {
80
+
81
+ Debug.Log("\t" + sprites[i].name);
82
+
83
+ }
84
+
85
+
86
+
87
+ // スプライトを名前で昇順にソートし、結果をSpritesに入れる
88
+
89
+ this.Sprites = sprites.OrderBy(sprite => sprite.name).ToArray();
90
+
91
+
92
+
93
+ // ソート後の配列内のスプライト名を表示
94
+
95
+ Debug.Log("Sorted sprites:");
96
+
97
+ for (var i = 0; i < spriteCount; i++)
98
+
99
+ {
100
+
101
+ Debug.Log("\t" + this.Sprites[i].name);
102
+
103
+ }
104
+
105
+ }
106
+
107
+ }
108
+
109
+ ```
110
+
111
+ 下図のような結果になりました。
112
+
113
+ ![並べ替え結果](43b17eb6d733e25813597baacac703f5.png)