Ejemplo n.º 1
0
        private GameObject TryCreateConstraint(Vector3 worldPoint, RigidBody rb, DofTypes constrainedDofs, string gameObjectName)
        {
            if (rb == null)
            {
                return(null);
            }

            var constraintType = constrainedDofs == DofTypes.Translation ?
                                 ConstraintType.BallJoint :
                                 constrainedDofs == DofTypes.Rotation ?
                                 ConstraintType.AngularLockJoint :
                                 (constrainedDofs & DofTypes.Translation) != 0 && (constrainedDofs & DofTypes.Rotation) != 0 ?
                                 ConstraintType.LockJoint :
                                 ConstraintType.BallJoint;

            var constraintGameObject = Factory.Create(constraintType);

            constraintGameObject.name = gameObjectName;

            var constraint = constraintGameObject.GetComponent <Constraint>();

            constraint.ConnectedFrameNativeSyncEnabled        = true;
            constraint.AttachmentPair.ReferenceObject         = rb.gameObject;
            constraint.AttachmentPair.ReferenceFrame.Position = worldPoint;

            constraint.AttachmentPair.ConnectedObject         = null;
            constraint.AttachmentPair.ConnectedFrame.Position = worldPoint;

            constraint.AttachmentPair.Synchronized = false;

            return(constraintGameObject);
        }
Ejemplo n.º 2
0
        public static GameObject TryCreateConstraint(Ray ray, GameObject gameObject, DofTypes constrainedDofs, string gameObjectName)
        {
            if (gameObject == null || gameObject.GetComponentInParent <RigidBody>() == null)
            {
                return(null);
            }

            var hit = Raycast.Test(gameObject, ray);

            if (!hit.Triangle.Valid)
            {
                return(null);
            }

            ConstraintType constraintType = constrainedDofs == DofTypes.Translation ?
                                            ConstraintType.BallJoint :
                                            constrainedDofs == DofTypes.Rotation ?
                                            ConstraintType.AngularLockJoint :
                                            (constrainedDofs & DofTypes.Translation) != 0 && (constrainedDofs & DofTypes.Rotation) != 0 ?
                                            ConstraintType.LockJoint :
                                            ConstraintType.BallJoint;

            GameObject constraintGameObject = Factory.Create(constraintType);

            constraintGameObject.name = gameObjectName;

            Constraint constraint = constraintGameObject.GetComponent <Constraint>();

            constraint.ConnectedFrameNativeSyncEnabled        = true;
            constraint.AttachmentPair.ReferenceObject         = hit.Triangle.Target;
            constraint.AttachmentPair.ReferenceFrame.Position = hit.Triangle.Point;

            constraint.AttachmentPair.ConnectedObject         = null;
            constraint.AttachmentPair.ConnectedFrame.Position = hit.Triangle.Point;

            constraint.AttachmentPair.Synchronized = false;

            return(constraintGameObject);
        }