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

运行效果

相关推荐
还是大剑师兰特8 小时前
Unity3D(Unity)完整详细介绍
unity·游戏引擎
ellis197012 小时前
u3d插件xLua[七]例6 Coroutine
unity
还是大剑师兰特13 小时前
Unity 从零搭建简易3D场景(新手分步教程)
3d·unity·游戏引擎
神码编程13 小时前
【Unity】TankBattle联机坦克大战(三)创建关卡(生成地块)
unity·游戏引擎·帧同步·坦克大战
淡海水14 小时前
C#与常用数据结构源码剖析-全篇导览
开发语言·数据结构·unity·面试·职场和发展·c#
玖玥拾1 天前
Unity3D RPG 入门项目(四)背包拖拽、物品悬浮提示、项目开发思维
3d·unity·游戏引擎
xcLeigh2 天前
Unity基础:Start与Update方法——Unity脚本生命周期初探
java·unity·游戏引擎·教程
郝学胜-神的一滴2 天前
[简化版 GAMES 104] 现代游戏引擎 05:游戏引擎世界构建核心机制深度解析
c++·程序人生·unity·游戏引擎·计算机图形学·opengl
LONGZETECH3 天前
无人机实训高成本痛点解法:虚拟仿真实现 70% 耗材损耗下降
大数据·算法·unity·架构·无人机
五仁烧饼3 天前
Unity Addressables 静默资源策略
游戏·unity·addressables