Exemplo n.º 1
0
    private void FixedUpdate()
    {
        float angleWithMinLimit = Mathf.Abs(hinge.angle - hinge.limits.min);
        float angleWithMaxLimit = Mathf.Abs(hinge.angle - hinge.limits.max);

        //Reached Min
        if (angleWithMinLimit < angleBetweenThreshold)
        {
            if (hingeJointState != HingeJointState.Min)
            {
                OnMinLimitReached.Invoke();
            }

            hingeJointState = HingeJointState.Min;
        }
        //Reached Max
        else if (angleWithMaxLimit < angleBetweenThreshold)
        {
            if (hingeJointState != HingeJointState.Max)
            {
                OnMaxLimitReached.Invoke();
            }

            hingeJointState = HingeJointState.Max;
        }
        //No Limit reached
        else
        {
            hingeJointState = HingeJointState.None;
        }
    }
Exemplo n.º 2
0
    public override void ProcessInteractable(XRInteractionUpdateOrder.UpdatePhase updatePhase)
    {
        base.ProcessInteractable(updatePhase);

        float angleToMinLimit = Mathf.Abs(hinge.angle - hinge.limits.min);
        float angleToMaxLimit = Mathf.Abs(hinge.angle - hinge.limits.max);

        if (angleToMinLimit < threshold)
        {
            if (hingeJointState != HingeJointState.Minimum)
            {
                onMinimumLimitHit.Invoke();
            }
            hingeJointState = HingeJointState.Minimum;
        }
        else if (angleToMaxLimit < threshold)
        {
            if (hingeJointState != HingeJointState.Maximum)
            {
                onMaximumLimitHit.Invoke();
            }
            hingeJointState = HingeJointState.Maximum;
        }
        else
        {
            hingeJointState = HingeJointState.InBetween;
        }
    }