This is a Unity Project that built with Unity Editor Unity 2020.1.10, thus, it requires a Unity Editor installed. An earlier version might also work, but you have to downgrade the project and might loss some Unity features, or maybe not.
-
- To run Unity Hub, make the downloaded file executable first: chmod +x UnityHub.AppImage
- Install Unity Editor (>= Unity 2020.1.10) via the Unity Hub.
- Launch Unity Hub
- Find Installs
- Click add and select a version of unity
- Click NEXT
- Select Linux Build Support if you are using the Hub in a Windows or MacOS => DONE.
# Clone the unity project to the local computer
git clone git@github.com:uzh-rpg/rpg_flightmare_unity.git
If you're not familiar with the basics of Unity yet, then check out the Unity Tutorials.
Compiling the Unity application to Linux (or Windows/MacOS) standalone is straightforward. On your Unity Editor, click File -> Build Settings -> Build. But please make sure the following settings in case of unexpected errors:
- Target platform = Linux/Windows/MacOS
- Scenes in Build = {Top_Level_Scene - 0, Warehouse/Scenes/DemoScene - 1}
- Fullscreen Mode = Windowed
- Color Space = Linear
Note
Ignore the HDRP warning (Build time will be extremely long) when clicking Build button, it will take a while (not more than 2 minutes) for building the application for the first time, and become fast (around 10 seconds) after the first build.
The first time you load the project, Unity will create an empty scene which we don't need, delete it. Load the Top_Level_Scene that has three basic GameObjects,
- HD_Camera: the main camera that renders images
- Camera_Controller: the main controller for loading different scenes, moving the camera, and retrieving camera pose & publishing images.
- splash_window: the UI interface.
Afterward, load a warehouse scene for demo. Move the Game window to the right so you can visualize both the 3D model on the left and the camera view on the right. Click Play to build and run the program. The application creates two TCP sockets, one for publishing images and one for subscribing camera pose. Clicking the Start button will start the program, but since we don't have a client running and sending messages to the server, you won't see any changes.
On the Unity side, add a prefab of your object in the folder Assets/Resources/<prefab_id>.
On the ROS side inherit from static_object in flightlib/objects. For references check out static_gate.
Follow the step-by-step instructions to properly add your scene to Flightmare.
First, you need a new scene. You can add your scenes or scenes from the asset store.
To have a consistent project structure, we move all scenes into the environment folder. The structure then is Environments/<Project Name>/. Within this folder, we have usually a scenes folder Environments/<Project_Name>/Scenes/<Scene> with all scenes. Everything else is project-depended.
Next, we add the scene to the sceneSchedule. We have to add the path to the scene to the scenes_list. (Optional) For the UI we need to add the function load<Scene>() which will be added later to the button.
The scene also needs to be added to the build settings. Either add the currently open scene or drag and drop the scene into the build settings. The index of the scene is important.
Optionally, we modify the splash screen by adding a button in the UI. We add the Load<Scene>() to the OnClick() function of the button.
Optionally, we add a timeline to the scene. All timelines are saved in the Environments/timelines folder. For the timeline, the following steps need to be done:
- Add an HDCamera to the scene from Flightmare/Templates/Camera/HDCamera.prefab
- Record an animation for the camera
- Add an empty GameObject to the scene and add the timeline to it
- Add an animator to the HDCamera and select the camera by the GameObject with the timeline.
To be able to launch the scene from the C++ client, you will need to add the scene to flightlib in the flightlib/include/flightlib/bridges/unity_message_types.hpp.