11111
This commit is contained in:
@@ -0,0 +1,111 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Stary.Evo
|
||||
{
|
||||
|
||||
/// <summary>
|
||||
/// 用于注销的接口(为了防止注册后忘记注销特实现此接口)
|
||||
/// </summary>
|
||||
public interface IUnRegister
|
||||
{
|
||||
void UnRegister();
|
||||
}
|
||||
public interface IUnRegisterList
|
||||
{
|
||||
List<IUnRegister> UnregisterList { get; }
|
||||
}
|
||||
public static class IUnRegisterListExtension
|
||||
{
|
||||
public static void AddToUnregisterList(this IUnRegister self, IUnRegisterList unRegisterList)
|
||||
{
|
||||
unRegisterList.UnregisterList.Add(self);
|
||||
}
|
||||
|
||||
public static void UnRegisterAll(this IUnRegisterList self)
|
||||
{
|
||||
foreach (var unRegister in self.UnregisterList)
|
||||
{
|
||||
unRegister.UnRegister();
|
||||
}
|
||||
|
||||
self.UnregisterList.Clear();
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// 自定义可注销的类
|
||||
/// </summary>
|
||||
public struct CustomUnRegister : IUnRegister
|
||||
{
|
||||
/// <summary>
|
||||
/// 委托对象
|
||||
/// </summary>
|
||||
private Action mOnUnRegister { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 带参构造函数
|
||||
/// </summary>
|
||||
/// <param name="onDispose"></param>
|
||||
public CustomUnRegister(Action onUnRegsiter)
|
||||
{
|
||||
mOnUnRegister = onUnRegsiter;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 资源释放
|
||||
/// </summary>
|
||||
public void UnRegister()
|
||||
{
|
||||
mOnUnRegister.Invoke();
|
||||
mOnUnRegister = null;
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// 注销的触发器
|
||||
/// </summary>
|
||||
public class UnRegisterOnDestroyTrigger : MonoBehaviour
|
||||
{
|
||||
private HashSet<IUnRegister> mUnRegisters = new HashSet<IUnRegister>();
|
||||
|
||||
public void AddUnRegister(IUnRegister unRegister)
|
||||
{
|
||||
mUnRegisters.Add(unRegister);
|
||||
}
|
||||
public void RemoveUnRegister(IUnRegister unRegister)
|
||||
{
|
||||
mUnRegisters.Remove(unRegister);
|
||||
}
|
||||
|
||||
private void OnDestroy()
|
||||
{
|
||||
foreach (var unRegister in mUnRegisters)
|
||||
{
|
||||
unRegister.UnRegister();
|
||||
}
|
||||
|
||||
mUnRegisters.Clear();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 注销触发器的使用简化
|
||||
/// </summary>
|
||||
public static class UnRegisterExtension
|
||||
{
|
||||
public static IUnRegister UnRegisterWhenGameObjectDestroyed(this IUnRegister unRegister, GameObject gameObject)
|
||||
{
|
||||
var trigger = gameObject.GetComponent<UnRegisterOnDestroyTrigger>()??null;
|
||||
|
||||
if (!trigger)
|
||||
{
|
||||
trigger = gameObject.AddComponent<UnRegisterOnDestroyTrigger>();
|
||||
}
|
||||
|
||||
trigger.AddUnRegister(unRegister);
|
||||
|
||||
return unRegister;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user