function
Function syntax
llSetRot(rotation rot// Target rotation.
);- Delay
- 0.2 s
- Energy
- 10
Sets the rotation of the prim to rot. If in a child prim, rot is treated as root-relative; if in the root prim of a non-physical object, rotates the entire object.
Sets the rotation of the prim to rot.
llSetRot(ZERO_ROTATION);Caveats
Section titled “Caveats”- If the prim is attached, then this function offsets the rotation by the avatar’s rotation.
- If the prim is not the root prim it is offset by the root’s rotation.
- If you are trying to set the rotation of a child prim relative to the root prim then divide the rotation by the root rotation.
- If you are trying to set the rotation of a child prim to a global rotation then you need to divide the global rotation by the root rotation twice.
- It is better to use
llSetLocalRotto set the rotation of child prims, even if you are setting it to a global rotation (just divide by the root rotation in that case). - Alternatively see the Useful Snippets for generalized workarounds that work with llSetPrimitiveParams, llSetLinkPrimitiveParams, and
llSetLinkPrimitiveParamsFast - For small rotation changes, there is an update threshold depending on the time duration between changes. It does not appear to be limited to the 6deg rule any longer.
- For “static objects” (type of pathfinding), the script fails with the error in debug channel:
- “Unable to set prim rotation: object contributes to the navmesh.”
Examples
Section titled “Examples”Drop this script in the root prim of an object to have it rotate in 1 degree increments. Note that it won’t work on child prims if the root is rotated.
11 collapsed lines
rotation rot_xyzq;
default{ state_entry() { vector xyz_angles = <0,1.0,0>; // This is to define a 1 degree change vector angles_in_radians = xyz_angles*DEG_TO_RAD; // Change to Radians rot_xyzq = llEuler2Rot(angles_in_radians); // Change to a Rotation }
touch_start(integer s) { llSetRot(llGetRot()*rot_xyzq); //Do the Rotation... }}Drop this one in a child prim to have it rotate around the world’s Y axis in 1 degree increments. It won’t work in the root if it is rotated.
11 collapsed lines
rotation rot_xyzq;
default{ state_entry() { vector xyz_angles = <0,1.0,0>; // This is to define a 1 degree change vector angles_in_radians = xyz_angles*DEG_TO_RAD; // Change to Radians rot_xyzq = llEuler2Rot(angles_in_radians); // Change to a Rotation }
touch_start(integer s) { llSetRot(llGetRot()*rot_xyzq/llGetRootRotation()/llGetRootRotation()); //Do the Rotation... }}Helper functions
Section titled “Helper functions”//-- These correctly set a global rotation for the root prim in all scenariosllSetLocalRot( rot )llSetPrimitiveParams( [PRIM_ROT_LOCAL, rot] )
//-- These correctly set a global rotation for a child prim in all scenariosllSetLocalRot( rot / llGetRootRotation() )llSetPrimitiveParams( [PRIM_ROT_LOCAL, rot / llGetRootRotation() ] )Known issues
Section titled “Known issues”From the issue templates included by the wiki article:
- SVC-93 (bug): llSetRot and llSetPrimitiveParams (using PRIM_ROTATION) incorrectly implemented for child prims.
See also
Section titled “See also”Functions
Section titled “Functions”llGetRotllGetLocalRotllGetPrimitiveParamsllGetLinkPrimitiveParamsllSetLocalRotllSetLinkPrimitiveParamsFastllTargetOmega
Original wiki source
Some wiki templates and tables need their original context. View this article on the Second Life Wiki. Technical wording and examples are retained from the source; historical guidance may differ from current behavior.