Unity HTC vive 物体的拾取

xiaoxiao2021-02-28  37

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)     {

        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;              }              } }
转载请注明原文地址: https://www.6miu.com/read-35892.html

最新回复(0)