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手柄射線拾物方法
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.