Week 9: Environment and Lighting In Unity / by Valzorra

Aesthetics and Lighting

The main mechanics in the Unity Prototype were completed at this stage as James and I had come up with a functional Movement Script, Camera Script, Teleportation Script, and Electrocution Script. All of these mechanics worked as expected and there were no obvious bugs or inaccuracies with them. That’s why I thought it would be rather nice to modify the prototype environment in Unity and to make it more a bit more presentable and thematic. Additionally, this was a nice way of adding additional floor space onto into the prototype, allowing for further mobility to any testers. I started the process with the idea to recreate a very basic and abstracted City Street, as that is one environment we may see Zeta in throughout the game. I started this process by including additional 3D Planes and positioning them next to the green ones in the preexisting version of the prototype. Once I was happy with the space I had, I took basic cubes generated from within Unity and edited their dimensions to make them look like buildings. I kept adding on blocks and buildings, changing their shapes and sizes until I was happy with the overall look and feeling of the environment.

Positioning the Buildings and Floors in Unity.

Once I was satisfied with the positioning of the different objects I thought I would edit the lighting and make it appear as though it was a thematic night scene, only illuminated by street lights and signs. At this stage, many of these aesthetic decisions are not particularly significant, because the most important part of this prototype is to showcase the functionality of the mechanics. Anything else is there to make it a bit more aesthetically pleasing for anyone testing the prototype. With this in mind, I decided to make the lighting seem native to the environment, as though it was coming from flickering lights onto the buildings. That is why I have included a series of Point Lights with different Range and Intensity settings scattered throughout the street. Additionally, these lights have slightly different colors, ranging from pinks to purples and blues. This results in a very beautiful mix of color that gives the environment a distinct nighttime feeling and is reminiscent of neon signs and highlights. Once I was happy with how the lighting tuned out, I directed my attention to the Buildings, and made a few materials to color them in and make them fit into the rest of the scene. What’s more is that I thought it would look even better if I were to add an appropriate Sky Box, so I picked up a free one from the Unity Asset Store.

Overlap of the Point Lights’s Range, which produces interesting pleasing color mixes.

Solving Axes Rotation and Scaling Problems

Once I was happy with the aesthetics of this prototype, I thought it would be nice to replace the current tablet-shaped model with the 3D Model I was working on during Week 8: Intro to Modelling with Blender. However, that could have gone a lot smoother than it did. When I added the model to the project, its axes from Blender did not match the conventions used in Unity, which resulted in the model appearing to lay down. This problem tested my spacial orientation and my capabilities of accurately estimating rotation and after a series of failed attempts, Google Searches, and a series of questions for James, I managed to find the fix. In order for a model from Blender to stand up straight and behave as expected, the model needs to be turned on its X-Axis at 90 degrees. Once this fix was implemented in Blender, the model worked as expected in Unity. In addition to the issue with the axes, there was a minor scaling issue in Unity, which made the Range Indicator grow exponentially in size. The problem was that the Unity scale measurements did not correspond to those in Blender. As the Range Indicator is parented to the Player Model, and the Player Model was rather scaled up after the import in Unity, the Range Indicator also grew proportionately. This fix was rather easy and all it required me to do was to downscale the model in Blender by the appropriate amount. Once that was done, the model was imported into Unity once again and the Range Indicator appeared as expected. Overall, importing 3D Models from Blender into Unity had its intricacies, however, all problems were solved with the mere configurations in the 3D Modelling Software. Additionally, this was a valuable learning experience, because now I know what edits I would need to make when I am importing future models into the project.

Some of my failed attempts at trying to solve the rotation issue in Unity.

The Finished Prototype

After these aesthetic changes and after fixing the issues with Axis Rotation and Scaling, a new NavMesh was baked, and the prototype was tested. I was happy to discover that there were no further issues with it and that all of the aesthetic and environmental changes ran smoothly. I was a bit concerned that the player and the enemies would blend into the environment and would be difficult to spot, however, upon running the prototype, they seemed easily distinguishable from everything else. I created a series of different materials to add onto all of the separate models into this prototype, some of which emitted luminosity to stand out even further, such as the Enemies and the Player Model. A detailed video of the prototype in its complete state with all of the environmental details and functioning mechanics has been provided below. The full source code, scripts, materials, and assets can be reviewed in the Unity Project.