Initial Ideas and Concepts
During December of 2017, I worked on a Unity game related to Stanley Kubrick’s Space Odyssey 2001.
To me, the film was a very artistic (visual and auditory) experience, and the atmosphere it created was far more important that the plot it was trying to tell. The scene where the astronauts encounter the Monolith on the moon particularly captured my attention. The dark lighting and the music (Ligeti’s Requiem) created an unnerving sense of mystery and intrigue. I wanted to see if I could recreate that same feeling of coming across the Monolith in the game I would be creating.
In addition to watching the film, I also wanted to draw influence from the Stanley Kubrick archives at London College of Communication. With an initial idea of planetary exploration in mind, I searched for related materials. I discovered that there was concept art of alternate planets created for the movie, which were not used in the final film. Although it wasn’t included in the movie, perhaps due to time constraints, you could see that the idea was explored in some depth (models were created for a potential ‘ice’ planet for example). I cannot show it here for copyright reasons, but there was a particular image of an alternate planet with orange water and a green sky that I thought was visually interesting. I wanted to create a planet based on that artwork.
Overall, I decided to make an exploration game based around an ‘alternate’ planet, where the objective is to locate the Monolith. Since the film is very artistic, I wanted to focus on creating atmosphere within the game. Since the monolith is such a key point of the film, and relates parts of the film together, its presence would create a narrative connection between my game and the film. As the player gets closer to the Monolith, I wanted the music and atmosphere of the world to change.
Creating the Planet
I had to import my 3D model into Unity. At first, I had some problems getting the collision mesh to work, but I managed to fix the problem by simply adding the collision mesh to an empty object and making sure that they overlapped. Below you can see the planet in its initial state (with its collision mesh to the side).
I also had to add a spherical skybox which would encompass the planet. To create a skybox, I simply used a sphere which was far larger than the planet, and placed the planet in the centre of it. I then applied a spherical sky texture. I had to use a script to invert the normals of the sphere so that it could be seen from within (from the player’s viewpoint on the planet). Lastly, I had to fix the lighting (for example making sure that neither the skybox nor the planet were casting shadows on each other).
Once I imported the planet into Unity, I had to create spherical gravity that would pull all objects towards the centre of the planet. This involved using the planet’s position, as well as the object’s position, calculating the appropriate direction vectors, and rotating/ positioning the objects as needed. I set up a first person controller which allowed the player to control the camera. They could then walk around the planet without falling off the surface.
After the planet was set up, I placed an object on the planet which was to represent the Monolith. I wanted to test the mechanic of having a part of the world changing in relation to the player’s distance to the Monolith. I added some ominous music and had the music grow louder as the player approached. Since the player and Monolith are on a sphere, I used the ‘great circle formula’ to calculate the spherical distance between them, taking into account the radius of the planet.
I then experimented with area triggers as I wanted different events to occur as the player moves around the planet.
Decorating the Planet
The planet was looking a little plain at this point, so I wanted to decorate it with some objects. I found many 3D assets from the store which I could place in, but I had some issues due to the spherical nature of the world. I couldn’t make use of Unity’s terrain features due to the spherical shape, and every time I placed an object, I not only had to adjust it’s position, but also adjust it’s rotation so that it pointed away from the planet as expected.
Since it would take a long time to manually adjust every object I wanted to place, I had to write a script which could do that work for me automatically. To find the direction that the object’s normal should rotate to, I found the vector by subtracting the position of the (centre of) the planet by the position of the object. The script rotated the object appropriately, and then positioned it on the surface of the planet using the planet’s radius (and a height offset to take into account that the pivot point/ centre of the object might not be at the bottom).
I also added some water to the planet by adding a sphere to the scene, and using a water material which was in the Unity standard assets. The sphere was made a little smaller than the planet. When the sphere and the planet were overlapped, only the parts of the planet which dipped in revealed the water. I later changed the water back to an original orange colour as I wanted it to represent ‘toxic water’ which would kill the player if they stepped into it (the colours are based around the artwork I saw in the archive). When the player dies by stepping into the water, a mysterious sound would play, the screen would fade to black, and the player’s position would be restarted.
Text and UI
For my next step, I set up some text to send the player some messages as they walked around. I used a standard Unity UI package from the store to achieve this. The text uses area triggers as well, and so gives appropriate messages based on where the player is in the game and what they are doing.
There were some troubles with the text as many coroutines were being started at different points in the game, and different messages would often trigger at once and interfere with each other. This was particularly a problem since the messages also needed time to fade in and fade out (messages would appear before the “fade in” coroutine had finished and so wouldn’t be fully visible). Extra care had to be taken to ensure that there was no interference. This included some decisions about which text should take priority.
For example, if they enter toxic water, a message will come up, reminding them of the toxicity. Except, if they enter the water while the starting message is still being displayed, the starting message will continue instead of being interrupted since they can only see that message once at the start.
Text and UI
For the game, I decided to use an adaptive soundtrack, where the song would build up and more instruments add as the player gets closer to their objective.
I worked together with my brother (Aria Zadeh) to produce a few of tracks of the same song, but with some tracks having more instruments than others. When the player passed a certain trigger (for example, crossing the correct bridge), I stopped the track being played, and played the next version, which included an additional instrument. I had to make sure that these tracks blended into each other nicely so that they didn’t sound jarring to the player when they were changed. When the first track was stopped, I use the timeSamples function to get the time stamp where it was stopped, so I could start the next one from the same point. Then I use the volumes on the tracks to fade them in/ out appropriately.
This type of adaptive soundtrack also allows the player to have more understanding of how they are doing. For example, if they start to go backwards, the music will become simple again and they can realise they are going in the wrong direction.
Besides the music, I also placed more focus on the sound effects to improve the feel of exploring the planet, such as a walking sound to play as the player moved around, and a rustling sound if they moved through a bush.
I also decided that it was necessary to add some elements for the player to interact with. One addition I made was a round ball that the player could kick around. Another were mushrooms that would play different notes when the player would walk through them.
Once the player touches the monolith, a final cutscene will play. To give a cutscene effect, I disabled the player input so they are unable to move the camera around. I then change the transform of the camera, making it move back and rotate to slowly look up at the Monolith. The text (contact from the ship) will become distorted and the game will slowly fade to black, signalling the end, perhaps implying something mysterious has happened.
In the end, I created a planet based space exploration game that the player could enjoy interacting with at their own pace. I also focussed on making a game which was suitable for an exhibition setting (I think its okay if the game doesn’t have much replay-ability value in this setting for example). I also believe that the goal is clear, and that the game is not too confusing.
The game could be improved in many ways. If I were to start this project again, I would place more focus on the planning of the planet before jumping into creating gameplay mechanics. There are some parts of the planet which were not designed well (for example, a part near the end which is too narrow and where players can easily fall into the toxic water). It was too difficult to change the base structure of the planet once I had started so building upon it. With more time, I would have also placed more focus on the planet decoration, perhaps designing more 3D models which would look interesting in the space.
Also, if I had time I would add more features to interact with (since the ball seemed to be one of the most interesting parts). Perhaps I could add a timer so the player could see how long it took for them to find the Monolith and to compare to other people. If I implemented a timer, I could also add a feature where the text gives more information if they’ve been looking for a long time. If I could, I would like to have an improved ending which is more climactic and exciting.
I would say that perhaps the scope was slightly too large, and I didn’t have enough time to create the atmosphere that I wanted, with the abilities that I had. Additionally, I could have added further elements to connect it to the movie. Regardless, I am happy with the game I have made overall, and am pleased that people can enjoy playing it. I am happy to have learnt a lot about using Unity to produce a digital game!