> 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/platform-documentation/creation/unreal-development/getting-started/creating-your-own-character/configuring-your-pawn-set.md).

# Configuring your pawn set

### What is a Pawn Set?

Your pawn set is responsible for determining what "physical representation" your character has at different rendering "LOD Levels" (what we call "Render Targets"). In most cases, this means configuring the `Actor` that is used when the player is nearby, and the configuration of the "crowd" (see [Crowd Rendering](/platform-documentation/creation/unreal-development/features-and-tutorials/the-animated-crowd.md)) used for distant actors.

More details on these "Render Targets" in [Morpheus Render Targets](/platform-documentation/creation/unreal-development/getting-started/networking/morpheus-render-targets.md)

<figure><img src="/files/1isNPnAiqO8zG1BZq9pf" alt=""><figcaption><p>A demonstration of the difference between render targets. In this example, there are 3 characters in the world (so 3 <code>BPM_M2Example_PlayerCharacter</code>s), but only 2 render target actors (<code>BP_M2Example_PlayerCharacter</code>). This because we have set the "NumInLOD0" to 1, meaning that other than yourself, only one other character will be a render target actor, and any past that point will be represented in the crowd.</p></figcaption></figure>

The following image is of our default pawn set: `DA_Pawns`. The main things to bear in mind here are:

* `OverrideAuthPawnClass`: If this is set, your local character will use this class as the Pawn. If no override is set, then the asset will fall back to using the `DefaultPawnClass` defined by your active Game Mode.
* `OverrideActorClass`: Similar to the above, but for nearby (LOD0) characters. Either this class, or the default pawn, will be used as the physical representation of other players near to you in the world
* `Crowd Data`: If you are not running smaller experiences (i.e. around 30 players or fewer), this will be needed to configure the distant actors (the crowd). This can largely be left as the default, except for a few conditions, discussed below in [#modifying-your-crowd-data](#modifying-your-crowd-data "mention")

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

(more details in [Character Configuration](/platform-documentation/creation/unreal-development/getting-started/differences-in-unreal-development-workflow/msquared-character-configuration.md#pawn-sets))

### The Pawn Class

Like in traditional Unreal projects, we use the `Pawn` class to represent most players. As mentioned above, the main difference is that for remote characters, we switch between these Render Target Actors, and a "crowd" representation.

We use the pawn class for handling game logic that requires a physical in-game body, e.g. collision or moving the actor through the game world (any networked state needs to be sent through the Morpheus Actor).

If you are using the [Morpheus Base Project](/platform-documentation/creation/unreal-development/getting-started/using-the-template-project.md), `BP_Example_PlayerCharacter` has been made for you.

{% hint style="info" %}
We require your main character to extend from `M2_CharacterBase` at the minimum (a child of `Character`). This is to handle some of our core functionality, such as [Actor Pooling](/platform-documentation/creation/unreal-development/features-and-tutorials/actor-pooling.md)and handling custom avatars' [Capsules and Mesh Transforms](/platform-documentation/creation/unreal-development/features-and-tutorials/avatars/capsules.md). If you are using making other Morpheus Actor render targets, you can go directly from `Actor` or below.
{% endhint %}

{% hint style="warning" %}
**Some important things to note regarding using pawns on the Morpheus Platform**

* We do not advise modifying your `SkeletalMeshAsset` to set your character's visuals. Instead, we use an interoperable avatar system (See [Avatars](/platform-documentation/creation/unreal-development/features-and-tutorials/avatars.md)). To configure your character's model, see [Creating a new character](/platform-documentation/creation/unreal-development/getting-started/creating-your-own-character.md#updating-your-character-avatar)
* The `Anim Class` can be modified, but has some caveats:
  * Animations require some specialise techniques to be compliant with the Animated Crowd. See [Crowd Animation](/platform-documentation/creation/unreal-development/features-and-tutorials/the-animated-crowd/crowd-animation.md)
  * The Anim Class should match the one used by your animated crowd: See [#modifying-your-crowd-data](#modifying-your-crowd-data "mention")
  * Our custom avatar setup requires a specific skeleton to be used (`SKEL_UE5Mannequin`), so this should not be changed if you want to be compatible with our custom avatars.
  * For these reasons, if you do want to change your animations, we recommend duplicating `ABP_M2_Human`, and using it as a starting point.
    {% endhint %}

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

### Modifying your Crowd Data

The default `DA_SkeletalCrowdData_LoD1` should be fine for most use cases. Regarding the current properties, and the conditions in which they could be changed:

* `Skeleton`: We advise leaving this unchanged.
* `CrowdAnimInstance`: This should be changed if you change the `Anim Class` used by your pawn. It doesn't have to match, but generally makes the most sense to match, to ensure animations are consistent.
* `AnimNameToSequence`: This is a mapping of animation montages that can run on the animated crowd. The can be triggered via e.g. `JM_MontageComponent::PlayMontageByName(MontageName)`. If you want to add montages that you expect to play on the crowd, they will need to be added here.
* `NumCustomDataFloats`/`NumCustomDataFloatsPerMesh`: Intended only for specialist use. We advise leaving these unchanged.

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

### How do you apply a Pawn Set?

* There is the following helper function that can be called on your Morpheus Actor: `ApplyPawnSet`.
  * This will apply the config above to your local Morpheus Actor, providing e.g. the right auth pawn, LOD0 render target actor, and crowd details.
  * As mentioned above, if the "Override" fields are left blank, it will instead set to the `DefaultPawnClass` provided in your Game Mode (see [Creating a new character](/platform-documentation/creation/unreal-development/getting-started/creating-your-own-character.md#setting-up-your-game-mode))
  * NOTE: This operation is only done locally, so `ApplyPawnSet` will need to be called on every machine.
* We also have a `Default Pawn Set`, defined in your project settings.

  * This can be obtained via the `GetDefaultPawnSet` helper function. (It returns a soft asset reference, so will need to be loaded via e.g. `JunoAsyncLoadAsset`).

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

This is done already for you in `BPM_Example_PlayerCharacter`, due to the following logic in the parent class: `BPM_M2Example_PlayerCharacter`:

<figure><img src="/files/YBDSsxZbSaMPeQdZfPVR" alt=""><figcaption><p>Our example/default behavior: at the start of the game, every character (on every machine), loads the default pawn set, and applies it to themselves. Our default pawn set (<code>DA_Pawns</code>) has no override classes. This will therefore set them up to use the default pawn from the game mode.</p></figcaption></figure>


---

# 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/platform-documentation/creation/unreal-development/getting-started/creating-your-own-character/configuring-your-pawn-set.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.
