Quantcast
Channel: C#タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9707

UnityのInspectorで配列長を追加するとなんか適当に詰め込まれるのをどうにかする

$
0
0
そこそこ腹が立ったので書きました。 Unityのバージョンは2019.4.13です。 Inspectorにて // なんの変哲もないGameObjectの配列 [SerializeField] private GameObject[] _gameObjects = default; こんな感じで宣言した配列に対してInspectorから長さを追加すると、最後のフィールドをそのまま複製して詰め込む暴挙に出ます。 対処 しょうがないのでInspectorの変更によってキックされるOnValidateで面倒を見てやります。1 OnValidate private void OnValidate() { // Inspectorに入力された長さを覚えておく var beforeLength = _gameObjects.Length; // nullと重複を除く _gameObjects = _gameObjects .Where(o => o != null) .Distinct() .ToArray(); // (入力された長さ) - (現在の長さ) // で足りない長さを調べる var length = beforeLength - _gameObjects.Length; if (length > 0) { // 不足がある場合は,足りない長さの空の配列を作ってConcatで追加 _gameObjects = _gameObjects .Concat(Enumerable.Repeat<GameObject>(null, length)) .ToArray(); } } まとめ いいからdefault2ブチこめ おしまい。 毎回ToArray()で確定しているのはIEnumerableな変数をわざわざ用意するのがめんどいのと、以前遅延評価絡みでなんかよくわかんない目にあったからです ↩ nullだとPrimitiveに対応できないので。しかし、この挙動って破壊と混乱を招くだけの気がするのですが、嬉しい人いるんでしょうか……? ↩

Viewing all articles
Browse latest Browse all 9707

Trending Articles