123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- using System;
- using James;
- using UnityEngine;
- using UnityEngine.EventSystems;
- /// <summary>
- /// 自动加载迷你预设
- /// </summary>
- [DisallowMultipleComponent]
- public class MiniPrefabTextLoader : UIBehaviour
- {
- [Tooltip("迷你预设类别"), SerializeField]
- private MiniPrefabType miniPrefabType;
- /// <summary>
- /// 预设实例
- /// </summary>
- protected GameObject p_prefab;
- /// <summary>
- /// 工作协程
- /// </summary>
- private Coroutine s_coroutine;
- /// <summary>
- /// 缓存的参数列表
- /// </summary>
- private object[] s_paramList;
- protected override void OnEnable()
- {
- base.OnEnable();
- //取消销毁程序
- if (s_coroutine != null)
- {
- JamesGame.Game.CancelCall(s_coroutine);
- }
- if (p_prefab == null)
- {
- // p_prefab = GetPrefab(miniPrefabType);
- // SetObjectData();
- GetPrefab(miniPrefabType, obj =>
- {
- p_prefab = obj;
- SetObjectData();
- });
- }
- }
- protected override void OnDisable()
- {
- base.OnDisable();
- s_coroutine = JamesGame.Game.DelayedCall(() =>
- {
- if (p_prefab != null)
- {
- DestroyPrefab(p_prefab);
- /*清除缓存数据*/
- p_prefab = null;
- }
- }, 0.01f);
- }
- /// <summary>
- /// 设置数据
- /// </summary>
- /// <param name="paramList">数据列表</param>
- public void SetData(params object[] paramList)
- {
- s_paramList = paramList;
- VoluationData(paramList);
- }
- /// <summary>
- /// 设置数据
- /// </summary>
- /// <param name="paramList">数据列表</param>
- protected virtual void VoluationData(object[] paramList) { }
- /// <summary>
- /// 设置实例的数据
- /// </summary>
- protected virtual void SetObjectData()
- {
- //Transform信息校准
- p_prefab.transform.SetParent(transform);
- p_prefab.transform.localPosition = Vector3.zero;
- p_prefab.transform.localRotation = Quaternion.identity;
- p_prefab.transform.localScale = Vector3.one;
- if (!p_prefab.activeSelf) p_prefab.SetActive(true);
- if (s_paramList != null)
- {
- //适用于先执行了SetData,再执行SetObjectData的情况
- VoluationData(s_paramList);
- }
- }
- /// <summary>
- /// 获取预设加载地址
- /// </summary>
- /// <param name="miniPrefabType">预设类别</param>
- /// <returns></returns>
- private static string GetPrefabLoadPath(MiniPrefabType miniPrefabType)
- {
- return string.Format("NEW_Prefabs/Mini/{0}.prefab", miniPrefabType);
- }
- /// <summary>
- /// 获取预设实例
- /// </summary>
- /// <param name="miniPrefabType">迷你预设类别</param>
- /// <param name="onLoaded"></param>
- /// <returns></returns>
- private static void GetPrefab(MiniPrefabType miniPrefabType, Action<GameObject> onLoaded)
- {
- ObjectPool.Instance.Pop(new ObjectPool.PoolLabel() { poolType = ObjectPool.PoolType.UI_permanent, key = miniPrefabType.ToString() }, GetPrefabLoadPath(miniPrefabType), onLoaded);
- }
- /// <summary>
- /// 销毁预设实例
- /// </summary>
- /// <param name="obj">预设实例</param>
- private static void DestroyPrefab(GameObject obj)
- {
- ObjectPool.Instance.Push(obj);
- }
- /// <summary>
- /// 迷你预设类别
- /// </summary>
- public enum MiniPrefabType
- {
- /// <summary>
- /// 倍数
- /// </summary>
- Multiple,
- /// <summary>
- /// 能力
- /// </summary>
- Power,
- /// <summary>
- /// 通用按钮
- /// </summary>
- Button,
- /// <summary>
- /// 金币buff
- /// </summary>
- GoldBuffer,
- }
- }
|