using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CatchObject : MonoBehaviour {
//射线对象
SteamVR_LaserPointer laserPointer;
//手柄对象
SteamVR_TrackedController tracked;
//记录射线指向的目标 初始为空
GameObject targert = null;
// Use this for initialization
void Start () {
//拿到射线组件
laserPointer = GetComponent<SteamVR_LaserPointer>();
//射线碰到的事件
laserPointer.PointerIn += OnPointerIn;
//射线离开的事件
laserPointer.PointerOut += OnPointerOut;
//拿到按键组件
tracked = GetComponent<SteamVR_TrackedController>();
//扳机按下的事件
tracked.TriggerClicked += OnTriggerClicked;
//扳机抬起的事件
tracked.TriggerUnclicked += OnTriggerUnclicked;
}
// Update is called once per frame
void Update () {
}
//射线的进入事件
void OnPointerIn(object sender, PointerEventArgs e)
{
//得到指向的的物体
GameObject objtarget = e.target.gameObject;
//判断物体的Tag是不是Obj 或者是判断是不是可以拾取的物体
if (objtarget.tag.Equals("Obj"))
{
//用全局变量targert记录这个物体
targert = objtarget;
print("此物体可以被抓取");
}
}
//射线的离开事件
void OnPointerOut(object sender, PointerEventArgs e)
{
}
//扳机按下的事件
void OnTriggerClicked(object sender, ClickedEventArgs e)
{
//拾取 判断对象是不是能拾取的物体
if (targert != null)
{
//如果被拾取的物体有刚体
Rigidbody r = targert.GetComponent<Rigidbody>();
//删除刚体
Destroy(r);
//物体到手柄位置
targert.transform.position = gameObject.transform.position;
//物体变成手柄的子物体
targert.transform.parent = gameObject.transform;
}
}
//扳机抬起的事件
void OnTriggerUnclicked(object sender, ClickedEventArgs e)
{
//如果有被拾取的物体在手柄上
if (targert != null)
{
//给被拾取的物体增加刚体
targert.AddComponent<Rigidbody>();
//被拾取的物体不是手柄的子物体
targert.transform.parent = null;
//targert全局变量清空
targert = null;
}
}
}
VR开发中HTC手柄射线拾物方法
最新推荐文章于 2022-12-27 16:34:03 发布