Unreal

Introduction

Planetary Processing provides a plugin for Unreal Engine 5. The plugin consists of a number of C++ classes for use in connecting players to your game simulation, as well as communicating simulation state to your game client and messages from the client to your simulation.

Pre-requisites

  • Unreal Engine 5.4+

  • macOS or Windows, the PP Unreal plugin does not currently support Linux.

Installation

To install the Planetary Processing plugin, clone the repository into the Plugins directory of your Unreal Engine project.

git clone https://github.com/Planetary-Processing/unreal-sdk Plugins/PlanetaryProcessing

You can now enable the Planetary Processing plugin for your Unreal Engine 5 project. You will be required to restart the engine once you enable the plugin.

Classes

PlanetaryProcessing Class

This class is the core of the Planetary Processing plugin. It handles initialization, connection to the server, authentication, message sending, and state updates from the server. This class is intended to be used as a singleton, and instantiated via the Init static function.

Properties

Functions

Delegates

Entity Class

This class represents an entity in the Planetary Processing system.

Properties

Functions

EntityActor Class

This class extends the Unreal Engine Actor class and represents an Actor in your game client that has been spawned based on an Entity from your game simulation. You are intended to subclass Entity Actor to create Actors for each of your Entity types. As an example, a Tree class may be an Entity Actor with a mesh component, while a Cat class may be an Entity Actor with a different mesh component and some custom behaviours.

The EntityActor class is intended to have an Entity associated with it once created, via SetEntity. With this set, the EntityActor class will automatically broadcast OnUpdated and OnRemoved events accordingly as the Entity it is associated with is either updated or removed.

Properties

Functions

MessageData Class

The MessageData class in is designed to serve as a flexible container for arbitrary data, akin to JavaScript objects. Its primary purpose is twofold:

  • Deserialization from JSON: It allows data received from the server in JSON format to be efficiently parsed and stored in a way that can be accessed within Unreal Engine. This ensures that arbitrary data stored on each Entity (strings, numbers, booleans, arrays and nested objects) can be translated into native Unreal Engine data structures.

  • Serialization to JSON: Conversely, the class enables the construction of arbitary data structures which can be serialized and sent to the server as the body of the message in a SendMessage call.

This is particularly useful when using Blueprints to both access data on Entity instances and also when constructing messages for SendMessage. Should you want to handle serialization and deserialization yourself, the original JSON of an Entity is available in the DataJSON property and raw JSON messages can be sent using the SendJSONMessage function of the PlanetaryProcessing, so MessageData is entirely optional.

Functions

Blueprints

The Planetary Processing plugin is packaged with a number of example Blueprints. These serve to show how to carry out some basic functions using the Planetary Processing plugin.

PP_ExamplePlayerController

This blueprint is provided to demonstrate how to initialize your Planetary Processing instance and then how to carry out the fundamental processes required to make use of it.

Variables

Authentication

  1. Initializes PlanetaryProcessing singleton with a Game ID (Game ID available in the Planetary Processing Panel)

  2. Creates an instance of PP_ExampleLoginWidget and adds it to the viewport

  3. Binds the following to the OnAuthenticated event from the PlanetaryProcessing singleton 1. Short delay to ensure subsequent bindings are handled by the game thread 2. Remove the login widget from the viewport 3. Unbind all events from OnAuthenticated 4. Set up bindings for OnEntityAdded and OnConnectionError events from the PlanetaryProcessing singleton (see Entity Actor Spawning and Connection Error Handling) 5. Continues with game logic, in this case a custom event named StartGame

Entity Actor Spawning

  1. Looks up the EntityActor class reference in the EntityMap variable using the type from the OnEntityAddedEvent

  2. Uses the GetLocationVector function of the added Entity to create a Vector for the initial location of the EntityActor.

  3. Spawns an instance of the EntityActor

  4. Calls SetEntity on the EntityActor to associate it with the Entity that we are representing

Connection Error Handling

  1. Unbinds all events from OnEntityAdded and OnConnectionError

  2. Calls a custom event called ShowLogin, which feeds back into the authentication flow above

Update Entities

  1. On each tick, check if we are authenticated by calling IsAuthenticated on the PlanetaryProcessing instance

  2. If we are, call the Update function of the PlanetaryProcessing instance to process state changes received

  3. additonal - after this, we also call the SendPlayerCoords custom event (see Send Player Coordinates Message)

Send Player Coordinates Message

  1. Called on each tick (see last step of Update Entities above)

  2. Gets the Location of the Player Pawn Actor

  3. Calls the ConvertVectorToServerCoordsMessageData static function from the PlanetaryProcessing class. This gives us a map of strings to MessageData with the x, y and z values set based on the player position, adjusted to match the Planetary Processing coordinate system

  4. Uses the implicit conversion of a boolean to MessageData as the value for a new key of threedee in our map

  5. Calls SendMessage on our PlanetaryProcessing instance with our message map as an argument

PP_ExampleEntityActor

This blueprint shows how to bind to the OnUpdated and OnRemoved events for an EntityActor.

Event Binding

  1. Binds to the OnUpdated event for the EntityActor. Calls SetActorLocationToEntityCoords to update the Actor's location to match the Entity

  2. Binds to the OnRemoved event for the EntityActor. Destroys the Actor when this event is broadcast

Note: for the actor to move correctly, following the server-side location, the actor must have physics disabled.

PP_ExampleLoginWidget

This is a simple login widget which calls the Connect function and handles errors.

Login Click

  1. Hides the error message (effectively resetting the error state of the login form)

  2. Gets the PlanetaryProcessing singleton instance

  3. Calls the Connect function on the PlanetaryProcessing instance with the username and password from the form

Error Handling

  1. Binds to the OnConnectionError event when the widget is initialized

  2. Sets the error message to be visible when OnConnectionError is broadcast

Last updated