Transform Constraints
UXTools provides a mechanism to implement and apply transform constraints to actors during manipulation. All you need to do is inherit from UUxtManipulatorComponent, as UUxtGenericManipulatorComponent and UUxtBoundsControlComponent for example.
Usage
In order to use constraints:
- Add any desired
UxtTransformConstraint-derived components to the actor. - Add any
UUxtManipulatorComponent-derived components to the actor, such asUUxtGenericManipulatorComponentandUUxtBoundsControlComponent.
Each UUxtManipulatorComponent will apply all constraint components in the actor if bAutoDetectConstraints is set to true. Otherwise, you can fill the SelectedConstraints array to choose which constraints you'd like that component to apply during its interaction.
Implicit scale
There's an implicit constraint which doesn't inherit from UxtTransformConstraint and is applied by all UUxtManipulatorComponents. The reason for that is preventing their scales from reaching 0 or even negative values. Besides that, UUxtBoundsControlComponent avoids having interaction issues with its handles when the scale is too small.
The MinScale and MaxScale properties give you flexibility to configure this behavior within reasonable values, clamped to prevent the unexpected results previously mentioned.
Use bRelativeToInitialScale to configure whether the limits are relative to the scale at interaction start (true) or absolute (false).
In the following example, MinScale is set to 0.3:

Built-in constraint components
There are a few built-in constraint components, which will hopefully save you from having to write your own.
UxtFaceUserConstraint
Makes the actor face the camera while interacting with it.
Set bFaceAway to true to make the object face away from the camera.

UxtFixedDistanceConstraint
Makes the actor stay at a fixed distance from the camera.
| With | Without |
|---|---|
![]() |
![]() |
UxtFixedRotationToUserConstraint
Makes the actor maintain the same rotation (relative to the user) that it had when the interaction started.
Set bExcludeRoll to false to allow rolling of the actor.

UxtFixedRotationToWorldConstraint
Makes the actor maintain the same rotation (relative to the world) that it had when the interaction started.

UxtMaintainApparentSizeConstraint
Makes the actor maintain the apparent size (relative to the user) that it had when the interaction started.

UxtMoveAxisConstraint
Limits movement on specific axes. Use the ConstraintOnMovement bit mask of EUxtAxisFlags.

(Example limiting the movement along the X and Z axes)
UxtRotationAxisConstraint
Limits rotation on specific axes. Use the ConstraintOnRotation bit mask of EUxtAxisFlags.

(Example limiting the rotation around the X and Y axes)
Adding more constraint components
If none of the Built-in constraint components suits your needs, you can add more by simply creating a new UCLASS that inherits from UxtTransformConstraint. Then, provide implementations for GetConstraintType, ApplyConstraint and (optionally) Initialize.
In this case, please feel free to take a look at our contributing docs and make a suggestion!

