12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- using CommonAIClient.Unity.Battle;
- using System.Collections.Generic;
- using UnityEngine;
- namespace CommonAIClient.Unity.Utils
- {
- /// <summary>
- /// 需要保证其他地方不会处理对象de删除操作
- /// </summary>
- public class EffectAutoDestroy : MonoBehaviour
- {
- public AssetObjectExt aoeHandler;
- public float duration;
- List<ParticleSystem> mParticles = new List<ParticleSystem>();
- List<Animation> mAnimations = new List<Animation>();
- List<Animator> mAnimators = new List<Animator>();
- bool mDestroyed;
- void Start()
- {
- if (Extensions.NearlyZero(duration))
- {
- duration = 3f;
- gameObject.GetComponentsInChildren<ParticleSystem>(mParticles);
- gameObject.GetComponentsInChildren<Animation>(mAnimations);
- gameObject.GetComponentsInChildren<Animator>(mAnimators);
- }
- }
- void Update()
- {
- if (!mDestroyed)
- {
- duration -= Time.deltaTime;
- if (duration <= 0)
- {
- DoDestroy();
- }
- TryDestroy();
- }
- }
- public void DoDestroy()
- {
- if (!mDestroyed && aoeHandler != null)
- {
- mDestroyed = true;
- DestroyImmediate(this);
- BattleFactroy.Instance.GameObjectAdapter.Unload(aoeHandler);
- }
- }
- void TryDestroy()
- {
- if (mParticles == null)
- {
- Debug.LogError("");
- }
- foreach (var elem in mParticles)
- {
- if (elem.isPlaying || elem.isPaused)
- return;
- }
- foreach (var elem in mAnimations)
- {
- if (elem.isPlaying)
- return;
- }
- foreach (var elem in mAnimators)
- {
- if (elem.GetAnimatorTransitionInfo(0).normalizedTime < 1f)
- return;
- }
- DoDestroy();
- }
- }
- }
|