HTC 手柄扣动板机出现射线以及碰撞点用小球表示

1,这个可以实现扣动板机出现射线。射线与物体碰撞的地方用小球来表示。

使用的是SteamVR自己带的脚本SteamVR_LaserPointer脚本就可以。但这个是射线会一直显示。

sphere是小球申请变量后面板上拖动把新建的三维物体sphere为这个变量赋值赋值。

需要碰撞点的那个物体上加 collider组件。

 

		
	public SteamVR_TrackedObject trackedObj;

底下的写在updata()里面


	SteamVR_Controller.Device device=SteamVR_Controller.Input((int)trackedObj.index);

 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;
				print (point);
				GameObject go = Instantiate (sphere, point,sphere.transform.rotation);
				go.transform.parent = ARACP.transform;

			}
		}

2,参考SteamVR_LaserPointer重新写脚本实现扣板机出射线,触摸手柄上的触摸板射线消失。

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class RayLine : MonoBehaviour {

	public SteamVR_TrackedObject trackedObj;

	public bool active = true;
	public Color color;
	public float thickness = 0.002f;
	public float thicknessIn = 0.0f;
	public GameObject holder;
	public GameObject pointer;

	// Use this for initialization
	void Start () {

		holder = new GameObject();
		holder.transform.parent = this.transform;
		holder.transform.localPosition = Vector3.zero;

		pointer = GameObject.CreatePrimitive(PrimitiveType.Cube);
		pointer.transform.parent = holder.transform;
		pointer.transform.localScale = new Vector3(thicknessIn, thicknessIn, 100f);
		pointer.transform.localPosition = new Vector3(0f, 0f, 50f);
		
	}
	
	// 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))
		{

			pointer.transform.parent = holder.transform;
			pointer.transform.localScale = new Vector3(thickness, thickness, 100f);
			pointer.transform.localPosition = new Vector3(0f, 0f, 50f);
			BoxCollider collider = pointer.GetComponent<BoxCollider>();

			//print ("GetPress");
			Ray ray = new Ray(trackedObj.transform.position, trackedObj.transform.forward);
			//var point = Camera.main.ScreenToWorldPoint(Input.mousePosition);

		}
		//touch the pad to clear lines(linerender)
		else if(device.GetTouch(SteamVR_Controller.ButtonMask.Touchpad))
		{
			pointer.transform.localScale = new Vector3(thicknessIn, thicknessIn, 100f);




		}


	}


		

}

 

3,使用VRTK就可以简单实现相关功能。

在新建的工程中将steamvr中这两个拖上去。

把VRTK的sample中第三个simplepointer的打开,把 【VRTK】复制到自己的工程里

 

把相关的设置搞好

有时间在hTC的视角无法看见射线,这时可以调整HTC的相机要看到 Ignore Raycast层。

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值