我们知道在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
}

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部