8.滚动视图和分组

8.组合控件-滚动视图和分组


8.1 知识点

分组

BeginGroup和EndGroup静态方法 开始和结束分组

//BeginGroup静态方法 开始分组
//开始一个组。必须与 EndGroup 调用配对使用。
//用于批量控制控件位置 
//可以理解为 包裹着的控件加了一个父对象 
//可以通过控制分组来控制包裹控件的位置
GUI.BeginGroup(groupRect);

//组内的组件
GUI.Button(new Rect(0, 0, 100, 50), "测试按钮");
GUI.Label(new Rect(0, 60, 100, 20), "Label信息");

//EndGroup静态方法 结束分组
//结束组。
GUI.EndGroup();

效果

滚动列表

BeginScrollView和EndScrollView静态方法 开始和结束一个滚动列表

//BeginScrollView静态方法 创建一个滚动列表
//在 GUI 内开始一个滚动视图。
//public static Vector2 BeginScrollView(Rect position, Vector2 scrollPosition, Rect viewRect);
//position 表示滚动视图的外部矩形区域。它定义了整个滚动视图的大小和位置,包括滚动条的位置和大小。
//scrollPosition 表示当前滚动视图的滚动位置。它指定了滚动内容在滚动视图中的偏移量,通常用来控制滚动条的位置。 要实时赋值。
//viewRect  表示滚动视图的内容区域。它定义了实际的可滚动内容的大小和位置,即内容的边界。滚动视图的内容会在这个矩形区域内进行滚动,超出这个区域的部分将被裁剪或隐藏。
nowPos = GUI.BeginScrollView(scRect, nowPos, showRect);
//其他重载包括修改横竖如果拖动条时候显示和样式 略

//滚动列表类的组件
GUI.Toolbar(new Rect(0, 0, 300, 50), 0, strs);
GUI.Toolbar(new Rect(0, 60, 300, 50), 0, strs);
GUI.Toolbar(new Rect(0, 120, 300, 50), 0, strs);
GUI.Toolbar(new Rect(0, 180, 300, 50), 0, strs);

//EndScrollView静态方法 结束滚动列表
//结束使用 BeginScrollView 调用开始的滚动视图。
GUI.EndScrollView();

效果




8.2 知识点代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Lesson08_复合控件_滚动视图和分组 : MonoBehaviour
{
    public Rect groupRect;


    public Rect scRect;
    public Rect showRect;

    private Vector2 nowPos;

    private string[] strs = new string[] { "123", "234", "222", "111" };
    private void OnGUI()
    {
        #region 知识点一 分组

        //BeginGroup静态方法 开始分组
        //开始一个组。必须与 EndGroup 调用配对使用。
        //用于批量控制控件位置 
        //可以理解为 包裹着的控件加了一个父对象 
        //可以通过控制分组来控制包裹控件的位置
        GUI.BeginGroup(groupRect);

        //组内的组件
        GUI.Button(new Rect(0, 0, 100, 50), "测试按钮");
        GUI.Label(new Rect(0, 60, 100, 20), "Label信息");

        //EndGroup静态方法 结束分组
        //结束组。
        GUI.EndGroup();

        #endregion


        #region 知识点二 滚动列表

        //BeginScrollView静态方法 创建一个滚动列表
        //在 GUI 内开始一个滚动视图。
        //public static Vector2 BeginScrollView(Rect position, Vector2 scrollPosition, Rect viewRect);
        //position 表示滚动视图的外部矩形区域。它定义了整个滚动视图的大小和位置,包括滚动条的位置和大小。
        //scrollPosition 表示当前滚动视图的滚动位置。它指定了滚动内容在滚动视图中的偏移量,通常用来控制滚动条的位置。 要实时赋值。
        //viewRect  表示滚动视图的内容区域。它定义了实际的可滚动内容的大小和位置,即内容的边界。滚动视图的内容会在这个矩形区域内进行滚动,超出这个区域的部分将被裁剪或隐藏。
        nowPos = GUI.BeginScrollView(scRect, nowPos, showRect);
        //其他重载包括修改横竖如果拖动条时候显示和样式 略

        //滚动列表类的组件
        GUI.Toolbar(new Rect(0, 0, 300, 50), 0, strs);
        GUI.Toolbar(new Rect(0, 60, 300, 50), 0, strs);
        GUI.Toolbar(new Rect(0, 120, 300, 50), 0, strs);
        GUI.Toolbar(new Rect(0, 180, 300, 50), 0, strs);

        //EndScrollView静态方法 结束滚动列表
        //结束使用 BeginScrollView 调用开始的滚动视图。
        GUI.EndScrollView();

        #endregion
    }
}

8.3 练习题

制作一个滚动视图,外部有一个字符串数组,通过在Inspector修改这个字符串数组数量,会在滚动视图内部动态的创建label依次显示内容

绘制前计算内部显示内容的高度

// 在脚本中动态计算内部显示内容的高度
showRect.height = strs.Length * 30; // **API: strs.Length**

创建滚动视图,并绘制每个label

// 创建滚动视图,并绘制每个label
nowPos = GUI.BeginScrollView(svRect, nowPos, showRect); // **API: GUI.BeginScrollView**
for (int i = 0; i < strs.Length; i++)
{
    // 每个label的y位置根据索引计算
    GUI.Label(new Rect(0, i * 30, 100, 30), strs[i]); // **API: GUI.Label**
}
GUI.EndScrollView(); // **API: GUI.EndScrollView**

调整参数,查看效果



8.4 练习题代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

#region Lesson08 练习题一
//制作一个滚动视图,外部有一个字符串数组,通过在Inspector修改这个字符串数组数量,会在滚动视图内部动态的创建label依次显示内容
public class ScrollViewTestPanel : MonoBehaviour
{
    public Rect svRect;
    public Rect showRect;
    private Vector2 nowPos;

    public string[] strs;

    private void OnGUI()
    {
        //绘制之前通过字符串数组 动态的计算出 内部显示内容的 高度
        showRect.height = strs.Length * 30;

        //开始滚动视图
        nowPos = GUI.BeginScrollView(svRect, nowPos, showRect);
        //for循环 根据有多少个字符串动态的绘制 Label y位置也是根据索引计算的
        for (int i = 0; i < strs.Length; i++)
        {
            //每个label的y都不一样 和索引相关
            GUI.Label(new Rect(0, i * 30, 100, 30), strs[i]);
        }
        //结束滚动视图
        GUI.EndScrollView();
    }
}
#endregion


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏