zoukankan      html  css  js  c++  java
  • ScrollVIEW 2000个ITEM不会卡

    using UnityEngine;
    using System.Collections.Generic;
    
    public class UIWrapGrid : MonoBehaviour
    {
    	Transform mTrans;
    	UIPanel mPanel;
    	UIScrollView mScroll;
        bool mHorizontal = false;
    	bool mFirstTime = true;
    	List<Transform> mChildren = new List<Transform>();
    
    	/// <summary>
    	/// Initialize everything and register a callback with the UIPanel to be notified when the clipping region moves.
    	/// </summary>
    
    	protected virtual void Start () {
            InitGrid();
    		mFirstTime = false;
    	}
    
        /// <summary>
        /// Cache the scroll view and return 'false' if the scroll view is not found.
        /// </summary>
        public void InitGrid() {
            mTrans = transform;
            mPanel = NGUITools.FindInParents<UIPanel>(gameObject);
            mScroll = mPanel.GetComponent<UIScrollView>();
    
            if (mScroll != null) {
                mScroll.GetComponent<UIPanel>().onClipMove = OnMove;
            }
    
            mChildren.Clear();
            for (int i = 0; i < mTrans.childCount; ++i)
                mChildren.Add(mTrans.GetChild(i));
    
            // Sort the list of children so that they are in order
            mChildren.Sort(UIGrid.SortByName);
    
            if (mScroll == null) return;
            if (mScroll.movement == UIScrollView.Movement.Horizontal) mHorizontal = true;
            else if (mScroll.movement == UIScrollView.Movement.Vertical) mHorizontal = false;
    
            WrapContent();
        }
    
    	/// <summary>
    	/// Callback triggered by the UIPanel when its clipping region moves (for example when it's being scrolled).
    	/// </summary>
    
    	protected virtual void OnMove (UIPanel panel) { WrapContent(); }
    
        void WrapContent() {
            Vector3[] corners = mPanel.worldCorners;
    
            for (int i = 0; i < 4; ++i) {
                Vector3 v = corners[i];
                v = mTrans.InverseTransformPoint(v);
                corners[i] = v;
            }
            Vector3 center = Vector3.Lerp(corners[0], corners[2], 0.5f);
    
            if (mHorizontal) {  //横向
                for (int i = 0, imax = mChildren.Count; i < imax; ++i) {
                    Transform t = mChildren[i];
                    float distance = t.localPosition.x - center.x;
                    float min = corners[0].x - 100;
                    float max = corners[2].x + 100;
    
                    distance += mPanel.clipOffset.x - mTrans.localPosition.x;
                    if (!UICamera.IsPressed(t.gameObject)) {
                        NGUITools.SetActive(t.gameObject, (distance > min && distance < max), false);
                    }
                }
            } else {            //竖向
                for (int i = 0, imax = mChildren.Count; i < imax; ++i) {
                    Transform t = mChildren[i];
                    float distance = t.localPosition.y - center.y;
                    float min = corners[0].y - 100;
                    float max = corners[2].y + 100;
    
                    distance += mPanel.clipOffset.y - mTrans.localPosition.y;
                    if (!UICamera.IsPressed(t.gameObject)) {
                        bool active = t.gameObject.activeSelf;
                        bool willactive = distance > min && distance < max;
                        if (active == willactive) continue;
                        NGUITools.SetActive(t.gameObject, willactive, false);
                    }
                }
            }
        }
    }
    

      

  • 相关阅读:
    ASP.NET 取得 Uri 各项属性值
    js获取当前时间显示在页面上
    脚步提示及跳转
    整体刷新和局部刷新frameset窗口
    asp.net 字符串过滤
    .net 获取当前网页的的url
    优酷去广告最新的关于如何屏蔽优酷广告的方法
    bat命令集合
    修复IE
    网易见外工作台(AI),语音转文字,快速制作字幕,中英翻译,在线修改字幕
  • 原文地址:https://www.cnblogs.com/hersen/p/3964942.html
Copyright © 2011-2022 走看看