实现功能是,扣下板机时用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,把上面截面的复制一下就好。