VR设备的链接与使用(脚本VRhouse)

来源:互联网 发布:java utf 8编码 编辑:程序博客网 时间:2024/05/24 07:16
using UnityEngine;using System.Collections;public class Player_VR : MonoBehaviour {//脚印图片    public GameObject footpicture;    //玩家    protected Transform _transform;    public Vector3 Pos { get { return _transform.position; } }    protected bool lightdemo;    //右手设备    protected Transform _rightHand;    public Transform RightHand { get { return _rightHand; } }    //左手设备    protected Transform _leftHand;    public Transform LeftHand { get { return _leftHand; } }//内部vr组件    SteamVR_TrackedObject _righttrackobj;    SteamVR_TrackedObject _lefttrackobj;    //组件控制的配置按键    SteamVR_Controller.Device _rightdevice;    SteamVR_Controller.Device _leftdevice;    private float currentAngle;    private float lastAngle;    public Quaternion initQ;    public Quaternion resultQ;    public RaycastHit _leftHit;    protected Transform leftmodel;    protected Transform rightmodel;//着色器    protected LineRenderer _lineRender;    protected LineRenderer _rigthlineRender;    protected Ray ray { get { return new Ray(_leftHand.FindChild("Model").transform.position, _leftHand.FindChild("Model").transform.forward); } }    protected Ray rayright { get { return new Ray(_rightHand.FindChild("Model").transform.position, _rightHand.FindChild("Model").transform.forward); } }    public void Start()    {        lightdemo = true;        Init();    }    public void Init()    {        initQ = footpicture.transform.rotation;        _leftHand =GameObject.Find("LeftHand").transform;        _rightHand = GameObject.Find("RightHand").transform;        _lefttrackobj = _leftHand.GetComponent<SteamVR_TrackedObject>();        _righttrackobj = _rightHand.GetComponent<SteamVR_TrackedObject>();        _lineRender = _leftHand.GetComponent<LineRenderer>();        _lineRender.enabled = true;        _rigthlineRender = _rightHand.GetComponent<LineRenderer>();        _rigthlineRender.enabled = true;        leftmodel = _leftHand.FindChild("Model");        rightmodel = _rightHand.FindChild("Model");    }   public void Update()    {        Debug.Log("111111");        ShowRightLineRender();        try        {            _rightdevice = SteamVR_Controller.Input((int)_righttrackobj.index);            _leftdevice = SteamVR_Controller.Input((int)_lefttrackobj.index);        }        catch (System.Exception e)        {            System.Console.WriteLine(e.Message);        }        if (_rightdevice != null)        {            if (_rightdevice.GetPressDown(SteamVR_Controller.ButtonMask.Trigger))            {                RaycastHit hit;                if (Physics.Raycast(rayright, out hit))                {                    //控制灯和电视                    LightSwithAll objdemo = hit.transform.GetComponent<LightSwithAll>();                    if (objdemo != null)                    {                        //改变状态                        ChangeState(objdemo);                    }                    //控制天空盒子                    SkyboxAll skybox = hit.transform.GetComponent<SkyboxAll>();                    if (skybox != null)                    {                        skybox.ChangeSkybox();                    }                }            }        }        if (_leftdevice != null)        {            if (_leftdevice.GetPress(SteamVR_Controller.ButtonMask.Trigger))            {                //RaycastHit hit;                if(Physics.Raycast(ray,out _leftHit,Mathf.Infinity,1<<8))                {                    //控制移动                    if (_leftHit.transform.CompareTag("floor"))                    {                        FootTexRotate();                        _lineRender.SetPosition(0, leftmodel.position);                        _lineRender.SetPosition(1, _leftHit.point);                    }                    else                    {                        InitLineRender();                    }                }            }            if (_leftdevice.GetPressUp(SteamVR_Controller.ButtonMask.Trigger))            {                RaycastHit hit;                if (Physics.Raycast(ray, out hit,Mathf.Infinity, 1 << 8))                {                    if (hit.transform.CompareTag("floor"))                    {                        //玩家瞬移                       _transform.position = hit.point;                    }                }            }            if (_leftdevice.GetPressDown(SteamVR_Controller.ButtonMask.Trigger))            {            }        }    }    public void PickUp()    {    }    //显示着色器    public void ShowRightLineRender()    {        _rigthlineRender.SetPosition(0, rightmodel.position);        _rigthlineRender.SetPosition(1, rightmodel.forward * 10);        Debug.Log("0000");    }    //更新 着色器    public void InitLineRender()    {        footpicture.transform.position = new Vector3(10000, 10000, 10000);        _lineRender.SetPosition(0, leftmodel.position);        _lineRender.SetPosition(1, leftmodel.position);    }    public void ChangeState(LightSwithAll obj)    {        if (obj != null)        {            if (lightdemo == true)            {                obj.Open();                lightdemo = false;                return;            }            if (lightdemo == false)            {                obj.Close();                lightdemo = true;                return;            }        }    }    //脚丫旋转   public void FootTexRotate()    {        //图片位置        footpicture.transform.position = _leftHit.point + new Vector3(0, 0.002f, 0);        //图片旋转        Vector3 playerForward = this.transform.forward;        Vector3 rayVector3 = _leftHit.point - new Vector3(_leftHand.transform.position.x            , playerForward.y, _leftHand.transform.position.z);        currentAngle = Vector3.Angle(playerForward, rayVector3);        //旋转左右        if (lastAngle != currentAngle)        {            Vector3 result = Vector3.Cross(playerForward, rayVector3);            if (result.y > 0)            {                Quaternion q = Quaternion.identity;                q.eulerAngles = new Vector3(0, currentAngle, 0);                footpicture.transform.rotation = q * initQ;            }            else            {                Quaternion q = Quaternion.identity;                q.eulerAngles = new Vector3(0, -currentAngle, 0);                footpicture.transform.rotation = q * initQ;            }            lastAngle = currentAngle;        }    }}
原创粉丝点击