我们知道在OnValidate中创建游戏物体会发出警告,删除游戏物体会报错。
所以我们使用协程,将开始动作的信号放在OnValidate中,将动作的执行放在帧结尾。
参考代码如下:
using System.Collections;
using UnityEngine;
public class VerticalList : MonoBehaviour
{
#if UNITY_EDITOR
[SerializeField]
private int _childrenAmount = 0;
void OnValidate()
{
_childrenAmount = Mathf.Max(_childrenAmount, 0);
StartCoroutine(KeepChildrenAmount());
}
IEnumerator KeepChildrenAmount()
{
yield return new WaitForEndOfFrame();
for (int i = transform.childCount - 1; i >= _childrenAmount; --i)
DestroyImmediate(transform.GetChild(i).gameObject);
while (transform.childCount < _childrenAmount)
{
GameObject obj = new();
obj.transform.parent = transform;
}
}
#endif
}