试图在两个抓取的对象之间创建一个关节

时间:2017-09-25 15:48:56

标签: c# unity3d vrtk

我想将两个Grabbed对象连在一起。

为此,我需要知道正在操作的游戏对象,以便我可以添加一个联合组件。

目前我遇到的最大问题是进入正在抓取的游戏对象。

我尝试使用GetGrabbedObject(),但我只得到" null"。

从我有限的理解:

private GameObject ControllerL 

ControllerL = VRTK_DeviceFinder.GetControllerLeftHand(); // this should get me the left hand 

GameObject GO;

GO = ControllerL.GetComponent<VRTK_InteractGrab>().GetGrabbedObject(); // this should get me the gameobject Grabbed by the left hand

我还缺少什么?

1 个答案:

答案 0 :(得分:0)

这很有效。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using VRTK;

public class JoinObjects : MonoBehaviour {

public GameObject GO1, GO2;
public GameObject ControllerL;
public GameObject ControllerR;
public GameObject GO;


// Use this for initialization
void Start ()
{
    GetComponent<VRTK_InteractableObject>().InteractableObjectGrabbed += new InteractableObjectEventHandler(ObjectGrabbed);
    GetComponent<VRTK_InteractGrab>().GetGrabbedObject();
}

private void ObjectGrabbed(object sender, InteractableObjectEventArgs e)
{
    Debug.Log("Im Grabbed");
}

public void Click()
{
    Debug.Log("pouet");

    ControllerL = VRTK_DeviceFinder.GetControllerLeftHand();
    ControllerR = VRTK_DeviceFinder.GetControllerRightHand();

    GO1 = ControllerL.GetComponent<VRTK_InteractGrab>().GetGrabbedObject();
    GO2 = ControllerR.GetComponent<VRTK_InteractGrab>().GetGrabbedObject();

    if (GO1 != null)
    {
        Debug.Log(GO1.name);
    }

    if (GO2 != null)
    {
        Debug.Log(GO2.name);
    }

    ConfigurableJoint CJoint;
    CJoint = GO1.AddComponent<ConfigurableJoint>();
    CJoint.connectedBody = GO2.GetComponent<Rigidbody>();
    //CJoint.angularXMotion = ConfigurableJointMotion.Locked;
    //CJoint.angularYMotion = ConfigurableJointMotion.Locked;
    //CJoint.angularZMotion = ConfigurableJointMotion.Locked;
    CJoint.xMotion = ConfigurableJointMotion.Locked;
    CJoint.yMotion = ConfigurableJointMotion.Locked;
    CJoint.zMotion = ConfigurableJointMotion.Locked;
}

}