Unreal Engine & Blueprints / Unreal Engine
Moving and Rotating Assets with Blueprints in Unreal Engine 4
Legacy TutorialWritten guide
This tutorial is part of the CGI Nerd archive. Some software features, interfaces, or workflows may have changed since it was recorded.

Playing loads YouTube content. YouTube processes data after activation.
Watch on YouTubeIf the player is blocked or unavailable, use Watch on YouTube.
Rotate a mesh and move it back and forth with a small Blueprint graph. The lesson begins with an increment on Event Tick, adds translation and then uses two boundary tests to reverse the movement direction. Its troubleshooting also exposes a coordinate-space problem: world values are being fed into a relative-transform setter.
The title identifies Unreal Engine 4; the exact minor version is unverified. A previously made low-poly planet is the example mesh, but the logic does not depend on its appearance. The recorded graph is a basic motion demonstration, with frame-rate dependence and parent-transform assumptions that need attention before reuse.
Target the mesh component and expose the transform fields
At 01:01, create an Actor Blueprint and add the existing planet mesh. Use Event Tick to drive the update.
At 02:01, choose Set Relative Transform for that mesh component. The instructor initially chooses Reset by mistake, then replaces it with the setter. Confirm both the operation and its target: resetting a transform is different from assigning the values calculated by the graph.
At 03:00, split the transform input and then its rotation field so the individual channels are visible. This makes the intended update easier to inspect, but also exposes values that must remain deliberate. Assigning a complete transform can change location, rotation and scale, not just the one channel currently being edited.
Add a yaw increment and understand its time basis
At 04:06, get the mesh’s world rotation, split it and identify Yaw as the channel used for the spin. At 05:09, add 1 and feed that result into the corresponding rotation input. Place the Blueprint in the level, compile and play to see continuous rotation.
That is one increment per tick, not one degree per second. Epic’s UE4 Event Tick documentation identifies Delta Seconds as the elapsed time between frames. A time-based version would scale a rate by that elapsed time; the recording does not make that change.
Consequently, the source’s apparent speed should not be treated as invariant across frame rates. This distinction is a technical qualification of the recorded method, not a claim that a corrected time-based graph was demonstrated.
Add Y movement and diagnose the world/relative mismatch
At 06:00, split Location into X, Y and Z, get the world location and add an increment to Y. At 07:02, the first test sends the object unexpectedly far away.
At 08:02, the instructor traces the problem to the Blueprint instance’s existing X and Z placement being fed through the graph. Removing those world-location connections and using zero for the relative X and Z values produces the intended local movement in this scene.
The underlying distinction is important: Set Relative Transform assigns the component’s transform relative to its parent. A world-space value is not automatically a parent-relative value. Zeroing a relative channel does not universally preserve an arbitrary existing offset; it places that channel at zero relative to the parent.
The source still mixes world getters with a relative setter for other channels. It therefore does not establish a general solution for translated, rotated or scaled parents. Before adapting the idea, choose a consistent coordinate space and inspect the complete transform being assigned. The article preserves the observed local fix without presenting it as a complete world-to-local conversion.
Reverse a stored movement increment at the boundaries
At 09:02, add a Branch to inspect the Y value used by the movement calculation. Compare it with the upper bound of 100 using greater than or equal to.
At 10:02, create a float named for movement speed and use it instead of the literal translation increment. Compile and give it a default of 1. In this graph it is a signed displacement per tick, despite the informal “speed” label.
When the upper comparison is true, set that variable to its current value multiplied by −1. A positive increment becomes negative, so subsequent updates move the object back in the other direction. The captions briefly say “one” while discussing the threshold, but the earlier setup and final description establish the intended upper bound as 100.
At 12:04, the first test returns from the upper bound but continues indefinitely because there is no lower-bound rule yet. From the first Branch’s False output, add a second Branch. At 13:03, compare the same Y value with −100 using less than or equal to and use its True output to perform the same sign reversal.
Between the two boundaries, neither branch changes the stored increment. At an extreme, the sign change redirects later movement. The final play test shows the mesh moving back and forth while rotating.
Keep the demonstrated result within its tested assumptions
The source demonstrates a small increment and a particular scene placement. It does not clamp the position at the boundary, compensate for overshoot or restrict reversal to motion toward that boundary. Repeated sign flips are therefore a risk if an adapted setup remains beyond a limit for multiple updates.
For a technical review, inspect three things separately: coordinate space, elapsed-time handling and boundary behavior. Test a changed parent transform, different frame rates and larger movement increments rather than assuming the basic preview covers them. No collision-aware movement, sweep behavior or production motion controller is demonstrated here.
The transferable lesson is the data flow: read the current state, calculate a new value, assign it, compare against a limit and change the direction state when appropriate. The recorded graph illustrates that pattern while leaving these implementation limits explicit.