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 initialization
	void Start ()
	{


		line = this.GetComponent<LineRenderer>();//获得该物体上的LineRender组件 

	}
	// Update is called once per frame
	void 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 LineRenderer
				if (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如下

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

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值