A feature that Gulfstream wanted in a collaborative project was to allow the user to create their own furniture configuration in the G450 aircraft. To facilitate this feature I created an expansive modular system to generate custom interior layouts. The system is easily modified and can be used for any future furniture assets or aircrafts they might introduce later. It is broken into four different sections: interactive assets, side configurations, zone configurations, and cabin selection. Each section works off the previous section and have their own base class. This allows large changes to be made quickly, without having to adjust everything individually.
All assets in the scene that have the ability to change its material is an interactive asset. Primarily it is used for the furniture within the aircrafts cabin. The interactive asset contains a model with collision per material area of the model. At runtime the interactive asset calls to the game-state to set its material elements to a dynamic material instances stored in the game-state. The purpose of this is to only store the dynamic material instances once rather than storing it each time there is a new interactive asset loaded. Along with being able to change the material’s parameters in real time. The interactive asset will set the current material to be changed in the game-state, when the user taps a material collision.
The layout of a side configuration was pre-defined by Gulfstream during the start of the project.
Each side configuration has at least one furniture interactive asset, a side wall interactive asset, and a fan paneling interactive asset. Depending on the furniture in the side configuration there are different side walls and fan paneling used. There are no scripts inside and is simply a container to assist with set dressing the interactive assets.
There are two side configurations for a zone configurations that face towards each other. Initially it was planned not to have zone configurations. After speaking with the Gulfstream team I learned that traditionally their clients find it easier to select a single zone configuration rather than two side configurations. Again this section is a container that helps with set dressing.
The cabin selection controls what the current zone configuration is. There variable for the current room index that is set in the construction script. A zone configuration actor that is spawned at run time from the current index of the current room. Each time the index is changed by the user a function is called that sets a configuration variable. Then is deletes the previously spawned zone configuration actor and creates a new one. Since all interactive assets reference the game state for the materials when they are spawned. They will update to the current material the user has defined in other areas of the aircraft.