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; } }}
阅读全文
0 0
- VR设备的链接与使用(脚本VRhouse)
- VR设备与软件的整合
- VR插件的集成与使用
- Varnish的部署与使用实例(内附一键安装部署脚本github链接)
- 链接与链接脚本
- 链接与链接脚本
- VR 头显设备的姿态 记录贴 (1)
- 设备名与链接名的转换
- Android VR的使用
- AR/VR learning (3)--物体的运动与动画(iTween插件的使用)
- AR/VR learning (3)--虚拟按键(virtualButton)的测试与使用
- ld与链接脚本
- Android-四元数-控制VR设备的旋转
- 一些有意思的VR设备介绍
- 华为正式发布VR眼镜设备,这次走的是Gear VR模式 | VR陀螺
- VR开发--(HTC Vive)设备一览
- 3D陀螺仪脚本(VR)
- 使用HTC和Steam VR进行unity VR的开发第二步 (实现功能)
- BZOJ 1034 [ZJOI2008]泡泡堂BNB 贪心
- 顺序表应用5:有序顺序表归并
- 注入进阶之OS命令行注入
- 牛顿法与拟牛顿法
- [LeetCode] 分治之 Median of Two Sorted Arrays 课后题算法实现 Hard
- VR设备的链接与使用(脚本VRhouse)
- 算法(二):树,以及变形
- POJ3041(二分图匹配)
- poj 3258 River Hopscotch
- Linux下unzip命令出现 command not found的解决办法
- Ubuntu下用vi打开文本的^M问题
- 密码强度的正则验证
- Graph Theory NO.7_HDU_1233_还是畅通工程_最小生成树
- ccf 公共钥匙盒 模拟