Unity 光标控制进度条Slider

现在做的VR项目有这个功能,就是通过凝视来控制滑动条,但是用的是Google VR  SDK ,这是不支持点击的,

只能通过凝视时长判断点击,当时看到这个需求真心没思路,后来突然脑袋灵光了,

有同样的需求的可以看看,如果有更好的方法可以一起分享一下 

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

public class Controller : MonoBehaviour {

    public Slider slider;
    public RectTransform sliderT;
    public Canvas canvas;

    private float _refreshRule = 0.02f;   //这是用来纠正,防止鼠标有微弱抖动也会导致刷新(显然这对凝视是有交互障碍的,所以设置缓冲)
    private bool _enter = false;

    void Start()
    {
        EventTriggerListener.Get(slider.gameObject).onEnter = this.__onEnter;
        EventTriggerListener.Get(slider.gameObject).onExit = this.__onExit;
    }

    void Update()
    {
        if (_enter)
            set();

    }


    private void set()
    {
        //输出鼠标的UI位置
        Vector2 _pos = Vector2.one;
        RectTransformUtility.ScreenPointToLocalPointInRectangle(canvas.transform as RectTransform,
                    Input.mousePosition, canvas.worldCamera, out _pos);

        //这里算出鼠标相对slider的位置比例
        float v = (_pos.x - slider.transform.localPosition.x + sliderT.sizeDelta.x / 2) / sliderT.sizeDelta.x;
        v = Mathf.Clamp01(v);

        //交互缓冲
        if (Mathf.Abs(v - slider.value) > _refreshRule)
            slider.value = v;
    }

    private void __onEnter(GameObject go)
    {
        _enter = true;
    }

    private void __onExit(GameObject go)
    {
        _enter = false;
    }
}


下面附上Demo, 不过代码上面都有了,点击下载


你可能感兴趣的:(Unity,VR,Slider)