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); }
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); }