Unreal
Last updated
Last updated
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.
Unreal Engine 5.4+ (Note: the update for Unreal Engine 5.5 is still in development. Please use 5.4).
macOS or Windows, the PP Unreal plugin does not currently support Linux.
To install the Planetary Processing plugin, you must first download the plugin files from our website, you will need to be logged into your Planetary Processing account to do so, the link is:
You'll need then to extract this and move the contents of the lib
directory into a directory called PlanetaryProcessing
in the Plugins
directory at the root level of your project. You'll need to create the Plugins directory if it does not already exist.
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.
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 static function.
There are two stages to authentication: initializing the connection the game server and joining the validated connection's processing.
Initializing the connection:
Event BeginPlay/Show Login -> Init -> Set
Create PP Example Login Widget Widget -> Set -> Add to Viewport
Planetary Processing Instance -> Bind Event to On Authenticated -> OnAuthenticated_Event
Joining a valid connection:
OnAuthenticated_Event -> Delay
A short delay ensures subsequent bindings are handled by the game thread.
Login Widget Instance -> Remove from Parent -> Set
Remove the login widget from the viewport.
Unbind All Events from On Authenticated -> Planetary Processing Instance
Planetary Processing Instance - > Bind Event to On Entity Added -> Bind Event to On Connection Error
Start Game -> Start Game (Custom Event)
Continue with game logic, in this case a custom event named StartGame.
OnEntityAdded_Event -> GetType / Entity Map -> Find
GetLocationVector -> Make Transform
Find / Branch / Make Transfrom -> Spawn Actor
OnEntityAdded_Event / Spawn Actor -> Set Entity
If the connection fails, cease processing the world and return to the authentication login.
OnConnectionError_Event / Planetary Processing Instance -> Unbind All Events from On Entity Added / Planetary Processing Instance -> Unbind All Events from On Connection Error
Show Login -> Show Login Custom Event
Planetary Processing Instance -> IsAuthenticated / Event Tick -> Branch
Branch -> Sequence / Planetary Processing Instance -> Update -> OnUpdated_Event
Sequence -> Send Player Coords -> SendPlayerCoords (Custom Event)
Send Player Coords (Custom Event) -> ...
Get Player Pawn -> Get Actor Location
Get the location of the Player Pawn Actor.
Convert Vector To Server Coords Message Data -> Set
Set / To MessageData (bool) -> Add
Add / Planetary Processing Instance / Set -> Send Message
Event BeginPlay -> Bind Event to On Updated -> OnUpdated_Event -> Set Actor Location to Entity Coords
Bind Event to On Removed -> OnRemoved_Event -> Destroy Actor
For the actor to follow the server-side location, without issue, it must have physics disabled on the clientside.
If you wish to retrieve the location vector of an entity before it is set, you can do so with the following example. Replace the Print String function with functions of your choice. This is useful for smoothing movement on the client side.
OnClicked (Login_Button) / Error Message Text -> Set Visibility
Hide the error message (effectively resetting the error state of the login form) when clicked.
Username / Password -> GetText -> Get Planetary Processing Instance / To String (Text) -> Connect
Event On Initialized -> Get Planetary Processing Instance -> Bind Event to On Connection Error -> OnConnectionError_Event
OnConnectionError_Event / Error Message Text -> Set
GameID
int32
ID of the game. Editable in Blueprints.
UUID
FString
Authenticated player's unique identifier. Read-only in Blueprints.
Entities
TMap<FString, UEntity*>
Map of server entities, reflecting the server state as of the latest update. Read-only in Blueprints.
static Init
int32 InGameID
UPlanetaryProcessing*
Initializes the Planetary Processing singleton with the given game ID. If called again, the existing Planetary Processing instance will be restored to its initial state and returned.
static GetInstance
None
UPlanetaryProcessing*
Gets the singleton instance of the Planetary Processing class.
Connect
const FString& Username, const FString& Password
void
Connects the player to the server with the provided username and password. Broadcasts OnAuthenticated upon successful connection.
Update
None
void
Updates the Entities map by processing state updates that the client has received from the server since the last update. Intended to be called once each game tick such that the Entities map consists of fresh data. Broadcasts OnEntityAdded, OnEntityUpdated and OnEntityRemoved
IsAuthenticated
None
bool
Returns whether the user is authenticated.
IsConnected
None
bool
Returns whether the initial socket connection to the server is active.
SendMessage
const TMap<FString, UMessageData*>& Message
void
Sends a message to the server, using the MessageData format.
SendJSONMessage
const FString& JsonString
void
Sends a JSON message to the server. This can be used if your data is already in JSON format and as such can be sent directly.
Logout
None
void
Logs out and disconnects the player from the server.
static ConvertVectorToServerCoords
const FVector& InVector
TMap<FString, float>
Converts an Unreal Engine Vector into the coordinate system used in Planetary Processing.
static ConvertVectorToServerCoordsMessageData
const FVector& InVector
TMap<FString, UMessageData*>
Converts an Unreal Engine Vector into MessageData with x, y and z values set in the Planetary Processing coordinate system.
OnAuthenticated
None
Fires when player is successfully authenticated.
OnEntityAdded
UEntity* NewEntity
Fires when a new Entity is added to the Entities map. This can be used to spawn a new EntityActor.
OnEntityUpdated
UEntity* UpdatedEntity
Fires when an existing Entity in the Entities map is updated. If an EntityActor has already been spawned based on this Entity, the EntityActor will re-broadcast this as an OnUpdated event.
OnEntityRemoved
const FString& EntityID
Fires when an Entity is removed from the Entities map. If an EntityActor has been spawned based on this Entity, the EntityActor will re-broadcast this as an OnRemoved event.
OnConnectionError
const FString& ErrorMessage
Currently a catch-all for connection related errors, including authentication errors, loss of connection, failure to send messages or failure to parse updates.
ID
FString
The unique identifier of the entity.
X
double
X coordinate of the entity.
Y
double
Y coordinate of the entity.
Z
double
Z coordinate of the entity.
Data
TMap<FString, UMessageData*>
Additional data of the entity.
DataJSON
FString
JSON representation of the additional entity Data.
Type
FString
Type of the entity.
GetLocationVector
None
FVector
Converts the Planetary Processing X, Y and Z coordinates of this entity into a Vector in the Unreal Engine coordinate system
Entity
UEntity*
The entity associated with this actor.
OnUpdated
FOnEntityUpdatedEvent
Delegate called when the entity is updated.
OnRemoved
FOnEntityRemovedEvent
Delegate called when the entity is removed.
SetEntity
UEntity* InEntity
void
Sets the entity for this actor.
SetActorLocationToEntityCoords
None
void
Converts the Planetary Processing X, Y and Z coordinates of the associated Entity into a Vector in the Unreal Engine coordinate system and sets the Actor's location to this Vector
static ConvertBoolToMessageData
bool Value
UMessageData*
Implicit conversion of a boolean value to a MessageData instance.
static ConvertIntToMessageData
int32 Value
UMessageData*
Implicit conversion of an integer value to a MessageData instance.
static ConvertFloatToMessageData
float Value
UMessageData*
Implicit conversion of a float value to a MessageData instance.
static ConvertStringToMessageData
const FString& Value
UMessageData*
Implicit conversion of a string value to a MessageData instance.
static ConvertArrayToMessageData
const TArray<UMessageData*>& Value
UMessageData*
Implicit conversion of an array of MessageData instances to a MessageData instance.
static ConvertObjectToMessageData
const TMap<FString, UMessageData*>& Value
UMessageData*
Implicit conversion of a map of MessageData instances to a MessageData instance.
GetString
None
FString
Returns the stored string value, if type is String.
GetDouble
None
double
Returns the stored double value, if type is Double.
GetInt
None
int32
Returns the stored integer value, if type is Int.
GetBool
None
bool
Returns the stored boolean value, if type is Bool.
GetObject
None
TMap<FString, UMessageData*>
Returns the stored object value, if type is Object.
GetArray
None
TArray<UMessageData*>
Returns the stored array value, if type is Array.
GetActiveType
None
EVariantType
Returns the active variant type of the message data.
SerializeToJson
None
FString
Serializes the message data to JSON format.
static SerializeMapToJson
const TMap<FString, UMessageData*>& Map
FString
Serializes a map of UMessageData to JSON format.
DeserializeFromJson
const FString& JsonString
void
Deserializes JSON string into message data.
PlanetaryProcessingInstance
Planetary Processing Object Reference
Reference to the Planetary Processing singleton.
LoginWidgetInstance
PP Example Login Object Reference
Stores a reference to the Login Widget when it is shown.
LocationMessage
Map<string: Message Data Object Reference>
A message to be used in a call to SendMessage.
EntityMap
Map<string: Entity Actor Class Reference>
Used to map Entity types to the Entity Actor they should spawn. The default values for this variable map both cat and tree to the PP_ExampleEntityActor as a demonstration.
Username
UEditableTextBox
A text box widget for entering a username.
Password
UEditableTextBox
A text box widget for entering a password.
Login_Button
UButton
A button widget for triggering the OnClicked event, to connect to the game server.
ErrorMessageText
UTextBlock
Error text displayed, when a connection fails
This class represents an in the Planetary Processing system. It contains all the of the corresponding entity on your game server. The can be matched up with the class using the variable.
This class extends the Unreal Engine Actor class, spawning an Actor in your game client based on an from your game simulation. You are intended to subclass to create Actors for each of your . As an example, a 'Tree' class could be an for a 'tree' . Meanwhile a 'Cat' class could be a completely different with a separate mesh component and behaviours.
The class is intended to have an associated with it once created, via . With this set, the class will automatically broadcast and events accordingly, as its associated is either updated or removed.
The class 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 update messages 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 the data stored on each (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 arbitrary data structures which can be serialized and sent to the server as the body of the message in a call.
Hence it can be used in to both access data on instances and construct messages for .
If you want to handle serialization and deserialization yourself, without , the original JSON of an is available in the property of that class. Raw JSON messages can also be sent using the function of the class.
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. These blueprints are , , and the .
This blueprint demonstrates how to initialize your instance and then how to carry out the fundamental processes required to make use of it. These include , , , and and .
Initialize the singleton with a Game ID (Game ID available in the ).
Create an instance of and adds it to the viewport.
Bind the connection joining processes to the event triggered from the singleton.
Unbind all events from the event.
Set up bindings to generate the game server world using the and events from the singleton.
Look up the class reference in the variable using the from the .
Use the function of the added to create a Vector for the initial location of the .
If the is valid, spawn an instance of the .
Call on the to associate it with the that we are representing.
If you wish, you can extend the script to remove spawning for the client player entity. This can be done by adding an extra branch to filter entities with the same ID as the instance's . This only removes the player's own entity from the client, not other players.
Unbinds all events from and .
Calls a custom event called , which feeds back into the flow above.
On each tick, check if the connection is authenticated by calling on the instance.
If it is authenticated, call the function of the instance to process state changes received.
We then also call the custom event.
Process the message on each using the broadcast.
Call the static function from the class. This gives us a map of strings to MessageData values, with the x, y and z values set based on the player position. alters these xyz values to match the Planetary Processing coordinate system orientation.
Uses the implicit conversion of a boolean to as the value for a new key of threedee in our map.
Calls on our instance with our message map as an argument.
This blueprint shows how to bind to the and events for an .
Bind to the event for the . Calls to update the Actor's location to match the .
Bind to the event for the . Destroys the Actor when this event is broadcast.
This is a simple login widget which calls the function and displays an error if the connection fails.
Call the function on the instance with the username and password from the login form.
Bind to the event when the widget is initialized.
Set the error message to be visible when is broadcast.