using System.Collections.Generic; using System.Linq; using Lean.Pool; using Sirenix.OdinInspector; using UnityEngine; namespace SLSFramework.LeanPoolAssistance { public class PooledObject : MonoBehaviour, IPoolable { [Tooltip("是否在生成后定时自动回收")] public bool isAutoDespawn = true; [ShowIf("isAutoDespawn")][Tooltip("自动回收时间")] public float autoDespawnTime = 1; private List children; private bool spawnExecuted = false; public void OnSpawn() { if (spawnExecuted) { return; } spawnExecuted = true; children = GetComponentsInChildren().ToList(); children.Remove(this); children.ForEach(child => child.OnSpawn()); if (isAutoDespawn) { LeanPool.Despawn(gameObject, autoDespawnTime); } } public void OnDespawn() { spawnExecuted = false; children.ForEach(child => child.OnDespawn()); } } }