因为要用追踪定位htc的手柄所以要用CameraRig
1 相关设置
2 脚本
LineManager.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class LineManager : MonoBehaviour
{
//to find HTC vive controller(Right or Left)
public SteamVR_TrackedObject trackedObj;
private LineRenderer line;
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组件
//line.SetColors(Color.blue, Color.red);//设置颜色
//line.SetWidth(0.2f, 0.1f);//设置宽度
}
// Update is called once per frame
void Update ()
{
if (trackedObj==null)
{
//print ("NULL");
return;
}
SteamVR_Controller.Device device=SteamVR_Controller.Input((int)trackedObj.index);
//SteamVR_Controller.Device device=SteamVR_Controller.Input(4);
if (device.GetTouchDown(SteamVR_Controller.ButtonMask.Trigger))
{
}
// else if (device.GetTouch(SteamVR_Controller.ButtonMask.Trigger))
else if (device.GetPress(SteamVR_Controller.ButtonMask.Trigger))
{
//print ("GetPress");
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) {
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))
{
this.GetComponent<LineRenderer> ().positionCount = 0;
isNUll = true;
i = 0;
}
}
}
3 如果要用投影把标记投出来这样相机的东西也会投影出来。解决方法是
把渲染视频的平面copy后去掉Mesh render这样这个平面就看不见了但其它属性都有。然后把其放在要投影的一个层里就好了