如何优化UGUI的ScrollRect

如何优化UGUI的ScrollRect,第1张

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怎样按压三秒后显示文本等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9618937.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存