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);
    }
}

运行效果

相关推荐
BuHuaX3 小时前
Unity_AssetBundle相关
unity·c#·游戏引擎·游戏策划
神码编程4 小时前
【Unity】 HTFramework框架(六十八)StringEditor字符串复杂编辑器
unity·编辑器·游戏引擎·htframework
TO_ZRG6 小时前
Unity-iPhone、Unity-Framework target 如何选择、@rpath报错
unity·ios·iphone
平行云14 小时前
World Labs & Paraverse:统一3D世界的创造与访问
3d·unity·ai·ue5·aigc·实时云渲染·云xr
jtymyxmz20 小时前
《Unity Shader》7.2.3 实践 在切线空间下计算
unity·游戏引擎
在路上看风景1 天前
1.5 Material
unity
WarPigs2 天前
Unity红点系统笔记
unity·游戏引擎
作孽就得先起床2 天前
unity UnauthorizedAccessException: 拒绝访问路径
unity·游戏引擎
tealcwu2 天前
【Unity踩坑】Unity项目提示文件合并有冲突
elasticsearch·unity·游戏引擎
tealcwu3 天前
【Unity小技巧】如何将3D场景转换成2D场景
3d·unity·游戏引擎