Stagging, Layout and Prototyping
Before building the actual scenes, I created a few scenes just to experiment a bit with the game layout and the interaction with the characters.
I also ended up experimenting a bit with coding just to get a better idea of the type of mechanics that I will be using throughout the game.
Level 1
In level one, the options are quite limited and the interactions themselves are apparently very simple. For each item, I need to add a tag that, on collision with the character “Karen” will activate the gamestate “lose” or “win”, and then the losing/winning panel will pop up
For the gun, Herman created a file that already includes the shooting mechanic.
The only issues that I currently have are the driving option and the radio button.



Level 2
This stage is quite similar to the first level in terms of mechanics. The only difference is that on this level, the player will be able to walk. Therefore, I need to add some sort of object that activates the gamestate “lose” if the user walks too far. Meaning they can’t run away from the game.
But once again, I don’t know how I will accomplish radio button mechanics. I have to watch a few tutorials…
Note: I have also decided that the song I will use for this level is “Don’t Stop Me Now” by Queen. I find it a bit ironic since the player literally plays that song to stop the player from attacking them. Furthermore, I really like this track and I think it’s groovy and relatable to many generations.


Level 3
The last level is ironically the hardest to play but the easiest to code. The player will not be able to pick up or use any of the objects on the floor. Instead, I just have to figure out a way to keep the player from lowering their arms and some sort of solution for the hug as well. And I will also add a walking barrier, just like in level 2. However, I don’t have anything in terms of coding for this stage, yet. I will figure that out later.

Designing and Prototyping
In terms of design, I did a few sketches for the characters, which are posted on my padlet presentation. For the environments, I will be using free 3D from sketch fab to get more realistic results and accomplish that GTA aesthetic I am aiming towards.
Level 1
For this level, I wanted a very simple city scenario with a road and a couple of buildings. I got all the models from Sketchfab.


For the Karen prefab, I used MakeHuman to create the character and downloaded some of the clothes from the MakeHuman community page, which offers a wide range of free prefabs to use on the characters.
I wanted her expression to be grumpy and unpleasant. Furthermore, I wanted to embody the typical “Karen look” that we often see on social media, so I gave her a short Karen haircut and gave her some middle age looking clothes.

Level 2
The Thug level has a darker atmosphere. It’s supposed to make the player feel trapped and isolated. I got a full-scale model of an alley that captured this exact feeling and will be using it for this level. The elements are all from Sketchfab as well. In my opinion, it feels a little bit less realistic compared to the first level(and some proportions are weird), but I think it still works, especially when the other objects are present in the scene.



The Thug prefab was created in MakeHuman. I created a young-looking fellow that has this edgy expression and the mouth covered. I mainly focused on the character’s readability to make sure that he stood out in the scene, while still making sure that he looked like a Thug. For his tank top, I got a jpeg with the logo from the band Queen(Clue) and added it in photoshop to the character’s clothes textures images.

Level 3
The last level is supposed to resemble a city destroyed by war. To accomplish this look, I once again use a few models from Sketchfab a created a city that is slowly falling apart due to the bobbing and destruction caused by violence. I think this level was really supposed to embody the message that was originally intended for this game, “Reflecting on violent acts and their casualties, in a serious manner”. Therefore, I wanted to make sure it was easy to perceive by making it a fairly big open space with very readable elements.

For the soldier prefab, I tried to make sure it was very easily readable as well. I also made him a bit scrawny and scared to show that his intentions due not solely rely on violence and that he himself is scared and does not want to hurt the player, and that he is also a submissive meek character. I used MakeHuman for the Soldier, as well.

Game Mechanic and Coding
- Hitting character mechanic (filtered by tags) – Level 1 and Level 2
This mechanism consists of creating tags that define which objects are “wrong” and which one is “right” when in contact with the character in the level (Karen/Thug). If they are wrong, it triggers the “Lose” Gamestate and the losing panels pop up. If it’s the right object the Gamestate “Win” is activated and the winning panels pop up. Also to make sure that after winning or losing, I wouldn’t be able to change the Gamstetae, I started by changing the objects tags after using an object, but later on, found out it was easier to turn off the character’s colliders.
- Shooting mechanic – L1
Initially, I tried using the shooting mechanic uploaded by Herman on Moodle, but for some reason that was not working so, I used an extremely helpful tutorial from YouTube, which I will reference below.
- Driving mechanic – L1
I struggled a bit with this mechanic… I was trying to create a smooth-driving car when the button was pressed, but for some reason, it wasn’t working. So I just created a very simple “if you press this button, this object’s position will be added +3”, kind of statement. And then attached a cube to the car with the tag “WrongItem1” to trigger the “Lose” Gamestate. I then attached the script to the main camera, created a button, attached the object (camera) and referred to the statement “Drive” for the car to move when I clicked the button.
- Radio mechanic button – L1
This was pretty much like the driving script but instead of changing the car’s position, it played a song from an audio source, and then set the Gamestate to “Lose”.
- Feedback systems – sound, animation and panels – L1, L2 and L3
For the feedback systems, I just added the required feedback responses to the already written “if statements”. For example, if tag = wrong item1, set gamestate to lose1 and karenmad.bool = true(this would trigger the animation). I just did this for all the sounds and animations for each character’s main script and attached the corresponding elements to them. Same thing with the Gamestate panels, but for these, I also added the option to follow the player’s head movement for levels 2 and 3. Also, I added coroutine timers to get more time to play the character’s animations/sounds, before the panels popped up.
- Radio mechanic object – L2
This script was very similar to the first radio script, the only difference being that to play the song on this one, the player has to touch an object (collide with it), instead of pressing a button. And then Gamestate = lose, etc… I added a tag to the player’s hand and made it so if that tag touched the radio button object, the song would start.
- Cross barrier mechanic – L2 and L3
This logic was also very straightforward. Basically, if the player’s hand (added specific tag) touched the barrier I created, the Gamestate would be set to “Lose”, etc. then after that, I added another physical barrier (no script) so that the player isn’t able to walk any further.
- Parent mechanic – L2
For this one, I just followed Herman’s tutorial which would set the XR rig as the parent of each object I picked up and let me walk with them. This one took me a while to figure out. I did follow the tutorial, but for a while, I didn’t know why it wasn’t working. And then it hit me… I had set the parent to be any elements with the tag from the player’s hand and forgot to add the tag from the XR origin as well. And then it worked!
- Hands-up mechanic – L3
This mechanic is the basis of the final level. It makes the player raise their arms by working as a collider that when in contact with a specific tag on the hand’s prefab, activates the Gamestate “Lose” and the level has to be restarted. This basically means that the player cannot lower their arms at any point through this last stage.
- Five-second screen mechanic – L3
For this panel, I just created a coroutine timer so that the player gets a few seconds to read and adapt to this level’s rules. I also added a physical barrier so that they cannot move during these 5 seconds. Also, this timer works for the Hands-up cube by only activating it after the initial panel is gone.
- Hug Mechanic – L3
This one was fun to think about. Basically, I wanted the player to have to use both hands to trigger the hug and get the “win” response. To do this, I tried a couple of approaches like “only if y & x” statements but for some reason, once again it didn’t work. So I thought it would be interesting if I had two cubes (one for the left hand and one for the right), when for example, my left hand collides with the left hand cube, it would set.active(true) a hug trigger on the right side and only by touching it with my right hand, will it activate the gamestate “win”. Same logic for the right hand. But to summarise, it means that you always need to hug with both arms, one to activate the trigger and one to touch it on the opposite side to get the “win” gamestate.
- Follow player mechanic – L3
I used this mechanic to have the soldier follow (as in rotate)the player as they walk. I tried to do this for a while but it was not working. I followed countless tutorials and even tried doing it during class by also adding a rotation restraint and nothing. And then, Herman sent me a working script and it was much more simple than I’d previously thought. So yeah… now it works fine. Thanks, Herman!
- Menu mechanic – L1, L2 and L3
For the pop-up menu, I followed a Youtube tutorial that taught me how to make it so that when the player moved it would follow them. However, later on, I had to change the trigger button because the button I was using was restricted and when I exported the game, it would not work. I ended up using a different button, and now it’s fine. Also, to back to the main menu, I created a script for each scene that pretty much subtracted a specific number of scenes to get to the main menu. For example, for the first level, it subtracted 1, for the second level it subtracted 2 scenes, etc. You get the logic. I was trying to do it in one script only but I did not get it to work. This logic was fine too so I used it instead. Finally, for the next level option, I used the same logic but added +1, and for the “restart” option, I just told the script to reload the current scene.
Update: Adding a Main Menu Scene
I forgot to mention this decision earlier but I decided to add a main menu before the actual game starts so that the player has time to get familiarised with the rules beforehand. Also added the buttons tutorial, which I thought would be pretty useful since I got some feedback on that.
Gameplay
Level 1
The player looks around and tries to find a clue.
In the first level, the player has to either pick an object to use or a button to push.
If they press any button, they lose and have to restart the level.
If they pick an object they will either pick the “right” one (solution) or the “wrong object”.
If they pick and use a “wrong object”, they lose and have to restart the level.
If they pick and use the “right object”, they win and can proceed to the next level.
https://padlet.com/umaflor6/9dya9c2gticg69k8

Level 2
After completing level 1, the player can proceed to level 2.
The player looks around and tries to find a clue.
If the player walks away, they lose and have to restart the level.
If they pick an object they will either pick the “right” one (solution) or the “wrong object”.
If they pick and use a “wrong object”, they lose and have to restart the level.
If they pick and use the “right object”, they win and can proceed to the next level.
https://padlet.com/umaflor6/vbov28a8rb6rqenu

Level 3
After completing level 2, the player can proceed to level 3.
The player looks around and tries to find a clue.
If the player walks away, they lose and have to restart the level.
If the player tries to lower their arms, they lose and have to restart the level.
If the player performs the correct action, they win and finish the game. They can then go back to the main menu.
https://padlet.com/umaflor6/6bpe1igyzw6z4wv6

Playtests – Feedback and Review
First Playtest (Colleagues) – I let a few of my colleagues try the game to get a better understanding of how I could improve the gameplay. Actually, there wasn’t much. It was mostly feedback on the first level and second.
For the Karen level, I was told to make the Karen more obvious, since their first reaction wasn’t to look in the right direction.
For the Thug level, The radio object was too obvious and the player would accidentally press the button without even knowing it. To solve this, I put the radio in a less obvious place and set the pivot/grabbing point to a much further distance from the player’s hands, so that they wouldn’t trigger it accidentally and would instead try to find how to play it.
Second Playtest (Herman) – This playtest was crucial for me to understand some of the points I really had to improve for my final version of the game.
The first thing that was pointed out to me is that I should create some kind of particle system to make the interactable objects more apparent instead of making the player figure out which ones are usable. At first, I thought this would be necessary and that the challenge of finding the objects that worked made more sense and was part of the difficulty. However, I think it left the players confused as to what they could do on the level. Therefore, I ended up adding particle systems to the intractable objects.

The other advice I got was to make the Soldier from the last level, follow the player as they walked. I’d already been trying to do this for a while but to no avail. In the end, Herman ended up emailing me with a script that worked!

Third Playtest (Brother) – I thought I would just be showing my brother the game and everything would go smoothly but I actually found one problem that really annoyed me. On the Karen level, when the player drove by clicking the drive button, it wouldn’t be disabled and my brother ended up clicking more than once, which made him drive further and no longer be able to see the “lose” screen to restart the level.
It was an easy fix by disabling the object after the gamestate was set to “lose”, but it certainly reminded me that I had to carefully evaluate all the components in my game, to make sure nothing was missing or incorrect. I’m glad I made him play it…
Other Playtests (myself) – These were the final Playtests I did by myself. And I actually ended up tweaking a few things, such as the camera/XR rig position and for the last level, I perfected the hug triggers and their position relative to players’ hands.
Overall, easy fixes but very monotonous since every time I exported the game and thought I’d be happy with it, I ended up finding something to adjust and had to save and export everything all over again.
Update: Actually, I found a relatively big problem. When I built the game, the button that triggered the menu was not working. I spent hours trying to fix this and look for a solution when I finally found a thread online with someone that had the same problem. To summarise everything, the button I was using could not acquire other functions besides its own. so the solution was simple. I had to pick another button from the VR controller.
Update 2: I ended up doing a final playtest with a couple of friends from a different course, and got some feedback that was extremely useful. First, they asked for a controller tutorial so I added that in the main menu scene. Then they said the last level’s panel’s phrase was too long and they did not have time to raise their arms, so I made it shorter. Finally, they said the winning/losing panels for the second level could follow the character instead and I agreed. Also, I found out that one of my friends was able to jump the physical barrier on the second level somehow, and fixed it.
Resources
Sketchfab Models – https://sketchfab.com/search?type=models
Moodle
Parent Mechanic
Shooting mechanic

Youtube
Shooting Mechanic(substitute)
Importing Mixamo characters to Unity
Building terrains in Unity
Creating a VR Menu in Unity
Animation on Trigger Mechanic- Unity
ChatGPT
I used ChatGPT to help me write lines of code that I wanted/understood how they would work but didn’t know how to write the language.
I cannot stress how useful this was! Because if I were to have googled some of these, the results might have been somewhat adapted to other games and would not be able to explain as well as ChatGPT did.
My problem wasn’t not knowing what mechanics I needed to use, it was how to write them. This was extremely helpful and I highly recommend it to anyone (beginner or pro) this software, cause it saves a lot of time and gives really in-depth explanations of how to apply the code to the game.




