ScrollBar

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

public class Lesson14 : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        #region 知识点一 Scrollbar是什么
        //Scrollbar是滚动条组件
        //是UGUI中用于处理滚动条相关交互的关键组件

        //默认创建的Scrollbar由2组对象组成
        //父对象——Scrollbar组件依附的对象
        //子对象——滚动块对象

        //一般情况下我们不会单独使用滚动条 
        //都是配合ScrollView滚动视图来使用
        #endregion

        #region 知识点二 Scrollbar参数

        #endregion

        #region 知识点三 代码控制
        Scrollbar sb = this.GetComponent<Scrollbar>();
        print(sb.value);
        print(sb.size);
        #endregion

        #region 知识点四 监听事件的两种方式
        //1.拖脚本
        //2.代码添加
        sb.onValueChanged.AddListener((v) => {
            print("代码监听的函数" + v);
        });
        #endregion
    }

    public void ChangeValue(float v)
    {
        print(v);
    }
}

ScrollView

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

public class Lesson15 : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        #region 知识点一 ScrollRect是什么
        //ScrollRect是滚动视图组件
        //是UGUI中用于处理滚动视图相关交互的关键组件

        //默认创建的ScrollRect由4组对象组成
        //父对象——ScrollRect组件依附的对象 还有一个Image组件 最为背景图
        //子对象
        //Viewport控制滚动视图可视范围和内容显示
        //Scrollbar Horizontal 水平滚动条
        //Scrollbar Vertical 垂直滚动条

        #endregion

        #region 知识点二 ScrollRect参数

        #endregion

        #region 知识点三 代码控制
        ScrollRect sr = this.GetComponent<ScrollRect>();
        //改变内容的大小 具体可以拖动多少 都是根据它的尺寸来的
        //sr.content.sizeDelta = new Vector2(200, 200);

        sr.normalizedPosition = new Vector2(0, 0.5f);
        #endregion

        #region 知识点四 监听事件的两种方式
        //1.拖脚本
        //2.代码添加

        sr.onValueChanged.AddListener((vec) =>
        {
            print(vec);
        });
        #endregion
    }

    public void ChangeValue(Vector2 v)
    {
        print(v);
    }
}

作业:动态创建10个物品

回答1

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

public class BagPanel : MonoBehaviour
{
    public static BagPanel panel;

    public Button btnClose;

    public ScrollRect svItems;

    private void Awake()
    {
        panel = this;
    }

    // Start is called before the first frame update
    void Start()
    {
        //第一步 动态创建格子 设置格子的位置
        //动态创建n个图标 作为滚动视图中显示的内容
        for (int i = 0; i < 30; i++)
        {
            GameObject item = Instantiate(Resources.Load<GameObject>("Item"));
            item.transform.SetParent(svItems.content, false);
            //设置格子的位置
            item.transform.localPosition = new Vector3(10, -10, 0) + new Vector3(i % 4 * 160, -i / 4 * 160, 0);
        }

        //第二步 设置 Content的高
        //由于设置了锚点宽度x不用考虑
        //高度直接用浮点数的向上取整 可以弥补用普通数字+1遇到可以乘除时的问题
        svItems.content.sizeDelta = new Vector2(0, Mathf.CeilToInt(30 / 4f) * 160);

        btnClose.onClick.AddListener(() => {

            gameObject.SetActive(false);
        });

        //一开始隐藏自己
        this.gameObject.SetActive(false);
    }
}

不会做游戏!