Unity性能优化 对象延迟创建

///by邓陶然
using UnityEngine;


public class LaterCreator : MonoBehaviour
{
public delegate GameObject CreatorCallBack();
public CreatorCallBack _creatorCallBack;
public System.Object CallBackObj;


    /// <summary>
    /// 获取已创建成功的对象。
    /// </summary>
    public GameObject CreatedGameObject { get; private set; }
    
private bool allreadyCreator;
    private UIWidget uiw;
public UIPanel panel;
    public bool alwaysShow;

    private void Start ()
{
if(panel == null)
{
panel = GetComponentInParent<UIPanel>();
}
}
    /// <summary>
    /// 设置单元大小
    /// </summary>
    /// <param name="size"></param>
public void SetSize(Vector3 size)
{
uiw = gameObject.AddComponent<UIWidget>();
uiw.SetRect(0,0,size.x,size.y);
// Update();
}


private void OnEnable()
{
if(panel == null)
{
panel = GetComponentInParent<UIPanel>();
}
}


private void Update ()
{
if(IsInView())
{
if(allreadyCreator && CreatedGameObject != null)
{
CreatedGameObject.SetActive(true);
}
else
{
if(_creatorCallBack != null && !allreadyCreator)
{
                    CreatedGameObject = _creatorCallBack();
                    allreadyCreator = true; 
}
}
}
else
{
if(allreadyCreator && CreatedGameObject != null)
{
                if (alwaysShow)
   {
                    CreatedGameObject.SetActive(true);
   }
   else
   {
                    CreatedGameObject.SetActive(false);
   }

}
}
}

    public void Reflush()
{
Update();
}


    /// <summary>
    /// 强制创建或使对象可见
    /// </summary>
public void ForceOpen()
{
if(allreadyCreator && CreatedGameObject != null)
{
CreatedGameObject.SetActive(true);
}
else
{
if(_creatorCallBack != null && !allreadyCreator)
{
CreatedGameObject = _creatorCallBack();
allreadyCreator = true;
}
}
}
    /// <summary>
    /// 是否在视图中可见
    /// </summary>
    /// <returns></returns>
    private bool IsInView()
    {
        if (panel == null)
        {
            return false;
        }
        return panel.IsVisible(uiw);
    }
}


                
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值