using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Pickup : MonoBehaviour {
SteamVR_LaserPointer LaserPoniter;//射线
SteamVR_TrackedController stc;//扳机
bool ispickup = false;//是否拾取
public GameObject plane;//地面
GameObject obj_pickup;//拾取物体
// Use this for initialization
void Start () {
//获取激光组件
LaserPoniter = GetComponent<SteamVR_LaserPointer>();
LaserPoniter.PointerIn += OnPointerIn;//添加射中事件
LaserPoniter.PointerOut += OnPointerOut;//添加射线离开事件
//获取跟踪控制组件
stc = GetComponent<SteamVR_TrackedController>();
stc.TriggerClicked += OnTriggerClicked;//添加扳机扣下事件
stc.TriggerUnclicked += OnTriggerUnclicked;//添加扳机抬起事件
}
// Update is called once per frame
void Update () {
}
/// <summary>
/// 射线射中事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void OnPointerIn(object sender, PointerEventArgs e)
{
{
obj_pickup = e.target.gameObject;
ispickup = true;
}
}
/// <summary>
/// 射线离开事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void OnPointerOut(object sender, PointerEventArgs e)
{
//射线离开后就物体置空
ispickup = false;
}
/// <summary>
/// 扳机扣下事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void OnTriggerClicked(object sender, ClickedEventArgs e)
{
{
obj_pickup.transform.SetParent(this.transform);
obj_pickup.GetComponent<Rigidbody>().useGravity = false;
obj_pickup.transform.localPosition = Vector3.zero;
}
else
{
Debug.Log("没有物体");
}
}
/// <summary>
/// 扳机抬起事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void OnTriggerUnclicked(object sender, ClickedEventArgs e)
{
{
obj_pickup.transform.SetParent(plane.transform);
obj_pickup.GetComponent<Rigidbody>().useGravity = true;
obj_pickup = null;
}
}
}
using System.Collections.Generic;
using UnityEngine;
public class Pickup : MonoBehaviour {
SteamVR_LaserPointer LaserPoniter;//射线
SteamVR_TrackedController stc;//扳机
bool ispickup = false;//是否拾取
public GameObject plane;//地面
GameObject obj_pickup;//拾取物体
// Use this for initialization
void Start () {
//获取激光组件
LaserPoniter = GetComponent<SteamVR_LaserPointer>();
LaserPoniter.PointerIn += OnPointerIn;//添加射中事件
LaserPoniter.PointerOut += OnPointerOut;//添加射线离开事件
//获取跟踪控制组件
stc = GetComponent<SteamVR_TrackedController>();
stc.TriggerClicked += OnTriggerClicked;//添加扳机扣下事件
stc.TriggerUnclicked += OnTriggerUnclicked;//添加扳机抬起事件
}
// Update is called once per frame
void Update () {
}
/// <summary>
/// 射线射中事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void OnPointerIn(object sender, PointerEventArgs e)
{
print("射线" + e.target.name);
//射线射中后判定物体标签是否为拾取物品(物体标签自设)
if (e.target.gameObject.tag == "pickup"){
obj_pickup = e.target.gameObject;
ispickup = true;
}
}
/// <summary>
/// 射线离开事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void OnPointerOut(object sender, PointerEventArgs e)
{
//射线离开后就物体置空
ispickup = false;
}
/// <summary>
/// 扳机扣下事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void OnTriggerClicked(object sender, ClickedEventArgs e)
{
print("扳机被按下!!");
//是否为可拾取,是就将物体父节点设置为手柄并置为原点,将物体重力关闭,拿到手柄上
if(ispickup){
obj_pickup.transform.SetParent(this.transform);
obj_pickup.GetComponent<Rigidbody>().useGravity = false;
obj_pickup.transform.localPosition = Vector3.zero;
}
else
{
Debug.Log("没有物体");
}
}
/// <summary>
/// 扳机抬起事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void OnTriggerUnclicked(object sender, ClickedEventArgs e)
{
print("扳机被抬起!!");
//扳机抬起后,如果是拾取状态就将物体父节点设为地面,并将刚体组件添加重力,物体自由落体
if(ispickup){
obj_pickup.transform.SetParent(plane.transform);
obj_pickup.GetComponent<Rigidbody>().useGravity = true;
obj_pickup = null;
}
}
}