> For the complete documentation index, see [llms.txt](https://docs.otherside.xyz/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.otherside.xyz/odk-docs/characters/creating-a-custom-character/creating-a-simple-avatar-collection/further-testing.md).

# Further Testing

It is a good idea to test how your avatar is going to work in the Otherside by setting up a small test scene to preview some animations.

In order to do this we are going to:

* Create a new ODK project
* Create a new blueprint that will
  * Load a GLB into the ODK at runtime
  * Apply animations

Let's start by creating a new project. Start the ODK Launcher and make sure you are on the `Templates` Tab.

<figure><img src="/files/sjhgHELEnBxleHWMB5wt" alt=""><figcaption></figcaption></figure>

Once in the project use the Content Browser to navigate to the map called `Empty_P`, double click on the icon to open the map.

<figure><img src="/files/Zrh1PPaLE1iV2HGNra3Z" alt=""><figcaption></figcaption></figure>

Create a new folder called `Blueprints` at the root of the content folder.

<figure><img src="/files/NWZt4Hsnj8oBUCoocTBk" alt=""><figcaption></figcaption></figure>

Right click in the empty window to and click `Blueprint Class`.

<figure><img src="/files/eWvAuEFj99f5nomrrgkX" alt=""><figcaption></figcaption></figure>

Select `Actor`

<figure><img src="/files/f34pp7Fh2mFf6mWezzOI" alt=""><figcaption></figcaption></figure>

Name the blueprint `BP_AvatarPreview` and then double click on the blueprint icon to open up the editor. Once in the editor change the visible tab to `EventGraph`

<figure><img src="/files/vtf9y4s1az183RkhtZhR" alt=""><figcaption></figcaption></figure>

Press the `+` next to Variables to add a new variable called `Animations`

<figure><img src="/files/ax1eiceHW5iuzpwYng9C" alt=""><figcaption></figcaption></figure>

Change the type to `Animation Asset`

<figure><img src="/files/zpJXyAceoaANUc6CbzrE" alt=""><figcaption></figcaption></figure>

Make the variable public by toggling the eye next to it.

<figure><img src="/files/OF8W2ZWD8DAU5MACM0m6" alt=""><figcaption></figcaption></figure>

With the variable still selected in the details panel on the right update the variable type to be `Array`.

<figure><img src="/files/2cg20z6D1bH4hEoLz4At" alt=""><figcaption></figcaption></figure>

We are going to add two more variables:

* `GLB Path`
  * Type - File Path - Single
  * Public
* `Spacing`
  * Type - Float - Single
  * Public The Variables section should now look like:

<figure><img src="/files/nNbHbZ6KGZwgAIyKzxqd" alt=""><figcaption></figcaption></figure>

In the EventGraph press `tab` to add a node `glTF Load Asset from Filename`

<figure><img src="/files/ypq3l3FTcIeRSYXJv13z" alt=""><figcaption></figcaption></figure>

Drag and drop `GLB path` from the Variables panel into the Event Graph and select `Get GLB Path`

<figure><img src="/files/5HiHCVjj9P47LcQZMA3o" alt=""><figcaption></figcaption></figure>

Right Click on the GLB Path pin and click `Split Struct Pin`

<figure><img src="/files/V7oEW9koZgwXDrlrsKBI" alt=""><figcaption></figcaption></figure>

Now you can connect the pin on GLB Path to the file name on the Load Asset from Filename node.

<figure><img src="/files/odXrxiPgNOvHc34en7eS" alt=""><figcaption></figcaption></figure>

The next node we will be adding is the `Load Skeletal Mesh Recursive` node. You will have to uncheck the `Context Senstive` checkbox in the top right hand corner of the node search window to find it.

<figure><img src="/files/wV1kbBAtdzwSZ35xLRNC" alt=""><figcaption></figcaption></figure>

Connect the pins as shown in the images below to the Load Asset node.

<figure><img src="/files/oHM9ZgF6zGHwJyRBbrGT" alt=""><figcaption></figcaption></figure>

Pull a connection out from the `Loader Config` Pin on the `glTF Load Asset from Filename`. Reenable the `Context Sensitve` check box and scroll to the bottom and select `Make GlTFRuntime Config`.

<figure><img src="/files/lLw0qbyeKMU95pT9VErW" alt=""><figcaption></figcaption></figure>

In the dropdown for `Transform Base Type` choose `YForward`

<figure><img src="/files/MggVsVkjvNHEcOxQRO2u" alt=""><figcaption></figcaption></figure>

Press the down arrow at the bottom of the `Load Skeletal Mesh Recursive` node and drag out a connection from the `Skeletal Mesh Config` Pin. Scroll to the bottom and select `Make GlTF Runtime Skeletal Mesh Config`

<figure><img src="/files/yW5XQYNxr6NbPVjU0Ale" alt=""><figcaption></figcaption></figure>

From the `Skeleton` dropdown select `SKEL_UE5Mannequin`

<figure><img src="/files/9Doei3yl9lSzXw3yDYwC" alt=""><figcaption></figcaption></figure>

From the Variables panel drag `Animations` out to the Event Graph and select `Get Animations`.

<figure><img src="/files/XaqKETopSqwC6zxJuUjU" alt=""><figcaption></figcaption></figure>

From the Pin on `Animations` pull off a connection and then select `For Each Loop`.

<figure><img src="/files/fwXTPinDPS8p9UhimH0v" alt=""><figcaption></figcaption></figure>

Connect the Exec pin from load skeletal mesh to the For Loop.

<figure><img src="/files/YBUyVfOBAMe0rp8hDpz2" alt=""><figcaption></figcaption></figure>

Add an `Add Skeletal Mesh Component` Node

<figure><img src="/files/lpNsN67bJR242UPQa6WJ" alt=""><figcaption></figcaption></figure>

Pull a connection off of the `Relative Transform` Pin and select `Make Transform`

<figure><img src="/files/Uw0S9LxHYKDmyfxmtTm1" alt=""><figcaption></figcaption></figure>

Split the `Location` Struct Pin

<figure><img src="/files/GEd7Utt5eHShL9dhOgiN" alt=""><figcaption></figcaption></figure>

Next we are going to multiply the `Spacing` variable by the `Array Index` from our Loop node. We can also connect the `Loop Body` Pin o the Loop node to the Exec Pin of the `Add Skeletal Mesh Component`.

<figure><img src="/files/RxBngKwReiikwi6TKR0P" alt=""><figcaption></figcaption></figure>

If you haven't Compiled the blueprint yet we can do that now and then set a default value of 200.0 for our `Spacing`

<figure><img src="/files/PEbbKvnyaF1f4dWE9PiK" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/ZmnYRBFihL9U95WcMtu9" alt=""><figcaption></figcaption></figure>

On our Skeletal Mesh Component, pull out a connection from the `Return Value` of the `Add Skeletal Mesh Component` node and select \`Set Animation Mode.

In the dropdown for `In Animation Mode` set it to `Use Animation Asset`

<figure><img src="/files/UZYIGxKRQSnXOeSPRNVm" alt=""><figcaption></figcaption></figure>

Also pulling from the `Return Value` of the `Add Skeletal Mesh Component` node add an `Override Animation Data` node, connecting the `In Anim to Play` to the `Array Element` of the for loop.

<figure><img src="/files/k902KEDxmOqXdqCblVZP" alt=""><figcaption></figcaption></figure>

Again pulling a connection from the `Add Skeletal Mesh Component` node add a `Set Skeletal Mesh Asset` with the `New Mesh` Pin connected to the `Return Value` of `Load Skeletal Mesh Recursive`.

<figure><img src="/files/p7VzGqFfm4ZlnDrnjZuf" alt=""><figcaption></figcaption></figure>

Back in our main level editor window, drag and drop the `BP_AvatarPreview` into the level.

<figure><img src="/files/Nf8zFLviM2UahJfrZLgU" alt=""><figcaption></figcaption></figure>

In the details panel in the bottom right of the screen we can an animation by pressing the `+` Next to the `Animations` label.

<figure><img src="/files/gwiNSBUSE6OrhAogeX4p" alt=""><figcaption></figcaption></figure>

For our first test animation I am just going to add a Range of Motion or ROM animation sequence.

<figure><img src="/files/i7NddOQ5fpwLaRmajB0H" alt=""><figcaption></figcaption></figure>

Next we can click on the three dots next to the GLB Path field to select the GLB we downloaded from the avatar web tool.

Once that has been entered press the green arrow at the top of the level editor to preview.

<figure><img src="/files/LwcilWWCu6LAqHu8MobG" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/Gjg0W9fjiQoQ2hm8u3AJ" alt=""><figcaption></figcaption></figure>

We can add more animations to the the `Animations` list to be able to preview many animations at once. Using emotes is a good way to test extreme poses.

<figure><img src="/files/Ry8aRJTq9rhdP2tWFSPF" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/swO46nP9oXELiLILalHZ" alt=""><figcaption></figcaption></figure>

We have successfully brought a character the whole way from nothing to a properly scaled working avatar for the Otherside. Now as we make small tweaks we can quickly see them represented in our test scene by replacing the file that the test scene is referencing.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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, and the optional `goal` query parameter:

```
GET https://docs.otherside.xyz/odk-docs/characters/creating-a-custom-character/creating-a-simple-avatar-collection/further-testing.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
