VR開發中HTC手柄射線拾物方法

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;
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章