The aircraft’s flight dynamics is computed by JSBSim. The model is not an Unreal asset: it is a set of files on disk that JSBSim reads directly, bypassing the asset system.
1. Where the model lives
JSBSim starts from the Resources root of the FlightPhysics plugin and looks for the model in the aircraft folder:
Plugins/FlightPhysics/Resources/← the JSBSim rootPlugins/FlightPhysics/Resources/aircraft/← aircraft models go herePlugins/FlightPhysics/Resources/engine/← engine definitions (shared)Plugins/FlightPhysics/Resources/systems/← systems files
In a built game the same path applies, inside the game folder:
<Game>/Plugins/FlightPhysics/Resources/aircraft/<ModelName>/
2. The naming rule: three names match
The JSBSimConfigName string == the folder name == the main model file name (without .xml)
3. One folder per flight mode
Every flight mode corresponds to its own model– its own fully assembled folder: the modes differ in aerodynamics, control files and engine sets.
| Flight mode | Model | Model folder |
|---|---|---|
| VTOL | < | Resources/aircraft/ |
| Ground | | Resources/aircraft/ |
| Plane | | Resources/aircraft/ |
4. What ties the model to the aircraft
Two entities in the aircraft’s interface contract (DA_Aircraft):
| Entity | What it defines |
|---|---|
JSBSimConfigName on a flight mode | which model to load in that mode |
StructuralFrameOrigin | where the model’s nose is – how JSBSim coordinates map onto the mesh |
JSBSimConfigName is filled in per mode: the VTOL mode gets the VTOL model folder name, Ground gets the ground model folder name, Plane gets the cruise model folder name.
5. The structural frame and StructuralFrameOrigin
The structural frame is the coordinate system in which JSBSim describes the aircraft’s geometry:
- Its origin is the aircraft’s nose. Not the center of gravity, not the centre of the model.
- Its X axis points backwards, towards the tail. Its Z axis points up, as in UE.
In this frame the model files hold the center of gravity (mass_balance), the aerodynamic point (AERORP), the visual point (VRP), the eye point (EYEPOINT) and the landing gear struts.
StructuralFrameOrigin is the aircraft’s nose point in UE actor local coordinates, in centimetres. It converts structural frame coordinates into mesh coordinates:
[JSBSim structural point] -> [X inverted: structural X points to the tail] -> [+ StructuralFrameOrigin, cm]
(nose = origin) (in UE X points forward) (UE actor local)
| Situation | What to set |
|---|---|
| The model’s nose coincides with the actor root (the root component is the mesh itself) | StructuralFrameOrigin = (0, 0, 0) – the default |
| The mesh is offset: the root is not at the nose (nose lower, higher, behind) | put the nose point in actor local space, in cm |
This is a point in actor local space, not a size and not the center of gravity: the center of gravity comes from the model files (mass_balance) and must never be written into this field.
StructuralFrameOrigin is the pivot for the center of gravity, the aerodynamic points, the eye point, the collision points and the aircraft’s final world placement. Symptoms of a wrong value:
| What you see in game | Cause |
|---|---|
| the aircraft flies “half a fuselage behind” its model | a wrong nose point along X |
| wheels sunk into the ground or hanging above it | a wrong nose point along Z |
6. Model orientation: nose along the X axis
The aircraft mesh must be oriented nose along the actor’s X axis. JSBSim defines the aircraft’s orientation in the world itself, and that orientation maps onto the actor directly: wherever the mesh’s nose points, that is the flight direction the game assumes. Put the mesh sideways or backwards and the aerodynamic surfaces, gear contact points and center of gravity end up beside the geometry.
7 Installing the model into the game
The model XML is read from disk as ordinary files and is not an asset: it never enters the mod’s pak and is never copied anywhere by itself.
Put it into the real game folder by hand – next to the installed mod:Copy
<Kit>/Plugins/FlightPhysics/Resources/aircraft/<Name>/ -> <Game>/Plugins/FlightPhysics/Resources/aircraft/<Name>/
You place the model files there yourself, just as you place the built mod into the game.
8. Verify
| What you see | Cause | What to do |
|---|---|---|
the log says JSBSim: Error loading model '<Name>' | no aircraft/<Name>/<Name>.xml, or the names diverged | check the three names and the folder contents |
PrepareJSBSim: FAIL | the model failed to load | fix model loading (the log lines above) |
| in VTOL the aircraft neither hovers nor lifts off vertically | that mode points at a cruise model | create a separate model folder for VTOL |
| the aircraft flies but drifts away from the mesh | StructuralFrameOrigin does not match the real nose | set the nose point |
| the aircraft turns as if flying sideways | the mesh is not oriented nose along the X axis | rotate the mesh |
| the model was not picked up after editing the files | the model is read when the mode is loaded | restart the game or respawn the aircraft |
9. Checklist
- The model lives in
Plugins/FlightPhysics/Resources/aircraft/<Name>/. - The
JSBSimConfigNamestring, the folder name and the master file name match. - Every flight mode has its own folder with the full file set.
- All six files are present and the
file="..."references point at files lying next to the master. - The engine definitions referenced by
Propulsion.xmlexist inResources/engine/. StructuralFrameOriginsets the real nose point in actor local space.- The mesh in the blueprint is oriented nose along the X axis.
- The model files are placed into the real game folder
