LogoLogo
API Status
  • 👋Welcome
  • 🌐What is Morpheus Platform?
    • Interoperability
  • â„šī¸Help
    • 📗Glossary
    • 🆘Support
    • Firewall problems
    • EULA
  • CREATION
    • 🎮Unreal Development
      • ⚡Get Started
        • âš’ī¸Download the Editor
        • âĢUpload Content
        • 🌎Creating your own map
        • 📝Morpheus Base Project
        • ❓Differences from Unreal
          • 🧍Character Configuration
        • 📡Morpheus Networking
          • Introduction to Morpheus Networking
          • Network Levels
          • Replicated Properties
          • RPCs
          • Morpheus Render Targets
          • Morpheus Array
          • Networking FAQ
          • Replicating Sublevels
      • 📚Features & Guides
        • 📒Example Plugin
          • Nameplates
          • In-game roles
          • Resizing
        • 🏊Actor Pooling
        • 🔊Audio
        • 🎭Avatars
          • Creating an Avatar
          • Attachments
            • MML Attachments
          • Custom Animation Variables
          • Importing an NFT collection
          • Capsules and Mesh Transforms
        • 🤖Bots
        • đŸŽ™ī¸Chat
          • Unreal Text Chat
        • đŸŽ›ī¸Control Panels
          • Control Panel Configuration
          • DJ booth mission control
          • Observer Controls
        • 🔉Crowd Audio
        • đŸ¤ŧCrowd Rendering
          • Legacy Animated Crowd
            • Animated Crowd Console Commands
            • Attaching static meshes to crowd members
          • Crowd Materials
          • Performance Parameters
          • Live Config Settings
          • Crowd Animation
            • Crowd Anim Blueprint
              • User Guide - Crowd Anim Blueprint
              • Reference Guide - ABP Nodes
                • Animation Playback
                • States and State Machines
                • Variables
                • Transitions
                • Special
                • Blends
                • Additional Notes
        • 🍱Helpers & Extras
          • "Instanced Objects" in Blueprints
          • Objects with "world context"
          • Making DataAsset classes
          • Duplicate Objects
          • The Bootflow Subsystem
          • The "Wait For Condition" System
          • Advanced Graphics settings
          • Listening to inputs on UObjects
          • Morpheus UserID
          • World Services
          • M2Extras: Skins System
        • đŸ–Ĩī¸Loading Screen
        • ⚡Live Config
          • Editing for a World
          • Editing Locally
          • Default Settings
          • Accessing via Blueprint
          • Adding New Settings
          • Overriding Defaults
          • Using Arrays
        • 🧊MML
        • đŸ•ēMotion Capture
        • 📡Networking
        • đŸ“ĸNotifications
        • Raycastable Crowd
        • 🌐Singletons
        • 📱Streaming & Multiplatform
          • GFN on mobile
        • đŸ–Ĩī¸UI
          • "UI Mode"
        • đŸ—ƒī¸User Collections
          • Creating a New Object Definition
          • Accessing from Unreal
            • Creating Objects Definitions
            • Transfer Objects
            • User Collection Views
            • Receiving Updates
        • đŸ“ēVideo Players
          • Embedded Video Player
          • Millicast video streaming
            • How to Setup an In-Game Video Stream
            • Picture-in-Picture mode
          • Streaming Video Player
            • How to Setup a URL Video Player
            • Picture-in-Picture mode
        • 🐞Visual Debugging
          • Inspector
        • đŸĒŸWeb UI
        • Online Services
          • KV Store Service
        • 💠Web Requests
          • Http Requests
            • Legacy HTTP Nodes
          • JSON Handling
          • WebSockets
          • Identity Validation
          • Allowed External URLs
          • Walkthrough Example
            • Example Counter Service
        • âœˆī¸World Travel
          • World Travel in the editor
        • Avatar Physics Assets
        • Action Gameplay Helper Components
      • 🔑Workflows
        • â†—ī¸Upgrade the Editor
          • đŸ–Ĩī¸Version History
        • âš™ī¸Editing Project Settings
        • 📈Profiling
        • đŸ§ēMarketplace Importing
        • đŸ› ī¸Extra Workflows
          • Setup Play-in-Editor
          • Setup Local Asset Validation
          • Adding Gameplay Tags
          • Validating Game Assets
          • Custom Connection Modes
          • Connect Editor to a World
          • Common Issues
      • 📚Useful Reading
        • ⭐Best Practices
    • 🌎Worlds
      • 📩Invite Players
        • Setting Role Groups
      • Persistent Worlds
      • Always on Worlds
    • 📅Running events
      • ✅Large scale events - Checklist
      • 👾Anti-Cheat (EAC)
      • 🎮Player Entry
        • 📱React Native
        • Steam
        • đŸ’ģHardware Reqs
      • đŸŽĨBroadcast
        • 📹OBS Integration
      • Failover
      • 🏁Capacity And Queue Management
  • ADMINS
    • đŸ‘ĒAccess Control
      • Adding metaverse contributors
      • Creating a new project
    • 💲Pricing
      • Development Support
      • Included Usage & Overages
      • Cloud Streaming
      • Access Modes
      • War Room Support
      • Platform SLA
    • âš™ī¸Settings
      • đŸ—ƒī¸Projects
  • APIs and Tooling
    • đŸ–Ĩī¸API Reference
      • Accounts
      • Events
      • Key/Value Store
      • Organizations
      • Realtime
      • User Profile
      • World Builder
      • Worlds
    • đŸ’ģTemplate Web App
      • đŸ’ĸModeration
    • Pixel Streaming
    • 🚀Launcher
  • Integrations
    • 📊Analytics
      • Sending events from web
      • 🎮Sending Events from Unreal
    • đŸ’ŦChat
      • 🎮Integrating Pubnub with your Unreal Project
      • Adding Moderation to Chat
Powered by GitBook
On this page
  • How we define the character
  • The main classes
  • Pawn Sets
  • Avatar Scheme Sets
  • Gameplay changes/additional functionality
  • Gait Speed
  • Jump Count

Was this helpful?

  1. CREATION
  2. Unreal Development
  3. Get Started
  4. Differences from Unreal

Character Configuration

PreviousDifferences from UnrealNextMorpheus Networking

Last updated 1 month ago

Was this helpful?

NOTE: This page refers to features that are only available in v27 onwards

There are a few differences from native unreal in how we set up the character that the player uses.

How we define the character

The main classes

We use a Pawn and PlayerController, same as native Unreal, but also define a MorpheusPawnActor, which handles the replication. For more details on this, see Introduction to Morpheus Networking.

Like in native Unreal, these can be controlled via the GameMode.

The core Unreal classes, like Pawn and PlayerController do behave slightly differently when using Morpheus networking. For more details, see .

Pawn Sets

In basic cases, you will only need to modify your Pawn in the GameMode to control which class is used to represent player characters. However, there are some cases where you will need further configuration, which is controlled in the "Pawn Set". This controls all possible render targets used for the Morpheus Actor, including in the animated crowd, and what class is used on other clients.

The main fields to consider:

  • OverrideAuthPawnClass - if one is provided, this will change the pawn used when using the given pawn set, when you are the auth client. Otherwise the DefaultPawnClass in the game mode will be used.

  • LodGroup Bucket - explained in more detail in , this allows you to specify that the given MorpheusActor is "higher priority" than others, and so should e.g. use the LOD0 Actor over other "lower priority" clients, even if they are closer.

  • LOD Levels - this ties in to MSquared's rendering system, and how it supports >1000 player events. A limited number of nearby characters are represented as complete characters (Actor render targets), and ones in the distance are represented by the animated crowd. (For more details, see Crowd Rendering)

    • For now, the only recommended class to change would be the LOD 0 Override Actor Class - this will control what actor is used to represent the nearby other players (if left as None, it will also use the DefaultPawnClass from the game mode).

How to specify the Pawn Set

The pawn set can be controlled in the following places:

  • The default pawn set can be controlled via Project Settings - Engine - M2 Engine Default Pawn Set - Default Pawn Set

    • By default, the pawn set used is DA_Pawns, which has no overrides present, meaning that the LOD0 character used will be that defined in your game mode.

    • From Release v36 onwards, the default pawn set can be obtained via the GetDefaultPawnSet helper function

    • NOTE: This requires that your character implementation applies the pawn set somewhere. This will be done for you in the example assets, but would not be the case if you started from the M2M_CharacterBase code class

  • Manually setting the pawn set, via the ApplyPawnSet helper.

    • NOTE: This is done for the local machine. If you want the pawn set to be updated on all clients, you will need to call this on all clients.

Avatar Scheme Sets

NOTE: This flow is planned to be deprecated in favour of using MML Avatars, or the Avatar System

These are what control the default visuals for your character. We have a number of scheme sets, that can be set for a role from the roles table. If you add AvatarSchemeSet, to the RoleConfigurationOverrides, and specify some entries in the Avatar Scheme Sets list, characters will be randomly created using those definitions:

Gameplay changes/additional functionality

Our default character and controller have some gameplay related additions:

Gait Speed

Instead of defining a single MaxWalkSpeed which controls the grounded move speed, we split the speed into three modes: Walk, Jog and Sprint. This gives us easy out-the-box movement speed control, e.g. starting in Jog, but pressing Shift to enter Sprint mode, or pressing Ctrl to enter Walk mode.

This is controlled via the J_CharacterMovementComponent, on the BP Character.

If you are using the deprecated roles table, you can customize the speed per role, by adding Gait Speeds to the RoleConfigurationOverrides. If no override is provided, it will use the default in the J_CharacterMovementComponent.

Jump Count

Like with native Unreal, the jump count can be controlled via the Jump Max Count field on the character (e.g. setting it to 2 will allow you to double-jump, setting it to 0 will disable jumping).

We also add the Character.JumpMaxCount live config value. This defaults to -1, but if set to a value >= 0, it will override the value in the character, allowing for live enabling/modifying the number of jumps.

🎮
⚡
❓
🧍
LOD Group Buckets
Changes to Core Unreal Classes
The example character sets the pawn set to be the default pawn set on begin play.