Unity 滑动条(Slider)拖拽开始和结束、点击等事件的拓展功能

发布于:2024-05-24 ⋅ 阅读:(312) ⋅ 点赞:(0)

目录

前言

一、关于slider的监听事件

二、方案一 (无脚本版)

三、方案二 (继承slider脚本进行拓展)

四、方案三(外部脚本添加)


前言

前一段时间在使用这个功能,发现搜索出来的文章和脚本,讲的都不是很详细,这里做一些补充。

注意看目录,一共是三种方案,都可以使用,使用一种就可以了!!!!

一、关于slider的监听事件

如图1所示,unity自带的slider组件只有当数值变动时的事件,但我们有时候还需要按下的事件,抬起的事件等。

图1 slider组件

二、方案一 (无脚本版)

拖拽等事件是EventTrigger,这个在slider下也同样适用,所以直接添加组件EventTrigger(如图2所示)。

图2 eventTrigger

后面的步骤可以和按钮一样使用,可跳转链接。

 unity | EventTrigger(实现鼠标/按钮按下、抬起等时执行的方法)-CSDN博客

三、方案二 (继承slider脚本进行拓展)

up觉得这个方案还是挺麻烦的,不建议使用。还不如上一条。

新建一个脚本叫随便起个名字,例newSlider,然后继承自Slider。

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

public class NewSlider : Slider
{

}

随便新建一个物体,把这个脚本挂上去,你会发现,两个一模一样,只不过新的没有数据。(如图3所示)

图3 NewSlider

我们把之前slider的数据一个一个抄到这个上面。(如图4所示)

图4 抄数据

最后把新的组件粘贴回原来的slider。(如图5所示)

图5 把newSlider放回去

 接下来在之前新建的脚本里添加方法。

using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
                                
public class NewSlider : Slider
{
    //这里用的是接口,没有继承的原因是Slider里面继承过了,这里只需要使用就可以

    //按下时方法
    public override void OnPointerDown(PointerEventData eventData)
    {
        Debug.Log("我按下了");
    }
    //抬起时方法
    public override void OnPointerUp(PointerEventData eventData)
    {
        Debug.Log("我抬起了");
    }
}

 想了解具体原理请参考
Unity | 接口的理解和使用方法_unity 接口-CSDN博客

成品如图6所示。

图6 成品

四、方案三(外部脚本添加)

还是要在slider上面加组件EventTrigger,如图2所示,这里不第二次贴图了。

每一条的解析,我都写在下面了。(解析快比代码多了~给个赞吧,小女子这厢有礼了~)

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

public class SliderEvent : MonoBehaviour
{
    //公开一个slider,到时候把这个拖进来
    public Slider slider;
    
    void Start()
    {
        //获取一下slider上面EventTrigger组件
        EventTrigger eventTrigger = slider.GetComponent<EventTrigger>();

        //首先,需要初始化一个类,这个类里面你需要指定:1.你要添加哪种事件 2.事件发生时,你要执行什么方法
        EventTrigger.Entry entry = new EventTrigger.Entry();

        //这里先添加,当按下时的事件
        entry.eventID = EventTriggerType.PointerDown;
        //这里添加按下时执行什么方法
        entry.callback.AddListener((data)=>Way0());

        //我事件也设置完了,事件发生时执行的方法也设置完了,我要把这个类加到eventTrigger里的类列表里
        eventTrigger.triggers.Add(entry);

        //如果想再加一个抬起事件,把这个类重新初始化一下
        entry = new EventTrigger.Entry();

        //这里先添加,当抬起时的事件
        entry.eventID = EventTriggerType.PointerUp;
        //这里添加按下时执行什么方法
        entry.callback.AddListener((data) => Way1());

        //我事件也设置完了,事件发生时执行的方法也设置完了,我要把这个类加到eventTrigger里的类列表里
        eventTrigger.triggers.Add(entry);
    }

    //这里是一个方法
    void Way0()
    { 
    
    }

    //这里是方法2
    void Way1()
    {

    }


}

网站公告

今日签到

点亮在社区的每一天
去签到