最新文章
Cocos2d-x游戏开发实例详解7:对象释放时机
03-25 13:59
Cocos2d-x游戏开发实例详解6:自动释放池
03-25 13:55
Cocos2d-x游戏开发实例详解5:神奇的自动释放
03-25 13:49
Cocos2d-x游戏开发实例详解4:游戏主循环
03-25 13:44
Cocos2d-x游戏开发实例详解3:无限滚动地图
03-25 13:37
Cocos2d-x游戏开发实例详解2:开始菜单续
03-25 13:32
unity3d uiwrapcontent
本文将为大家介绍 Unity3D 中 UIWrapContent 的相关内容,并提供源代码示例,供大家参考学习。UIWrapContent 是 NGUI 3.5.5 中加入的一个组件,它的主要作用是将不显示的 Scroll Item 设置为 disabled 状态,这样每帧需要更新的 Scroll Item 就会减少到当前显示的那几个,从而有效避免掉帧的情况。
不过,UIWrapContent 只能创建循环的 Scroll View。但我们只需进行简单的几处修改,就能让它在普通的 Scroll View 上使用。下面是详细的修改步骤:
1. 复制并重命名脚本
复制一份 UIWrapContent.cs 文件,将其重命名为 UIBetterGrid.cs,同时修改类名。
原代码(UIWrapContent.cs,第 19 - 20 行)
[AddComponentMenu("NGUI/Interaction/Wrap Content")]
public class UIWrapContent : MonoBehaviour
修改后的代码(UIBetterGrid.cs,第 19 - 20 行)
[AddComponentMenu("NGUI/Interaction/Better Grid")]
public class UIBetterGrid : MonoBehaviour
2. 修改初始化代码
对初始化代码进行修改,主要是调整 mScroll 的相关属性。
原代码(UIWrapContent.cs,第 52 - 54 行)
mScroll.restrictWithinPanel = false;
if (mScroll.dragEffect == UIScrollView.DragEffect.MomentumAndSpring)
mScroll.dragEffect = UIScrollView.DragEffect.Momentum;
修改后的代码(UIBetterGrid.cs,第 52 - 54 行)
mScroll.restrictWithinPanel = true;
//if (mScroll.dragEffect == UIScrollView.DragEffect.MomentumAndSpring)
// mScroll.dragEffect = UIScrollView.DragEffect.Momentum;
3. 注释创建首尾循环的代码
为了避免创建循环的 Scroll View,需要注释掉相关的创建首尾循环的代码。
水平方向(UIBetterGrid.cs,第 159 - 170 行)
//if (distance < -extents)
//{
// t.localPosition += new Vector3(extents * 2f, 0f, 0f);
// distance = t.localPosition.x - center.x;
// UpdateItem(t, i);
//}
//else if (distance > extents)
//{
// t.localPosition -= new Vector3(extents * 2f, 0f, 0f);
// distance = t.localPosition.x - center.x;
// UpdateItem(t, i);
//}
垂直方向(UIBetterGrid.cs,第 190 - 201 行)
//if (distance < -extents)
//{
// t.localPosition += new Vector3(0f, extents * 2f, 0f);
// distance = t.localPosition.y - center.y;
// UpdateItem(t, i);
//}
//else if (distance > extents)
//{
// t.localPosition -= new Vector3(0f, extents * 2f, 0f);
// distance = t.localPosition.y - center.y;
// UpdateItem(t, i);
//}
4. 修改 UIScrollView.cs 中的相关代码
对 UIScrollView.cs 中的 mBounds 计算代码进行修改。
原代码(UIWrapContent.cs,第 173 行)
mBounds = NGUIMath.CalculateRelativeWidgetBounds(mTrans, mTrans);
修改后的代码(UIBetterGrid.cs,第 173 行)
mBounds = NGUIMath.CalculateRelativeWidgetBounds(mTrans, mTrans, true);
通过以上步骤,我们就可以将原本只能创建循环 Scroll View 的 UIWrapContent 改造为适用于普通 Scroll View 的组件。