Unity技术手册之Slider滑动器使用实例详解

发布时间:

为了方便更多的人(新手)看明白,使用的汉字,真实项目尽量使用英文规则昂。

该控件通常可以用于技能冷却或者人物血条或者游戏里面设置功能的各种滑动条。

Unity技术手册之Slider滑动器使用实例详解

我们在Hierarchy窗口中右键(UI-Slider)创建一个滑动条(如下图)。会发现有五个子物体,其实主要的是Background和Fill以及Handle,另外两个带Area的是为了做宽高适配,一直填充满父物体Slider。

Background便是默认的滑动条底图或底色。Fill是滑动进度的填充效果,Handle是滑动块。Slider物体有个Slider组件,除了默认的Transition(和Button中的一样)还有Fill Rect和Handler Rect。Fill Rect用来指定滑动后的填充,也就是Fill物体,Handler Rect是用来设置滑动块的。

Unity技术手册之Slider滑动器使用实例详解

特别声明:Background、Fill、Handle其实都是Image组件,带有Image的所有属性及特点,加上里面的Image Type,可以充分利用起来玩出花样。

Slider其他参数

Direction(方向):可以修改滑动方向,默认是从左到右,还有右到左,上到下,下到上。看下方Gif。

Min Value & Max Value:最小值和最大值。最小值最大值有助于数字化滑动的效果,比如血条的实现,就可以设置为最小值0,最大值100。

Whole Numbers:表示滑动过程为整数(默认不勾选,滑动进度带有小数),如果设置大小分为是0-1则不会有缓缓填充进度效果。当设置的大小范围最大值大于1的时候,滑动不会出现小数值。

Value:当前所处进度,范围在Min Value和Max Value之间。

Unity技术手册之Slider滑动器使用实例详解

设置监听事件有两种:

public class TestSlider : MonoBehaviour
{
private void Start()
{
//代码形式添加
gameObject.GetComponent<Slider>().onValueChanged.AddListener(SliderChange);
}
//外面Unity编辑器中选择指定
public void SliderChange(float value)
{
Debug.Log("注意一定要选择Dynamic float下的方法名,滑动的进度" + value);
}
}

Unity技术手册之Slider滑动器使用实例详解

如果你想添加进度条开始拖动的瞬间。以及结束拖动的瞬间 可以自定义一个Slider。

也可以直接继承IBeginDragHandler,IEndDragHandler,两种方法。 方法一

public class TestSlider : MonoBehaviour,IBeginDragHandler,IEndDragHandler
{
private void Start()
{
//代码形式添加
gameObject.GetComponent<Slider>().onValueChanged.AddListener(SliderChange);
}
//外面Unity编辑器中选择指定
public void SliderChange(float value)
{
Debug.Log("注意一定要选择Dynamic float下的方法名,滑动的进度" + value);
}
public void OnBeginDrag(PointerEventData eventData)
{
Debug.Log("开始拖动" + eventData.button);
}
public void OnEndDrag(PointerEventData eventData)
{
Debug.Log("结束拖动" + eventData.position);
}
}

方法二 自定义Slider就需要Unity编辑器中的物体挂载你自定义的脚本了。

Unity技术手册之Slider滑动器使用实例详解

public class TestSlider : MonoBehaviour
{
private void Start()
{
//代码形式添加
gameObject.GetComponent<CustomSlider>().onValueChanged.AddListener(SliderChange);
gameObject.GetComponent<CustomSlider>().beiginDrag = OnSliderDragBegin;
gameObject.GetComponent<CustomSlider>().endDrag = OnSliderDragEnd;
}
private void OnSliderDragBegin()
{
Debug.Log("开始拖动");
}
private void OnSliderDragEnd()
{
Debug.Log("结束拖动");
}
//外面Unity编辑器中选择指定
public void SliderChange(float value)
{
Debug.Log("滑动的进度" + value);
}
}