unity3d VR手柄射线拾取,投掷,发射可拿去的物体

来源:互联网 发布:yandex优化怎么做 编辑:程序博客网 时间:2024/05/02 04:44
using UnityEngine;/// <summary>/// 手柄射线原代码要添加好1. SteamVR_LaserPointer  2.SteamVR_TrackedController/// 以下是负责射线抓取的代码/// </summary>public class catchObject : MonoBehaviour{    SteamVR_LaserPointer slp;   //射线对象    SteamVR_TrackedController stc;    //控制器对象    GameObject target = null;    //指向可以拾取的物体    void Start()    {        slp = GetComponent<SteamVR_LaserPointer>();    //得到射线对象        slp.PointerIn += OnpointerIn;    //响应射线的进入事件        slp.PointerOut += OnpointerOut;    //响应射线的离开事件        stc = GetComponent<SteamVR_TrackedController>();    //得到手柄控制器的对象        stc.TriggerClicked += OnTriggerClicked;    //响应手柄扣动事件        stc.TriggerUnclicked += OnTriggerUnclicked;    //响应手柄松开事件    }    void Update()    {    }    void OnpointerIn(object sender, PointerEventArgs e) //射线进入事件    {        GameObject obj = e.target.gameObject;//得到指向的物体        if (obj.tag.Equals("Can Cach")) //如果我们选择的物体他的标签是Can Cach        {            target = obj;  //用全局变量记录这个物体        }    }    void OnpointerOut(object sender, PointerEventArgs e)//射线离开事件    {        if (target != null)  //如果是在能拾取的物体上离开        {            target = null;  //不再记录这个物体了        }    }    void OnTriggerClicked(object sender, ClickedEventArgs e)//用来响应扳机扣动事件的行为    {        if (target != null)  //如果拾取到了东西        {            Rigidbody r = target.GetComponent<Rigidbody>();    //如果物体有刚体就拿到这个刚体            Destroy(r);    //销毁掉这个对象            target.transform.position = transform.position;//这个拾取的物体位置等于手柄位置            target.transform.parent = transform;//这个可以拾取的物体的父节点是手柄的节点        }    }    void OnTriggerUnclicked(object sender, ClickedEventArgs e)//用来响应扳机松开事件的行为    {        if (target != null)  //如果拾取到了东西        {            target.AddComponent<Rigidbody>().AddForce(transform.forward*500);//给被拾取的物体增加刚体跟向前的力                  target.transform.parent = null;//不再是手柄的子物体           }    }}
using UnityEngine;/// <summary>/// 添加VR模块1.SteamVR_TrackedController/// 以下代码负责发射物体/// </summary>public class SteamVR_TrackedController_Shoot : MonoBehaviour{    SteamVR_TrackedController stc;    //控制器对象    void Start()    {        stc = GetComponent<SteamVR_TrackedController>();    //得到手柄控制器的对象        stc.TriggerClicked += OnTriggerClicked;    //响应手柄扣动事件    }         void OnTriggerClicked(object sender, ClickedEventArgs e)             //用来响应扳机扣动事件的行为    {        GameObject testObject = GameObject.CreatePrimitive(PrimitiveType.Sphere);            //创造一个原始的圆形模块(CreatePrimitive创造原始)(PrimitiveType原始模型)        testObject.transform.position = transform.position;            //创造模型的位置就是手柄的位置        testObject.transform.localScale = new Vector3(0.1f, 0.1f, 0.1f);            //将原始模块按0.1比例进行缩放        testObject.AddComponent<Rigidbody>().AddForce(transform.forward * 1000);            //将这个模块增加刚体组件(AddComponent)并增加力(AddForce)        testObject.tag = "Can Cach";        //增加标签 这个标签设定的是可以拾取的物体    }}
4 0