2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > HTC Vive手柄实现在平面上划线

HTC Vive手柄实现在平面上划线

时间:2023-11-17 23:31:34

相关推荐

HTC Vive手柄实现在平面上划线

实现功能是,扣下板机时用Linerender在平面上划线,触摸板机是清楚所有线。在划线时,可以一直用,下一次要划的线与上次的线是分开的。

using System.Collections;using System.Collections.Generic;using UnityEngine;public class SeeRayLine : MonoBehaviour {public SteamVR_TrackedObject trackedObj;private LineRenderer line; private GameObject clone; public GameObject obs; private GameObject ARP; //public GameObject ARACP;private int i = 0; Vector3 RunStart = Vector3.zero;Vector3 RunNext = Vector3.zero;bool isNUll = true;// Use this for initializationvoid Start (){line = this.GetComponent<LineRenderer>();//获得该物体上的LineRender组件 }// Update is called once per framevoid Update (){if (trackedObj==null){//print ("NULL");return;}SteamVR_Controller.Device device=SteamVR_Controller.Input((int)trackedObj.index);if (device.GetTouchDown (SteamVR_Controller.ButtonMask.Trigger)) {}else if (device.GetPress (SteamVR_Controller.ButtonMask.Trigger)) {Ray ray = new Ray (trackedObj.transform.position, trackedObj.transform.forward);//var point = Camera.main.ScreenToWorldPoint(Input.mousePosition);RaycastHit hit;if (GetComponent<Collider> ().Raycast (ray, out hit, 50)) {var point = hit.point;//To have lines using LineRendererif (isNUll) {RunStart = point;isNUll = false;}RunNext = point;if (RunStart != RunNext) {if(line != null){i++;line.SetVertexCount (i);//设置顶点数 line.SetPosition (i - 1, point);}}RunStart = RunNext;} }//touch the pad to clear lines(linerender)else if (device.GetTouch (SteamVR_Controller.ButtonMask.Touchpad)) {//pointer.transform.localScale = new Vector3(thicknessIn, thicknessIn, 100f);//this.GetComponent<LineRenderer> ().positionCount = 0;isNUll = true;i = 0;Destroy (GameObject.Find("ARParent"));} else if (device.GetPressUp (SteamVR_Controller.ButtonMask.Trigger)){//line = this.GetComponent<LineRenderer>();//i = 0;clone = (GameObject)Instantiate(obs, obs.transform.position,obs.transform.rotation);//克隆一个带有LineRender的物体 clone.name = "ARParent";line = clone.GetComponent<LineRenderer>();//获得该物体上的LineRender组件i = 0;}}}

1 obj是Line如下

2SeeRayLine.挂的游戏对象上也需要一个linerender,把上面截面的复制一下就好。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。