# RotateFromTo Action

This **Node** has different versions for [**Scenes**](/incari-studio/2023.1/objects-and-types/project-objects/scene.md) and [**Scene2Ds**](/incari-studio/2023.1/objects-and-types/project-objects/scene2d.md). Find in the tabs below the documentation for both versions.

{% tabs %}
{% tab title="Scene" %}

#### Overview

![The RotateFromTo Action Node.](/files/jpOZBlkqp9h4Pn7UPtxL)

The **RotateFromTo Action Node** continuously rotates a [**Scene Object**](/incari-studio/2023.1/objects-and-types/scene-objects.md) from the *Euler angles* specified in `From` to those specified in `To` for a given period of time, thus creating an **Animation**.

Furthermore, visit the [**Actions Nodes**](/incari-studio/2023.1/toolbox/actions.md) page for a general introduction to these **Nodes**, and [**Rotation**](/incari-studio/2023.1/objects-and-types/attributes/common-attributes/transformation.md#rotation) for more detail about the `Rotation` **Attribute**.

[**Scope**](/incari-studio/2023.1/toolbox/overview.md#scopes): **Scene**, **Function**, **Prefab**.

#### Attributes

![The RotateFromTo Action Node Attributes.](/files/K4qiMIyuXareTCLDdynU)

| Attribute        | Type          | Description                                                                                                                                                                                                                                                                                                                                     |
| ---------------- | ------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `From`           | **Vector3**   | The *Euler angles* along the X, Y, and Z axes to rotate from, if none are received in the `From` **Input Socket**.                                                                                                                                                                                                                              |
| `To`             | **Vector3**   | The *Euler angles* along the X, Y, and Z axes to rotate to, if none are received in the `To` **Input Socket**.                                                                                                                                                                                                                                  |
| `Duration (sec)` | **Float**     | The total time of the **Action**, if none is received in the `Duration` **Input Socket**.                                                                                                                                                                                                                                                       |
| `Interpolation`  | **Drop-down** | The `Interpolation` method to use for calculating the intermediate values of the *Euler Angles*. It can be [*Linear*](https://en.wikipedia.org/wiki/Linear_interpolation), [*Sine Ease In*](https://easings.net/#easeInSine), [*Sine Ease In Out*](https://easings.net/#easeInOutSine), or [*Sine Ease Out*](https://easings.net/#easeOutSine). |

#### Inputs

| Input         | Type           | Description                                                                                                                                                                        |
| ------------- | -------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `Instance ID` | **InstanceID** | The assigned [**Instance ID**](/incari-studio/2023.1/toolbox/actions.md#instance-id) of the **Action**. If nothing is received, it automatically assigns 0 as the **Instance ID**. |
| (►) `Start`   | **Pulse**      | A standard **Input Pulse**, to trigger the execution of the **Node**.                                                                                                              |
| `Object ID`   | **ObjectID**   | The ID of the target **Object**.                                                                                                                                                   |
| `Duration`    | **Float**      | The total time (in seconds).                                                                                                                                                       |
| `From`        | **Vector3**    | The *Euler angles* along the X, Y, and Z axes to rotate from.                                                                                                                      |
| `To`          | **Vector3**    | The *Euler angles* along the X, Y, and Z axes to rotate to.                                                                                                                        |

#### Outputs

| Output        | Type           | Description                                                                                             |
| ------------- | -------------- | ------------------------------------------------------------------------------------------------------- |
| `Instance ID` | **InstanceID** | The assigned [**Instance ID**](/incari-studio/2023.1/toolbox/actions.md#instance-id) of the **Action**. |
| `OnStart` (►) | **Pulse**      | Flows to the next **Node** following **RotateFromTo Action** when the **Action** starts.                |
| `OnEnd` (►)   | **Pulse**      | Flows to the next **Node** following **RotateFromTo Action** when the **Action** stops.                 |
| {% endtab %}  |                |                                                                                                         |

{% tab title="Scene2D" %}

#### Overview

![The RotateFromTo Action Node.](/files/Wxk5xRp4HFh2XK31urSm)

The **RotateFromTo Action Node** continuously rotates a [**Scene2D Object**](/incari-studio/2023.1/objects-and-types/scene2d-objects.md) from the value specified in `From` to that specified in `To` for a given period of time, thus creating an **Animation**.

Furthermore, visit the [**Actions Nodes**](/incari-studio/2023.1/toolbox/actions.md) page for a general introduction to these **Nodes**, and [**Rotation**](/incari-studio/2023.1/objects-and-types/attributes/common-attributes/transformation.md#rotation) for more detail about the `Rotation` **Attribute**.

[**Scope**](/incari-studio/2023.1/toolbox/overview.md#scopes): **Scene**, **Function**, **Prefab**.

#### Attributes

![The RotateFromTo Action Node Attributes.](/files/N5BuknE9LlEH5kfbLArd)

| Attribute        | Type          | Description                                                                                                                                                                                                                                                                                                                                     |
| ---------------- | ------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `From`           | **Float**     | The value to rotate from, if none are received in the `From` **Input Socket**.                                                                                                                                                                                                                                                                  |
| `To`             | **Float**     | The value to rotate to, if none are received in the `To` **Input Socket**.                                                                                                                                                                                                                                                                      |
| `Duration (sec)` | **Float**     | The total time of the **Action**, if none is received in the `Duration` **Input Socket**.                                                                                                                                                                                                                                                       |
| `Interpolation`  | **Drop-down** | The `Interpolation` method to use for calculating the intermediate values of the *Euler Angles*. It can be [*Linear*](https://en.wikipedia.org/wiki/Linear_interpolation), [*Sine Ease In*](https://easings.net/#easeInSine), [*Sine Ease In Out*](https://easings.net/#easeInOutSine), or [*Sine Ease Out*](https://easings.net/#easeOutSine). |

#### Inputs

| Input         | Type           | Description                                                                                                                                                                        |
| ------------- | -------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `Instance ID` | **InstanceID** | The assigned [**Instance ID**](/incari-studio/2023.1/toolbox/actions.md#instance-id) of the **Action**. If nothing is received, it automatically assigns 0 as the **Instance ID**. |
| (►) `Start`   | **Pulse**      | A standard **Input Pulse**, to trigger the execution of the **Node**.                                                                                                              |
| `Object ID`   | **ObjectID**   | The ID of the target **Object**.                                                                                                                                                   |
| `Duration`    | **Float**      | The total time (in seconds).                                                                                                                                                       |
| `From`        | **Float**      | The value to rotate from.                                                                                                                                                          |
| `To`          | **Float**      | The value to rotate to.                                                                                                                                                            |

#### Outputs

| Output        | Type           | Description                                                                                             |
| ------------- | -------------- | ------------------------------------------------------------------------------------------------------- |
| `Instance ID` | **InstanceID** | The assigned [**Instance ID**](/incari-studio/2023.1/toolbox/actions.md#instance-id) of the **Action**. |
| `OnStart` (►) | **Pulse**      | Flows to the next **Node** following **RotateFromTo Action** when the **Action** starts.                |
| `OnEnd` (►)   | **Pulse**      | Flows to the next **Node** following **RotateFromTo Action** when the **Action** stops.                 |
| {% endtab %}  |                |                                                                                                         |
| {% endtabs %} |                |                                                                                                         |

## Example

This section shows a simple example of how to use the **RotateFromTo Action** **Node** and the effect it has on a **Scene Object**. This concept can be applied as well to a **Scene2D Object**.

We start by [configuring the **Scene**](#scene-configuration), then [build the **Logic**](#logic), and finally show the [result](#final-result).

### Scene Configuration

We consider a [**Scene**](/incari-studio/2023.1/objects-and-types/project-objects/scene.md) with two [**Objects**](/incari-studio/2023.1/objects-and-types/scene-objects.md): a red [**Torus**](/incari-studio/2023.1/objects-and-types/scene-objects/primitives.md#torus) and a [**Directional Light**](/incari-studio/2023.1/objects-and-types/scene-objects/lights.md), both of which can be easily created in the [**Scene Outliner**](/incari-studio/2023.1/modules/scene-outliner.md). Then, we set the `Scale` **Attribute** of the **Torus** to $$(2, 2, 2)$$, its `Rotation` to $$(30, 30, 0)$$, and the `Position` of the **Light** to $$(0, 200, 0)$$. See this configuration in the following image:

![Scene configuration.](/files/p6k6RTxhoybPJL5syY2v)

### Logic

We then need to configure the **Logic**. This is done in the [**Logic Editor**](/incari-studio/2023.1/modules/logic-editor.md).

We use first a [**Get Rotation** **Node**](/incari-studio/2023.1/toolbox/incari/object/get-rotation.md), which allows us to obtain an **Object's** current `Rotation` values, and then the **RotateFromTo Action** **Node**, to which we will feed the value previously obtained and configure it for it to *rotate* the **Object** from there to a fixed value of our choosing.

For this purpose, we set the **Attributes** of the **RotateFromTo Action** **Node** in the following way:

* `To`: $$(60, 60, 0)$$
* `Duration (sec)`: $$2$$
* `Interpolation`: `Linear`

We just leave the `From` **Attribute** as it is, since this value will be obtained through the corresponding **Input Socket**.

Then, we connect the **Object ID** from the red **Torus** [**Object Node**](/incari-studio/2023.1/objects-and-types/scene-objects.md#objects-in-the-logic) to the `Object ID` **Input Socket** of both **Nodes**, the `Rotation` **Output** from the **Get Rotation** **Node** to the `From` **Input Socket** in the **RotateFromTo** **Node**, and a **Pulse** through the **Get Rotation** **Node** and to the `Start` **Input** in **RotateFromTo**. Thus, having the following **Logic** configuration:

![Logic configuration.](/files/HEofyaclzaekg2fVoMqw)

### Final result

Finally, the effect of the **RotateFromTo Action** **Node** when triggered is the following:

![Final result.](/files/y71h4Qf9vWg1ZVYBzc7T)

## See Also

* [**RotateTo Action**](/incari-studio/2023.1/toolbox/actions/rotatetoaction.md)
* [**RotateBy Action**](/incari-studio/2023.1/toolbox/actions/rotatebyaction.md)

## External Links

* [*Rotation*](https://en.wikipedia.org/wiki/Rotation) on Wikipedia
* [*Euler angles*](https://en.wikipedia.org/wiki/Euler_angles) on Wikipedia


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.incari.com/incari-studio/2023.1/toolbox/actions/rotatefromtoaction.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
