Get Started Communicating with the Unreal Engine Visualization Environment
You can set up communication with Unreal Engine® by using the Simulation 3D Message Get and Simulation 3D Message Set blocks:
Simulation 3D Message Get receives data from the Unreal Engine environment.
Simulation 3D Message Set sends data to the Unreal Engine environment.
To use the blocks and communicate with Unreal Engine, make sure you install the Aerospace Blockset™ Interface for Unreal Engine Projects support package. For more information, see Customize 3D Scenes for Aerospace Blockset Simulations.
Simulating models in the 3D visualization environment requires Simulink® 3D Animation™.
Next, follow these workflow steps to set up the Simulink model and the Unreal Engine environment and run a simulation.
Workflow | Description | |
---|---|---|
Set Up Simulink Model to Send and Receive Data | Configure the Simulation 3D Message Get and Simulation 3D Message Set blocks in Simulink to send and receive the cone location from Unreal® Editor. The steps provides the general workflow for communicating with the editor. The Simulation 3D
Message Get and Simulation 3D Message Set
blocks can send and receive these data types:
| |
Set Up Unreal Engine to Send and Receive Data | C++ Workflow: Set Up Unreal Engine to Send and Receive Data | Specific Unreal C++ workflow to send and receive Simulink cone location data.
To follow this workflow, you should be comfortable coding with C++ in Unreal Engine. Make sure that your environment meets the minimum software requirements described in Unreal Engine Simulation Environment Requirements and Limitations. |
Blueprint Workflow: Set Up Unreal Engine to Send and Receive Data | Generalized Unreal Editor blueprint workflow to send and receive Simulink data. | |
Run Simulation | After you set up the Simulink model and Unreal Editor environment, run a simulation. |
Set Up Simulink Model to Send and Receive Data
Step 1: Install Support Package
If you have already downloaded and installed Unreal Engine and the Aerospace Blockset Interface for Unreal Engine Projects support package, go to the next step.
To install and configure the support package, see Customize 3D Scenes for Aerospace Blockset Simulations.
Before installing the support package, make sure that your environment meets the minimum software and hardware requirements described in Unreal Engine Simulation Environment Requirements and Limitations.
Step 2: Set Up Simulink Model
Open a new Simulink model. Connect the blocks as shown.
Step 3: Configure Blocks
Use these block settings to configure blocks to send and receive cone data from the Unreal Editor.
Block | Parameter Settings |
---|---|
Constant |
|
Data Type Conversion |
|
Simulation 3D Scene Configuration |
|
Simulation 3D Message Get |
|
Simulation 3D Message Set |
|
C++ Workflow: Set Up Unreal Engine to Send and Receive Data
Step 4: Open Unreal Editor in Editor Mode
Use the Simulation 3D Scene Configuration block to open the Unreal Editor.
Create an Unreal Engine C++ project. Name it
TestSim3dGetSet
. For steps on how to create C++ project, see the Unreal Engine 5 Documentation.In the Unreal Editor, click the Edit tab in the top left corner. Select Plugins and make sure that the
MathWorks Interface
plugin is enabled. If theMathWorks Interface
plugin is disabled, enable it and restart Unreal Editor, if prompted.Close the Unreal.
If Visual Studio® is not open, open it.
Add the MathWorksSimulation dependency to the
TestSim3dGetSet
project build file.The project build file,
TestSim3dGetSet.Build.cs
, is located in this folder:...\TestSim3dGetSet\Source\TestSim3dGetSet
.In the build file,
TestSim3dGetSet.Build.cs
, edit the line 11 to add the “MathWorksSimulation” dependency:PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "MathWorksSimulation"});
Save the change. In Visual Studio, rebuild the
TestSim3dGetSet
project. Close Visual Studio.Tip
Before rebuilding the project in Visual Studio, make sure that Unreal is not open.
Start MATLAB®. Change the current folder to the location of the Unreal Engine
TestSim3dGetSet
project.In MATLAB, open the project:
editor = sim3d.Editor('TestSim3dGetSet.uproject'); editor.open();
Step 5: Create Actor Class
In the Unreal Editor, from the MathWorksSimulation C++ classes directory, select Sim3dActor.
Right-click and select Create C++ class derived from Sim3dActor.
Name the new Sim3dActor
SetGetActorLocation
. Select Public. Click Create Class.Close the Unreal Editor.
Step 6: Open SetGetActorLocation.h
Visual Studio opens with new C++ files in the project folder:
SetGetActorLocation.h
SetGetActorLocation.cpp
Make sure you close the Unreal Editor.
In Visual Studio, build the solution TestSim3dGetSet
:
In the Solution Explorer, right-click Solution 'TestSim3dGetSet' (2 projects).
Select Build Solution.
After the solution builds, open
SetGetActorLocation.h
. Edit the file as shown.
Step 7: Open SetGetActorLocation.cpp
Open SetGetActorLocation.cpp
and replace the block of
code.
Replacement Code: Set Pointer to Parameter
Replacement Code: Access Actor Tag Name
Additional Code: Read and Write Data During Run Time
Step 8: Build the Visual Studio Project and Open Unreal Editor Using the Block
Press F5 on the keyboard to run the Visual Studio solution TestSim3dGetSet
. The Unreal Editor opens.
Note
In the Unreal Editor, save the current level by clicking Save
Current (located in the top left) and name it
TestMap
. Add this level as default to Project Settings by
clicking on Edit > Project Settings > Maps&Modes. Then select TestMap
as the default value for
the Editor Startup Map and Game Default Map. Close Project Settings to save the
default values.
Step 9: Check Actor
On the World Outliner tab, check that the new instantiated
actor, SetGetActorLocation1
, is listed.
Step 10: Add Mesh
Click on the actor that you created in Step 9: Check Actor.
In the Details panel, click on Add Component to add a mesh to the actor
SetConeLocation1
. ChooseCone
as the default mesh.Find the property tags for actor
SetConeLocation1
. Add a tag by clicking on the plus sign next to 0 Array elements. Name itConeLoc
.
Step 11: Set Cone Location
On the Details tab, click Cone. Set the
cone to X = 0.0
, Y = 0.0
, and Z =
0.0
. Also set the actor Mobility
property to Movable.
Step 12: Set Parent Class and Save Scene
Set the parent class.
Under Blueprints, click Open Level Blueprint, and select Class Settings.
In the Class Options, set Parent Class to
Sim 3d Level Script Actor
.
Save the Unreal Editor scene.
Step 13: Run Simulation
Run the simulation. Go to Run Simulation.
Reference: C++ Functions for Sending and Receiving Simulink Data
Call these C++ functions from Sim3dSetup
, Sim3dStep
, and Sim3dRelease
to send and receive Simulink data.
Blueprint Workflow: Set Up Unreal Engine to Send and Receive Data
Step 4: Configure Scenes to Receive Data
To use the Simulation 3D Message Set block, you must configure scenes in the Unreal Engine environment to receive data from the Simulink model:
In the Unreal Editor, instantiate the
Sim3DGet
actor that corresponds to the data type you want to receive from the Simulink model. This example shows the Unreal EditorSim3DGet
data types.Specify an actor tag name that matches the Simulation 3D Message Set block Signal name parameter.
Navigate to the Level Blueprint.
Find the blueprint method for the
Sim3DGet
actor class based on the data type and size that you want to receive from the Simulink model.For example, in Unreal Editor, this diagram shows that
Read Scalar Integer
is the method forSim3DGetInteger
actor class to receiveint32
data type of size scalar.Compile and save the scene.
Step 5: Configure Scenes to Send Data
To configure scenes in the Unreal Engine environment to send data to the Simulink model:
In the Unreal Editor, instantiate the
Sim3DSet
actor that corresponds to the data type you want to send to the Simulink model. This example shows the Unreal EditorSim3DSet
data types.Specify an actor tag name that matches the Simulation 3D Message Get block Signal name parameter.
Navigate to the Level Blueprint.
Find the blueprint method for the
Sim3DSet
actor class based on the data type and size specified by the Simulation 3D Message Get block Data type and Message size parameters.For this example, the array size is 3. The Unreal Editor diagram shows that
Write Array Float
is the method for theSim3DSetFloat3
actor class that sends float data type of array size 3.Compile and save the scene.
Note
Optionally, for better performance, set Read Array Float Max Num
Elements to Num El
in the Actor Blueprint.
Step 6: Create Blueprint
In the Unreal Editor, create a level blueprint connecting the Get and Set actors.
Set the actor tag values.
Sim3dGetFloat1
— Simulation 3D Message Set block Signal name, SigName parameter value, for exampleConeLocSet
Sim3dSetFloat1
— Simulation 3D Message Get block Signal name, SigName parameter value, for exampleConeLocGet
Set the parent class.
Under Blueprints, click Open Level Blueprint, and select Class Settings.
In the Class Options, set Parent Class to
Sim 3d Level Script Actor
.
In the level blueprint, make the connections, for example:
Step 7: Run Simulation
Run the simulation. Go to Run Simulation.
Run Simulation
After you configure the Simulink model and Unreal Editor environment, you can run the simulation.
Note
At the BeginPlay event, Simulink does not receive data from the Unreal Editor. Simulink receives data at Tick events.
Run the simulation.
In the Simulink model, click Run.
Because the source of the scenes is the project opened in the Unreal Editor, the simulation does not start.
Verify that the Diagnostic Viewer window in Simulink displays this message:
In the Simulation 3D Scene Configuration block, you set the scene source to 'Unreal Editor'. In Unreal Editor, select 'Play' to view the scene.
This message confirms that Simulink has instantiated the vehicles and other assets in the Unreal Engine 3D environment.
In the Unreal Editor, click Play. The simulation runs in the scene currently open in the Unreal Editor.
You can send and receive these data types: double
,
single
, int8
, uint8
,
int16
, uint16
, int32
,
uint32
, boolean
. The code in Step 7: Open SetGetActorLocation.cpp reads single data
type values (or float values) from Simulink.
See Also
ASim3dActor
| Sim3dSetup
| Sim3dStep
| Sim3dRelease
| Simulation 3D
Scene Configuration | Simulation 3D
Message Get | Simulation 3D
Message Set