版权声明:转载 请说明 https://blog.csdn.net/qq2512667/article/details/82846803
我们都知道在VR模式下 Canvas为World模式是渲染不到HTC VIVE 或者 VR设备的,因为 VR 技术是把游戏相机看到的 渲染成 我们左眼看到的 和右眼看到,关于原理https://blog.csdn.net/u013131744/article/details/53744998
因此就无法叠加到最顶层,使用VRTK 里面的VRTK TK Canvas可以做到很不错 的交互,再配合闪Cuve UI插件就可以实现 曲面 UI 效果,实际上如何使用VRKT的UI呢?
有3步,
1在Untiy Canvas 上 添加VRTK_UI_Canvas 组件,Canvas World模式 加了之后 VRTK就会自动给Canvas加上 Collider组件
2.在 leftController/RighController上添加 VRTK UI_Point 组件
3.再添加上 Pointer组件 用射线来进行探测。
第二种,自己造个轮子
当然也可以自己重写 Unity 中的Button这些,然后再用射线进行 检测 .其实主要方法就是通过射线进行探测,来判断是否 按下 button, Stay Enter Exit 在Stay的时候监听 有没有按下button,有就调用挂在button上的事件。
用这个方法
写的很暴力,还是推荐用上面的方法
onClick.Invoke();
using UnityEngine.UI;
public class rayButton : Button
{
/// <summary>
/// 射线进入(对外接口)
/// </summary>
public virtual void RayEnter()
{
DoStateTransition(SelectionState.Highlighted, false);
}
/// <summary>
/// 射线停留(对外接口)
/// </summary>
public virtual void RayStay()
{
ResetButtonState();
}
/// <summary>
/// 射线离开(对外接口)
/// </summary>
public virtual void RayExit()
{
DoStateTransition(SelectionState.Normal, false);
}
/// <summary>
/// 射线一直处于进入状态时,可能需要执行的事件
/// </summary>
public virtual void TriggerEvent()
{
DoStateTransition(SelectionState.Pressed, true);
onClick.Invoke();
}
/// <summary>
/// 事件完成
/// </summary>
public virtual void ResetButtonState()
{
DoStateTransition(SelectionState.Highlighted, false);
}
}