そこそこ腹が立ったので書きました。
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();
}
}
まとめ
いいからdefault
2ブチこめ
おしまい。