现在做的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, 不过代码上面都有了,点击下载