UGUI交互组件Slider

一.Slider对象的结构

对象 介绍
Slider 附加Slider组件
Background 背景
Fill Area 填充范围
Fill 填充对象
Handle Slider Area 滑块移动范围
Handle 滑块

二.Slider组件属性

属性 说明
Fill Rect 关联填充对象
Handle Rect 关联滑块对象
Direction 设置方向
Min Value 最大取值
Max Value 最小取值
Whole Numbers 是否取整
Value 当前取值

三.事件监听

3.1 可视化监听

3.2 代码监听

cs 复制代码
public class CSlider : MonoBehaviour
{
    private Slider _slider;
    void Start()
    {

        _slider = GameObject.Find("Slider").GetComponent<Slider>();
        _slider.onValueChanged.AddListener(delegate (float value)
        {
            sliderOnValueChanged(value);
        });
    }
    public void sliderOnValueChanged(float value)
    {
        Debug.Log("value: "+ value);
    }
}

四.填充内容占满背景

首先,我们进一步的了解默认的Slider对象,先将滑块隐藏,在最小值和最大值之间拖动Value

可以看到Value最小时,填充图片没有消失,Value最大时,填充范围没有覆盖背景图。

以下设置可以解决这个问题:

4.1.把Fill放到Slider下,Fill Area删了

4.2 将Fill的宽高设置为和父对象一致

4.3 把Fill的Image组件的ImageType属性设置为Filled,把Fill Method设置为Horizontal

将Background和Fill的图片设置后,改变Value的值,可以看到Value最小时,填充消失,Value最大时,覆盖背景

五.Slider的应用

总体来说Slider很常用,游戏中血条,进度条,设置百分比数值等地方都有应用。可按是否有交互进行分类,无交互的统称为进度条(包括血条,经验条等,肯定没有滑块);有交互的称为滑动条(可能有滑块)

5.1 进度条

某游戏的进度条UI

通过代码设置进度条UI的简单举例

cs 复制代码
public class CSlider : MonoBehaviour
{
    private Slider _slider;
    private TMP_Text _text1;
    private float time = 0;
    void Start()
    {
        _text1 = GameObject.Find("Slider1/Text1").GetComponent<TMP_Text>();
        _slider = GameObject.Find("Slider1").GetComponent<Slider>();
        _slider.minValue = 0;
        _slider.maxValue = 100;
        _slider.wholeNumbers = true;

        setSliderValue(20);
    }
    void Update()
    {
        time += Time.deltaTime;
        if(3 < time)
        {
            setSliderValue(50);
        }
        Debug.Log(time);
    }
    public void setSliderValue(float value)
    {
        _slider.value = value;
        _text1.SetText(value + "/" +  _slider.maxValue);
    }
}

运行效果

5.2 滑动条

某游戏滑动条UI

代码示例

cs 复制代码
public class CSlider : MonoBehaviour
{
    private Slider _slider;
    private TMP_Text _text1;
    private float time = 0;
    void Start()
    {
        _text1 = GameObject.Find("Slider1/Text1").GetComponent<TMP_Text>();
        _slider = GameObject.Find("Slider1").GetComponent<Slider>();
        _slider.minValue = 0;
        _slider.maxValue = 100;
        _slider.wholeNumbers = true;
        _slider.onValueChanged.AddListener(delegate (float value)
        {
             Debug.Log(value);
            _text1.SetText(value + "/" +  _slider.maxValue);
        });
        setSliderValue(20);
    }

    public void setSliderValue(float value)
    {
        _slider.value = value;
        _text1.SetText(value + "/" +  _slider.maxValue);
    }
}

运行效果

相关推荐
future_studio4 小时前
聊聊 Unity(小白专享、熟悉基础编程 ... ...)
unity·游戏引擎
ellis197016 小时前
toLua[六] Examples 05_LuaCoroutine分析
unity
程序员正茂1 天前
Unity3d中Tab控件的实现
ui·unity·tab·控件
三掌柜6662 天前
突破AR视觉交互边界:Unity赋能Rokid AR眼镜实现高精度图像识别与实时跟踪
unity·ar·交互
王维志2 天前
使用Asp.Net WebApi(.net 8)托管Unity WebGL
unity·游戏引擎·webgl
lrh30253 天前
Custom SRP 12 - HDR
3d·unity·srp·render pipeline
霜绛3 天前
Unity:Json笔记——Json文件格式、JsonUtlity序列化和反序列化
学习·unity·json·游戏引擎
TYayyyyy3 天前
unity 事件、委托
unity
L X..3 天前
Unity反射调用 ReactiveProperty<T>(泛型类型)内部方法时崩溃
unity·c#·游戏引擎·.net
向宇it4 天前
【推荐100个unity插件】将您的场景渲染为美丽的冬季风景——Global Snow 2
unity·游戏引擎·风景