1 判定cell大小
LoopScrollRect要解决的核心问题是:如何计算每个元素的大小。这里我使用了Content Size Fitter配合Layout Element来控制每个cell的长宽,因此对于GridLayout直接取高度,否则取Preferred Height。需要注意的是,除了元素本身的大小之外,我们还要将padding考虑进去。
这个其实也是最核心的一个地方:在能够准确计算格子大小的基础上,后续工作就好实现了。
2 如何优雅的增删元素
对于每个ScrollRect,其实只需要考虑在头部和尾部是否需要增加或者删除元素。在这里以头部的各种情况为例进行解释,因为在正向滑动情况下,必须保证在修改元素之后整个ScrollRect内容显示一致不跳变;这些情况比尾部处理会麻烦一些。
NewItemAtStart函数实现了在头部增加一个(或一行,针对GridLayout)元素,并返回这些元素的高度;DeleteItemAtStart代表删除头部的一个元素。需要注意的是,在修改头部元素之后要及时修改content的anchoredPosition,这样才能保证整个内容区域不会因为多了或者少了一行而产生跳变。
3 何时需要增删元素
这里需要有两个概念viewBounds和contentBounds:前者是指ScrollRect本身的大小,一般也对应Mask;后者是指ScrollRect里所有cell组成的内容部分的大小。在这个基础上就简单了:如果contentBounds的最上面比viewBounds的最上面要低,那么尝试在顶部增加元素;如果contentBounds的最上面比viewBounds的最上面高很多,那么尝试删除元素。
4 对象池交互
在新建cell和销毁cell的时候,使用对象池来避免内存碎片;同时这里使用了SendMessage来向每个cell发送必须的信息,保证数据的正确性。
5 滚动条相关
这块我其实是估算的,根据当前的长度和当前元素个数/总个数按照比例缩放,这个在所有cell大小一致的情况下是没有问题的;但是如果大小不一致我就无法得到精确结果,所以会产生一定抖动。我暂时没有更好办法,因为得到的信息就是不够用。
public class ButtonsScript : MonoBehaviour { private int repeatTime = 0; private string info = ""; void Start () { } // Update is called once per frame void Update () { } void OnGUI() { // 文本显示 GUILabel (new Rect (50, 200, 200, 50), info);// 第一个文字按钮 GUIcolor = Coloryellow; //按钮文字颜色 GUIbackgroundColor = Colorred; //按钮背景颜色 if(GUIButton(new Rect(50,250,200,30), "Button1")) { info = "按下了Button1"; }// 持续按下的按钮 if(GUIRepeatButton(new Rect(50,400,200,30),"按钮按下中")) { info = "按钮按下中的时间:"+ repeatTime; repeatTime++; } }}unity,ugui如何实现button长按,就是如何监听按下和抬起,求一个完整的小例子谢谢。
using SystemCollections;
using SystemCollectionsGeneric;
using UnityEngine;
public class Test1 : MonoBehaviour
{
private float a = 0;
private void OnMouseDown()
{
a += TimedeltaTime;
}
private void OnMouseUp()
{
a = 0;
if (a > 3)
{
DebugLog("你按下的时间有3秒了");
}
else {
DebugLog("你按下的时间还没到3秒");
}
}
}
你说的是什么的TEXT
如果是UGUI的TEXT的话 首先找到 文本对象的GameObject或者是文本对象本身 然后
文本对象的GameObjectGetComponent<Text>()text = "xxxxx";(文本对象本身的话直接text=“xxx”;)就行了(使用UGUI需要using UnityEngineUI;)
OnGUI 是 旧版UI系统用的,uGUI和OnGUI函数没关系。
Unity4xxx的ui用的是GUI系统,4x的最后一个版本加入了uGUI,据说uGUI设计师里有NGUI的开发者(本人不太了解详情),所以理念很相似。总之比旧的GUI系统好太多了。
以上就是关于如何优化UGUI的ScrollRect全部的内容,包括:如何优化UGUI的ScrollRect、unity,ugui如何实现button长按,就是如何监听按下和抬起,求一个完整的小例子谢谢。、UNity 中UGUI怎样按压三秒后显示文本等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)