The Blender Workflow – Creating Assets for use within Unity
My general workflow in regards to creating assets through Blender started with finding appropriate reference material; typically what I would look for would be a set of images of different angles and viewpoints for each object in order to create an accurate rendition of said model with decent proportions and scale. I would then create a general rough model using primitive shapes and slowly refine each shape through the editing tab. Because we were going with a low poly aesthetic within our game in order to ensure that it ran smoothly I had to make sure that my models had a generally low poly count. This meant that I only had to get the more important details down while I could hide the less important details with textures.
I can’t deny that I have a pretty intense and detailed workflow that takes a decent amount of time to create assets; this is why I could only make a few models within my time constraints because I’m a bit of a perfectionist, however, my role in creating models would also halt as I had to focus all my attention towards game development and coding. However, it was an interesting learning experience as my main modelling expertise is mainly in the fantasy world. The fantasy aesthetic is usually very loose and imaginative while creating furniture and appliances is very detailed; you’re trying to create an exact copy of something in the real world as opposed to something you created with your imagination.
Creating Immersive Game Design through Intuitive and Creative Interactions – VR and Events .
Creating VR interactions within Unity was a bit tricky at first and it was especially convoluted to come up with more intuitive and creative designs as the game’s development progressed. With the XR Interaction toolkit you’re given a basic set of interactions, controls, and mechanics to use; it is up to the developer to use these components in creative and intuitive ways by thinking out of the box and use these mechanics in ways that the creator of the package didn’t originally or intentionally design and plan for. To accomplish this, I combined various other non-VR related mechanics within Unity as well as my own scripts and with the XR Toolkit to create my own unique interactions.
If I were to list the most creative interactions I managed to create I would have to say the main 360 video viewing mechanic, placing all the cans within the recycling bin, as well as placing the flower on top of the burning grave.
The main 360 video viewing mechanic was the simplest mechanic but behind the scenes it was the most convoluted in terms of coding/scripting, that of which I will describe in a following entry. As this was the main mechanic, it was also one of the first ones that was developed and the one that needed to be perfected; the main idea was viewing past memories through objects. It started with many iterations such as the 360 bubble instantiating as soon as it was picked up, this first version was later tweaked so that it spawned directly over the player’s centered position. Next, the buttons would have to be spawned; this was done in a rather flawed and imperfect way that would layer haunt my development as it spawned onto a canvas that wasn’t parented to the actual player object, this meant that I would have to manually transform it to the player’s position when spawned and manually tweak the 3-axis coordinates. Halfway through the build would see it’s next mechanic implemented wherein the bubble would spawn using a listener event with a player input. The mechanic would then reach its final iteration with the object having its mesh renderer disabled as to not obstruct the player’s sight when viewing a scene.
Finally, the next two interactions were not as script heavy as the previous but I think they were the most creative and intuitive as they were the last to be implemented and were shaped through the skills I learned along the way through the game’s development. I wanted to create something that wasn’t inherently complicated in nature rather I wanted something that had an immediate reaction to the player’s interaction that spawned in an interesting way; that said, these interactions probably had the most thought and conceptualization behind them.
I thought about the idea of the player performing some extra events in order to get extra karma points to get the best ending, the ones that immediately came to thought were depositing the beer cans into the garbage to reflect the grandfather’s alcoholic nature and the player overcoming it as well as placing the flower on the burning grave as a sign of forgiveness, letting go of the past, and the daughter’s resentment towards her grandfather. The immediate reaction in these cases were the cans being immediately destroyed in the fire as well as the flower being ‘socketed’ on top of the grave and the fire being extinguished.
Constructing the Scene and adding the Element of Surrealism – Particle Effects and Events
Creating a sense of surrealism can be difficult as there are many renditions of what a dreamlike landscape looks like; my idea was something along the lines of Salvador Dali and the unknown. While implementing surreal elements was somewhat limited because of our given timeframe I was able to implement a few elements.
First was the perpetual rain and clouds, I wanted to create a thick miasma of clouds to obstruct the player’s view and give them a sense of mystery and the unknown; they don’t know where they are or if they’re even in the real world. This was done through a particle system which included rain with collision (so that it didn’t go through the room of the house) as well as a pretty performance heavy cloud emitter (which I think emitted around 500 clouds into the scene). To complement the cloud system I also added a blue fog using Unity’s lighting system to further obstruct the player’s field of view as well as objects in the distance.
Next was the fire, as normal fire isn’t very dreamlike I decided to color it a combination of a ghostly teal and green. The fire was composed of three different particles, the first being the fire’s core, the next being the outer glow, with the third being the black smoke.
Finally, I added a little spooky touch by having the front doors of the house open when the player enters a collider. This was done by having the doors having a specific timeline animation that is played through an event. This one isn’t too important as the others but I like this one in particular as it’s unexpected and catches the player off guard.
Developing the Gameplay/Mechanics – Scripting and Unity
The core gameplay loop is probably the interaction that I spent the most time on; the process of picking up an object, viewing a scene, and getting an ending depending on your karma score. Essentially, it boils down to four scripts; spawning the 360 scene, regulating the button inputs and location, a conditional loop that checks if all scenes have been viewed, as well as an ending that assigns the player an ending depending on their score. Naturally, the first script in the list would be the most important as the majority of the other scripts in the game reference, is a child class, or is called upon at some point in time as an instance; if the spawn scene script doesn’t work then the game is pretty much a dud.
What I learned from the Experience as well as Future Plans – VR, Unity, and C#
Overall, the experience of developing Opa has been an invaluable learning experience and I was surprised at how much I was able to learn within three months; I learned the core and essential aspects of Unity and C# and I’m excited at what else I can learn and improve upon in the months before I begin my thesis.
In terms of VR I was also pleasantly surprised at how relatively easy it was to develop games if you understand how the VR kit works on a technical level and a more programming centric viewpoint. That said, VR is something that I will definitely explore in further detail and maybe even try to develop another game in the future that is more responsive, sophisticated, and more detailed on a technical level than my first attempt at a VR game within Unity.