コード例 #1
0
        private ConfigurableJoint SetupStabJoint(HVRStabbableSettings settings, Transform tip, Rigidbody otherRB)
        {
            var joint = Rigidbody.gameObject.AddComponent <ConfigurableJoint>();

            joint.autoConfigureConnectedAnchor = false;
            joint.axis          = StabLineLocal.normalized;
            joint.secondaryAxis = HVRUtilities.OrthogonalVector(joint.axis);

            joint.yMotion        = ConfigurableJointMotion.Locked;
            joint.zMotion        = ConfigurableJointMotion.Locked;
            joint.angularXMotion = ConfigurableJointMotion.Locked;
            joint.angularYMotion = ConfigurableJointMotion.Locked;
            joint.angularZMotion = ConfigurableJointMotion.Locked;

            //if (IsDualStabber || CanRunThrough)
            //{
            //    joint.xMotion = ConfigurableJointMotion.Free;
            //}
            //else
            {
                joint.anchor  = tip.localPosition;
                joint.xMotion = ConfigurableJointMotion.Limited;
            }

            var limit = joint.linearLimit;



            if (settings.LimitStabDepth)
            {
                limit.limit = settings.StabDepthLimit;
            }
            else
            {
                limit.limit = Length; //using world because local magnitude is affect by scaled objects
                if (IsDualStabber || CanRunThrough)
                {
                    limit.limit += .3f;
                }
            }

            joint.linearLimit = limit;

            joint.connectedBody = otherRB;
            if (joint.connectedBody)
            {
                joint.connectedAnchor = joint.connectedBody.transform.InverseTransformPoint(tip.position);
            }
            else
            {
                joint.connectedAnchor = tip.position;
            }
            return(joint);
        }
コード例 #2
0
ファイル: HVRStabTracker.cs プロジェクト: CeMSIM/CeMSIM-ORSim
        private bool CheckUnstab()
        {
            if (_stabbedTime < Stabber.Settings.UnstabDelay)
            {
                _stabbedTime += Time.deltaTime;
                return(false);
            }

            var tipCheck = !_tipValid && _entryToTip.magnitude > _unstabThreshold;

            if (tipCheck)
            {
                return(true);
            }

            var point = HVRUtilities.FindNearestPointOnLine(_tip.position, _base.position, StabEntryPosition);
            var line  = StabEntryPosition - point;

            if (line.sqrMagnitude > Stabber.Settings.PerpendicularThreshold * Stabber.Settings.PerpendicularThreshold)
            {
                if (Stabber.VerboseDebugging)
                {
                    Debug.Log($"{Stabber.name} -> {Stabbable?.name} unstabbed at d {line.magnitude}.");
                }

                return(true);
            }

            if (Stabber.DrawGizmos)
            {
                Debug.DrawLine(point, StabEntryPosition, Color.red);
            }

            if (Stabber.IsDualStabber || Stabber.CanRunThrough)
            {
                var baseCheck = !_baseValid && _exitToBase.magnitude > _unstabThreshold;
                if (baseCheck)
                {
                    return(true);
                }
            }

            return(false);
        }