unity SteamVR 2.2.0 手柄控制瞬移

目的:简化脚本,并深入学习VR

注:本次只有相机移动,并无手柄的射线检测

原理:
手柄发射射线:
检测到地板,返回一个bool值,是否存在移动的目标点。

手柄控制是否移动:
获取手柄按键,按下并完整瞬移一次。再次按下按钮才能继续移动

在SteamVR中提供有:
SteamVR_Camera VR中的相机信息
SteamVR_Fade VR中相机的淡出,淡入

效果图:


Teleport.gif

代码:

public class TestTeleporrt : MonoBehaviour
{
    public GameObject m_Pointer;
    public SteamVR_Action_Boolean m_TeleportAction;
    private SteamVR_Behaviour_Pose m_pose = null;
    //是否有有效的位置
    private bool m_HasPostion = false;
    //是否有在传送
    private bool m_IsTeleporting = false;
    [Header("延迟时间")]
    [Range(0.2f, 1)] public float m_fadeTime = 0.5f;
    public SteamVR_Camera playerCamera;

    private void Awake()
    {
        m_pose = GetComponent();
    }

    void Update()
    {
        //这个parabola是我自己写的抛物线检测脚本
        //Pointer(bool)检测到地板时返回的时true 
        m_HasPostion = parabola.Pointer;
        if (m_TeleportAction.GetLastStateDown(m_pose.inputSource))
        {
            TryTelePort();
        }
    }

    private void TryTelePort()
    {
        //  检查有效位置,如果已经传送
        if (!m_HasPostion || m_IsTeleporting)
        {
            return;
        }

        //获取相机和头的位置
        Transform cameraRig = playerCamera.origin;
        Vector3 HeadPostion = playerCamera.head.position;

        //地面的位置
        Vector3 groundPostion = new Vector3(HeadPostion.x, cameraRig.position.y, HeadPostion.z);
        //目标点的位置-开始位置=移动的距离
        Vector3 translateVector = m_Pointer.transform.position - groundPostion;

        //移动
        StartCoroutine(MoveRig(cameraRig, translateVector));
    }

    private IEnumerator MoveRig(Transform cameraRig, Vector3 traslation)
    {
        m_IsTeleporting = true;

        //画面变黑
        SteamVR_Fade.Start(Color.black, m_fadeTime, true);

        //延迟显示画面
        yield return new WaitForSeconds(m_fadeTime);
        //player移动位置
        cameraRig.position += traslation;

        //画面逐渐变亮
        SteamVR_Fade.Start(Color.clear, m_fadeTime, true);

        //De-flag
        m_IsTeleporting = false;

        yield return null;
    }
}

你可能感兴趣的:(unity SteamVR 2.2.0 手柄控制瞬移)