The very first step is to create a new project and define its structure. First I created several folders under "Assets" (right-click on the folder and select "Create > Folder") and a scene called "Main" under the folder "Scenes" ("File > New Scene" and then "File > Save Scene As").
![]() |
| Assets folders structure |
Next I created a basic hierarchy that will allow me to find and work easily with all the objects in the scene. My approach has been to create an empty component "Museum" with a child for each of the sections in it (right-click on the Hierarchy view and select "Create Empty". Select the component and press F2 to rename). As children of these sections I created empty components for each of the tables in them, which will hold the meshes of the exhibits. At the same level as the sections I created another child called "Building" that will hold the mesh of the museum.
![]() |
| Main Scene's hierarchy |
Importing the assets
The Blender file can be imported directly into Unity by dragging and dropping it into the Assets folder in the Project window. Another option is to export the meshes as FBX, OBJ or any other suitable format, then right-click on the assets folder and select "Import > New asset".
In my case I went through with the first option and dropped the file into my "Assets/Models/Environment folder". The mesh objects are created automatically and all the materials are placed in a sub-folder called "Materials".
![]() |
| Assets created by Unity after importing the Blender file |
![]() |
| Assigning textures to materials (standard shader) |
In the case of the cupola Unity assigned a Transparent/Diffuse shader to the material. In this case we assign the image to the only texture slot available on its properties.
![]() |
| Assigning textures to materials (transparent diffuse shader) |
![]() |
| Museum building after import and application of textures |
To do this we just need to select the imported asset and visualize it on the inspector. Here there is an option "Scale factor" (located under the section "Meshes" of the tab "Model") that can be used to change the size of the mesh. After setting it to the desired value we need to click on "Apply" to make the changes effective.
![]() |
| Imported OBJ as seen on the inspector |
Placing the assets in the scene
The next step is to fill our scene with objects. To do this we first drag and drop the "Museum" prefab from the "Assets > Models > Environment" folder into the "Environment" folder in the hierarchy. The prefabs for the Tables and Chairs can then be dragged into their corresponding section, leaving only the "Building" prefab inside the "Environment" folder. The exhibits are dropped next into their corresponding tables and renamed for clarification.
![]() |
| Placing objects in the scene |
![]() |
| Setting Transform parameters for the exhibits |
Following a similar reasoning, all the transforms used to place the exhibits on their initial locations on the tables have been applied to the mesh objects instead of the parent component that holds them (for example, to "Tobacco_mesh" instead of its parent "Tobacco"). The reason is that I will want to provide the user with the option to inspect the exhibits closely and apply rotation, and I will want the exhibits to go back to their original transforms (location, rotation and scale) when exiting the inspection mode. My idea is to apply all of these "user transforms" to the parent component (e.g. "Tobacco") when in inspection mode, so that I will always be able to reset the exhibit to its original position by setting its parent's Transform back to rotation (0, 0, 0), no matter what the exhibit's initial condition was.
Finally, table rotations have also been applied to their meshes.
The following schema is an attempt to illustrate the previous explanation taking the Industry section as an example. The first table in this area of the museum holds two exhibits, a tobacco package and a mouthpiece. The corresponding transforms are indicated next to each of the components:
Industry - Position (0, 0, 0), Rotation (0, 0, 0)
|-- Table_Ind_1 - Position (X, Y, Z), Rotation (0, 0, 0)
|-- Table_mesh - Rotation (X, 0, 0), Position (0, 0, 0)
|-- Tobacco - Position (-POS, HEIGHT, 0), Apply User Transforms during inspection
|-- Tobacco_mesh - Position (X, Y, Z), Rotation (X, Y, Z) = default position
|-- Mouthpiece - Position (POS, HEIGHT, 0), Apply User Transforms during inspection
|-- Mouthpiece_mesh - Position (X, Y, Z), Rotation (X, Y, Z) = default position
X, Y, Z indicate any transform values, since the real ones that I used are irrelevant for the explanation.
POS and -POS are lateral displacements relative to the center of the table (0, 0) that allow the two exhibits to be placed one next to the other.
HEIGHT is the value needed to elevate the exhibits from the floor to the table's surface.
![]() |
| Tobacco package and mouthpiece |










No comments:
Post a Comment