コード例 #1
0
ファイル: Lamp.cs プロジェクト: hokkyokuh2/FaceUI_test
 void OnRelease(GrabSensor.GrabInfo grabInfo)
 {
     if (grabInfo.obj == gameObject)
     {
         GameObject.DestroyImmediate(GetComponent <FixedJoint>());
     }
 }
コード例 #2
0
ファイル: Lamp.cs プロジェクト: hokkyokuh2/FaceUI_test
 void OnGrab(GrabSensor.GrabInfo grabInfo)
 {
     if (grabInfo.obj == gameObject)
     {
         FixedJoint fj = gameObject.AddComponent <FixedJoint>();
         fj.connectedBody = GameObject.Find("Robot_RightHand").GetComponent <Rigidbody>();
     }
 }
コード例 #3
0
 void Update()
 {
     // debug
     if (Input.GetKeyDown(KeyCode.Return))
     {
         GrabSensor.GrabInfo grab = new GrabSensor.GrabInfo();
         grab.hand = GameObject.Find("Robot_RightHandMiddle1").transform;
         OnGrab(grab);
     }
 }
コード例 #4
0
    private void SetToGrabAnchor(GrabSensor.GrabInfo grab)
    {
        transform.rotation = grab.hand.rotation * Quaternion.Inverse(grabAnchor.localRotation);
        transform.position = grab.hand.position + Vector3.Scale(grabAnchor.localPosition, transform.lossyScale);

        Rigidbody[] rigids = GetComponentsInChildren <Rigidbody>();
        for (int i = 0; i < rigids.Length; ++i)
        {
            rigids[i].velocity        = Vector3.zero;
            rigids[i].angularVelocity = Vector3.zero;
        }
    }
コード例 #5
0
    void OnSelect(GrabSensor.GrabInfo info)
    {
        if (verbose)
        {
            Debug.LogFormat("Select {0} by {1} and {2} selectAngle = {3}", info.obj, info.left.name, info.right.name, info.selectAngle);
        }

        Renderer renderer = info.obj.GetComponent <Renderer>();

        if (renderer != null)
        {
            oldMaterial       = renderer.sharedMaterial;
            renderer.material = selectMaterial;
        }
    }
コード例 #6
0
    void OnGrab(GrabSensor.GrabInfo info)
    {
        // on grab
        if (verbose)
        {
            Debug.LogFormat("Grabbed {0} by {1} and {2} grabAngle = {3}", info.obj, info.left.name, info.right.name, info.grabAngle);
        }

        currentGrab = info;
        oldLayer    = currentGrab.obj.layer;

        if (currentGrab.IsLeftHand)
        {
            currentAnchor = leftHandAnchor;
        }
        else if (currentGrab.IsRightHand)
        {
            currentAnchor = rightHandAnchor;
        }
        else
        {
            currentAnchor = bothHandAnchor;
        }

        currentAnchor.position = currentGrab.obj.transform.position;
        currentAnchor.rotation = currentGrab.obj.transform.rotation;

        velocityHistory.Clear();
        angularVelocityHistory.Clear();

        Renderer renderer = currentGrab.obj.GetComponent <Renderer>();

        if (renderer != null)
        {
            GameObject.DestroyImmediate(renderer.material);
            renderer.material = grabMaterial;
        }

        currentGrab.obj.layer = LayerMask.NameToLayer("Grabbed");
        currentGrab.hand      = currentAnchor;

        Interactable interact = currentGrab.obj.GetComponent <Interactable>();

        if (interact != null)
        {
            interact.OnGrab(currentGrab);
        }
    }
コード例 #7
0
    void OnDeselect(GrabSensor.GrabInfo info)
    {
        if (verbose)
        {
            Debug.LogFormat("Deselect {0} by {1} and {2} selectAngle = {3}", info.obj, info.left.name, info.right.name, info.selectAngle);
        }

        Renderer renderer = info.obj.GetComponent <Renderer>();

        if (renderer != null)
        {
            GameObject.DestroyImmediate(renderer.material);
            renderer.material = oldMaterial;
            oldMaterial       = null;
        }
    }
コード例 #8
0
 // call before release
 public override void OnRelease(GrabSensor.GrabInfo grab)
 {
     EndInteraction();
     EmitCompleteEvent = true;
 }
コード例 #9
0
 public override void OnGrab(GrabSensor.GrabInfo grab)
 {
     BeginInteraction(grab.hand);
 }
コード例 #10
0
 // call before release
 public virtual void OnRelease(GrabSensor.GrabInfo grab)
 {
     Debug.LogFormat("OnSelected");
 }
コード例 #11
0
    // call after grabbed
    public virtual void OnGrab(GrabSensor.GrabInfo grab)
    {
        SetToGrabAnchor(grab);

        Debug.LogFormat("OnSelected");
    }
コード例 #12
0
 // call before deselected
 public void OnDeselected(GrabSensor.GrabInfo grab)
 {
     Debug.LogFormat("OnSelected");
 }
コード例 #13
0
 public override void OnRelease(GrabSensor.GrabInfo grab)
 {
     IsAttached        = false;
     EmitCompleteEvent = true;
     print("release  ...");
 }
コード例 #14
0
 public override void OnGrab(GrabSensor.GrabInfo grab)
 {
     IsAttached = true;
 }
コード例 #15
0
    void OnRelease(GrabSensor.GrabInfo info)
    {
        if (verbose)
        {
            Debug.LogFormat("Released {0} by {1} and {2} grabAngle = {3}", info.obj, info.left.name, info.right.name, info.grabAngle);
        }

        if (currentGrab != null && currentGrab.obj != null)
        {
            GameObject obj = currentGrab.obj;
            if (currentGrab.obj.GetComponent <Rigidbody>().velocity.magnitude < releaseDelayVelocity)
            {
                Debug.LogFormat("Immediate change layer");
                ChangeLayer(currentGrab.obj, oldLayer);
            }
            else
            {
                StartCoroutine(DelayChangeLayer(currentGrab.obj, releaseDelay, oldLayer));
            }

            //Vector3 velocityTarget = Vector3.zero;
            //Vector3 angularTarget = Vector3.zero;
            //for( int i = 0; i < velocityHistory.Count; ++i )
            //{
            //    velocityTarget += velocityHistory[i];
            //    angularTarget += angularVelocityHistroy[i];
            //}
            ////velocityTarget /= velocityHistory.Count;
            ////angularTarget /= velocityHistory.Count;
            //ApplyVelocity(obj.GetComponent<Rigidbody>(), velocityTarget, angularTarget);

            Vector3 maxVelocity        = Vector3.zero;
            Vector3 maxAngularVelocity = Vector3.zero;
            GetMaxVelocityInHistroy(out maxVelocity, out maxAngularVelocity);
            lastMaxVelocity         = maxVelocity;
            lastMaxVelocityPosition = obj.transform.position;

            Rigidbody rb = obj.GetComponent <Rigidbody>();
            ApplyVelocity(rb, maxVelocity, maxAngularVelocity);

            if (rb.useGravity == true)
            {
                // additional force by last several cached positions
                float curveLength = 0.0f;
                if (positionHistory.Count > 0 && positionHistory.Count - ignoreFrameCount > 0)
                {
                    for (int i = 1; i < positionHistory.Count; ++i)
                    {
                        curveLength += (positionHistory[i] - positionHistory[i - 1]).magnitude;
                    }
                    Vector3 forceDir = positionHistory[positionHistory.Count - 1] - positionHistory[positionHistory.Count - 2];
                    rb.AddForce(forceDir.normalized * curveLength * positionMagic, ForceMode.VelocityChange);
                    positionHistory.Clear();
                }
            }

            // restore object material
            Renderer renderer = currentGrab.obj.GetComponent <Renderer>();
            if (renderer != null)
            {
                GameObject.DestroyImmediate(renderer.material);
                renderer.material = oldMaterial;
                oldMaterial       = null;
            }
        }
        currentGrab = null;
    }
コード例 #16
0
 // call before release
 public override void OnRelease(GrabSensor.GrabInfo grab)
 {
     EndInteraction();
 }