Installation¶
Add Tempo to a project¶
Create your repository from TempoSample as a template, then rename the project:
Recurse submodules
Tempo is a submodule of TempoSample. If you forget --recurse-submodules, fix it with
git submodule update --init --recursive Plugins/Tempo.
Rename early
Scripts/Rename.sh is only meant for a freshly cloned TempoSample. It will not help you
rename a project you have already started adding files to.
Disable ROS plugins if unused¶
Tempo's primary interface is gRPC, which needs no ROS — see Client APIs. TempoROS and TempoROSBridge are optional and TempoSample explicitly enables both. If you are not using ROS, disable them before building:
-
In your
.uproject, set theTempoROSandTempoROSBridgeentries'Enabledfield tofalse: -
Remove
CustomStageCopyHandler=TempoROSCopyHandlerfromConfig/DefaultGame.ini.
This avoids requiring a ROS 2 installation and skips building the ROS-dependent modules.
One-time setup¶
Run Setup.sh (or Setup.bat on Windows) once, from the Tempo root or from Scripts/:
This script:
- Modifies your project's
*.Target.csfiles to use Tempo's custom toolchain, which is necessary for linking certain third-party dependencies properly - Installs the Tempo engine mods, patching your installed Engine in place
- Downloads third-party dependencies
- Adds git hooks that keep engine mods and third-party dependencies up to date automatically as you check out different Tempo commits
-skip-hooks is for Tempo developers only
Setup.sh accepts a -skip-hooks flag which suppresses installing the post-checkout and
post-merge git hooks. This is intended only for developers actively modifying Tempo
itself — when iterating on Tempo source while not touching EngineMods/ or third-party
dependencies, the hooks can add noticeable overhead to every git checkout / git merge.
Without the hooks, engine mods and third-party deps will not re-sync automatically when
you change Tempo commits, and you must run Scripts/InstallEngineMods.sh and
Scripts/SyncDeps.sh manually to keep them in sync. If you are simply using Tempo as a
dependency in your project, do not use this flag.
Build and run¶
Plugins/Tempo/Scripts/Build.sh # or Build.bat on Windows
Plugins/Tempo/Scripts/Run.sh # opens the project in Unreal Editor
TempoSample wraps both in project-level Scripts/Build.sh and Scripts/Run.sh, so from a
TempoSample-derived project you can just run Scripts/Build.sh.
The build does more than compile C++. It also:
- Generates C++ and Python code from every
.protofile in the project - Generates the
tempo_simPython package (plus a project package, if your project defines its own services) and installs both into a virtual environment at<project_root>/TempoEnv - Optionally generates Rust and C++ client libraries — see Client APIs
The full set of scripts is documented in the scripts reference.
Verify it worked¶
Open the project in Unreal Editor and press Play. If the Tempo gRPC server started, the Editor log contains:
From another terminal:
source ./TempoEnv/bin/activate # TempoEnv/Scripts/activate on Windows
python -c "import tempo_sim.tempo_core as tc; print(tc.get_current_level_name())"
If that prints your level's name, the server is up and you are ready for Hello World.