Main Content

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:

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: double, single, int8, uint8, int16, uint16, int32, uint32, and Boolean. The Simulation 3D Actor Transform Set and Simulation 3D Actor Transform Get blocks can send and receive only the single data type.

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.

  • Simulation 3D Message Get receives data from an Unreal Engine environment C++ actor class. In this example workflow, you use the block to receive the cone location from Unreal Editor.

  • Simulation 3D Message Set sends data to an Unreal Engine C++ actor class. In this example, you use the block to set the initial cone location in the Unreal Editor.

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.

Simulink model with connected blocks

Step 3: Configure Blocks

Use these block settings to configure blocks to send and receive cone data from the Unreal Editor.

BlockParameter Settings

Constant

  • Constant value[100,10,50]

    Sets the initial cone location in the Unreal Editor coordinate system (in cm, left-handed, in Z-up coordinate system)

  • Interpret vector parameters as 1-Doff

  • Output data typesingle

Data Type Conversion

  • Output data typesingle

Simulation 3D Scene Configuration

  • Scene SourceUnreal Editor

  • ProjectYour_Project_Path\TestSim3dGetSet.uproject

  • Open Unreal Editor — Select to open the editor

Simulation 3D Message Get

  • Signal name, SigNameConeLocGet

  • Data type, DataTypesingle

  • Message size, MsgSize[1 3]

  • Sample time-1

Simulation 3D Message Set

  • Signal name, SigNameConeLocSet

  • Sample time-1

C++ Workflow: Set Up Unreal Engine to Send and Receive Data

Step 4: Open Unreal Editor in Editor Mode

  1. Use the Simulation 3D Scene Configuration block to open the Unreal Editor.

  2. Create an Unreal Engine C++ project. Name it TestSim3dGetSet. For steps on how to create C++ project, see the Unreal Engine 5 Documentation.

  3. 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 the MathWorks Interface plugin is disabled, enable it and restart Unreal Editor, if prompted.

  4. Close the Unreal.

  5. If Visual Studio® is not open, open it.

  6. 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"}); 

  7. 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.

  8. Start MATLAB®. Change the current folder to the location of the Unreal Engine TestSim3dGetSet project.

  9. In MATLAB, open the project:

    editor = sim3d.Editor('TestSim3dGetSet.uproject'); 
    editor.open();

Step 5: Create Actor Class

  1. In the Unreal Editor, from the MathWorksSimulation C++ classes directory, select Sim3dActor.

    Unreal Editor content browser

    Right-click and select Create C++ class derived from Sim3dActor.

    Unreal Editor class actions

  2. Name the new Sim3dActor SetGetActorLocation. Select Public. Click Create Class.

  3. 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:

  1. In the Solution Explorer, right-click Solution 'TestSim3dGetSet' (2 projects).

  2. Select Build Solution.

  3. After the solution builds, open SetGetActorLocation.h. Edit the file as shown.

     Replacement Code: SetGetActorLocation.h

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

 Additional Code: Stop Simulation

 Entire Replacement Code: SetGetActorLocation.cpp

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.

Unreal Editor project settings

Unreal Editor modes tab

Step 9: Check Actor

On the World Outliner tab, check that the new instantiated actor, SetGetActorLocation1, is listed.

Unreal Editor World Outliner tab

Step 10: Add Mesh

Click on the actor that you created in Step 9: Check Actor.

  1. In the Details panel, click on Add Component to add a mesh to the actor SetConeLocation1. Choose Cone as the default mesh.

  2. Find the property tags for actor SetConeLocation1. Add a tag by clicking on the plus sign next to 0 Array elements. Name it ConeLoc.

Unreal Editor add component

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.

Unreal Editor set cone location

Step 12: Set Parent Class and Save Scene

Set the parent class.

  1. Under Blueprints, click Open Level Blueprint, and select Class Settings.

    Unreal Editor Work Outliner tab

  2. In the Class Options, set Parent Class to Sim 3d Level Script Actor.

    Unreal Editor class settings

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:

  1. 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 Editor Sim3DGet data types.

    Unreal Editor Modes tab

  2. Specify an actor tag name that matches the Simulation 3D Message Set block Signal name parameter.

  3. Navigate to the Level Blueprint.

  4. 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 for Sim3DGetInteger actor class to receive int32 data type of size scalar.

    Unreal Editor blueprint connections

  5. 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:

  1. 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 Editor Sim3DSet data types.

    Unreal Editor Modes tab

  2. Specify an actor tag name that matches the Simulation 3D Message Get block Signal name parameter.

  3. Navigate to the Level Blueprint.

  4. 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 the Sim3DSetFloat3 actor class that sends float data type of array size 3.

    Unreal Editor blueprint connections

  5. Compile and save the scene.

Note

Optionally, for better performance, set Read Array Float Max Num Elements to Num El in the Actor Blueprint.

Unreal Editor blueprint connections

Step 6: Create Blueprint

In the Unreal Editor, create a level blueprint connecting the Get and Set actors.

  1. Set the actor tag values.

    • Sim3dGetFloat1Simulation 3D Message Set block Signal name, SigName parameter value, for example ConeLocSet

    • Sim3dSetFloat1Simulation 3D Message Get block Signal name, SigName parameter value, for example ConeLocGet

  2. Set the parent class.

    1. Under Blueprints, click Open Level Blueprint, and select Class Settings.

      Unreal Editor Work Outliner tab

    2. In the Class Options, set Parent Class to Sim 3d Level Script Actor.

      Unreal Editor class settings

  3. In the level blueprint, make the connections, for example:

    Unreal Editor blueprint connections

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.

  1. 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.

  2. 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.

  3. 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

| | | | | |

External Websites