Development Blog – Final project

April 7th:

“Betray” is a musical bittersweet love story conveyed by beats, background music and key words that follow the story development timeline.

Project inspiration:

https://www.with.in/watch/lovr?autoplay=true

Storyboard:

April 16th: Memory Box

We paved our project idea into a love story using the theme “close the door” according to the feedback we got from folks and professor that the previous project idea doesn’t involve sufficient meaning for the user that a user might not feel engaged enough into the story just by watching it.

When the game starts, the user will be put in to a lover’s memory with a box in front of his/her (user can choose male/female version to hear different interpretation/stories behind the same paired objects), and the user will pair some memory pieces and put them into the box to complete the story. Once they pair is correct a story piece will be told in the voice message, otherwise the objects will be bumped out of the box and the user need to pair the correct ones again.

the story line we discusses is as following(the order doesn’t matter in this case):

Male Version:

Movie Ticket & Popcorn Box: I finally got the courage to invite her out for movie. Touched her hand when we tried to reach the popcorn at the same time

Paired Toothbrush & Cup: The first night she slept over, she brought her toothbrush with her. The next morning, she changed my toothbrush into a paired one

Dog Food & Dog Cage: She always wanted a pet dog. I brought home a cute puppy one day, and I couldn’t forget how excited she was: her dream finally came true.

Iron & Suit: First day of work after my promotion. She ironed my suit for me. Looking forward to our future.

Ring & Ring Case: I saved all my money for this ring, prepared for a month for this. Today is finally the day.

Passport & flight ticket: Leaving the country tomorrow. I guess I will have to put this memory in the box and leave it behind…

Female Version:

Movie Ticket & Popcorn Box: He finally asked me to hang out. I’ve been waiting for this for a month. He’s so shy but so cute.

Paired Toothbrush & Cup: I was like a kid after I stayed at his place. I paired our toothbrush up.

Dog Food & Dog Cage: Suddenly one day, he brought home a cute puppy. I was so surprised! I always wanted a pet. I guess now we are a family of three.

Iron & Suit: I want to make his first day after promotion special, so I got up early to iron his suit. Looking forward to the bright future of ours

Ring & Ring Case: I said yes.

Passport & flight ticket: His work left us no choice but to lock all these memories up, forever.

April 18th:

Renewal of storyline and objects because some objects are unavailable in asset store:

**The story will be understood regardless of the order – every single piece of a story is independent from one another however once the user finish all the story piece he/she will get the idea of what’s going on – there’s different level of love memories as well as the part the indicates the break up, however there’s no specific reason given why the owner of the memory break up, it leaves the space for user to imagine what happened, different people will have different interpretation of the reason based on their own understanding of the given objects and the story behind them.

Male Version:

Paired Toothbrush & Cup: Paired toothbrush is the first step to show we are a family, says her.

Candles & Plates: I finally got the courage to invite her out for a dinner. Candle light on her cheeks is the cutest thing ever.

Dog Food & Dog Cage: I brought home a new family member that day, and I couldn’t forget how excited she was: her dream finally came true.

Iron & Iron Board: First day of work after my promotion.  She ironed my suit in the morning. Looking forward to our bright future.

Pen & Notebook: She used to keep all of our memories in this notebook … but it’s meaningless now.

Vast with rose: Roses die. So are our promises….Eventually it turns out to be a wedding without her…

Female Version:

Paired Toothbrush : Pairing our toothbrush makes us look like a family more…

Dog Food & Dog Cage: That day he brought home a cute puppy. I was so surprised! I always wanted a pet. I guess now we are a family of three.

Iron & Iron Board: I want to make his first day after promotion special, so I got up early to iron his suit. Looking forward to our bright future …

Candles and Plate: Can’t ask for anything better than a candlelight dinner for the first date.

Pen & Notebook: It’s been a while since he left me… i used to keep a diary everyday when we were together …. How stupid i was.

Vast with rose: Roses die. So are our promises…. Eventually it turns out to be a wedding without him…

finding objects that match the story line

Ending: Initial idea was to do an “close the box” animation when all the objects are paired and destroyed to cater the chosen theme “close the door” by indicating that the owner of the memory space “I” close the door of the bittersweet love memory and leave the memories behind in the box to keep moving on. However, I worked on the scripts of animation but ended up finding that our box is not animatable, because the lips of the box comes together with the box body and can’t be animated separately. Therefore we came up with an alternative ending of the story – in stead of close the box, the box will be destroyed and the moment it disappear, it will be accompanied with the particle effect to show the sense of “vanishing” and an ending explanation in 2D words will be shown to suggest the end of the game as well to explain to the player what happened, by saying “Thank you for helping me recall those memories… Now let me just leave my love story in this box behind and move on….”

April 23th: Environment Design

Because our story is a bittersweet love story with a sad ending, I decided to use the wedding scene to indicate the background of the story – it’s about love, however, at the same time, this is the wedding where only “me” (the user) is attending and there’s no one else around, the odd and emptiness of the wedding scene creates the contract and indicate that even though this is a love story but it doesn’t seem to have a happy ending. The realistic wedding design with the non-realistic background (floating above the city) conveys the message that this is not the real world, it is something fictional and doesn’t match our real life experience. Hopefully user will get the idea that this is in someone’s memory world.

April 25th: Voiceover recording and editing – record the narrative of the story in both male and female voice.


May 5th: Background music and Floating effect

Added the wedding march to the background music to create the atmosphere of a “wedding”. The floating effect is added to the clouds to make the scene more “dreamy” and use it to indicate this is a fantasy memory world. In the beginning I wanted to create the effect that the clouds are moving at different speed so it looks like they clouds are floating around you, however, considering that it might cause too much movement in the background and therefore distract the user, I set the moving speed of all the clouds are the same, which result in the effect that it looks as if the platform that the user is standing on is floating instead of the clouds around them – since it’s relative motion. But this unexpected effect is so cool and achieved the goal to create the illusion of dream so I decided just to keep it that way.

  1. public float amplitude; //Set in Inspector 
  2. public float speed; //Set in Inspector 
  3. public float tempVal;
  4. public Vector3 tempPos;
  5. void Start () 
  6. {
  7. tempVal = transform.position.y;
  8. }
  9. void Update ()
  10. tempPos.y = tempVal + amplitude * Mathf.Sin (speed * Time.time);
  11. transform.position = tempPos;
  12. }

May 6th: User test and adjustment according to feedbacks

Add a collide box outside the player area to bounce back the objects that are thrown away by the users. / The city view background is kinda distracting user’s attention because it has too many details, the scene is too realistic and not dreamy/imaginative enough to indicate this is a fictional “memory space”- changed the scene into a universe space surrounded by clouds.

May 10th:Enviroment Design 3



May 12th: Design of the user interface :

May 12th: Coding and design for ending:

1.problem to solve : when the narrative audio plays, the background music volume down.

solution: attach other 6audio sources to the same game object (the player ),detect when other audios isPlaying, the background volume = 0.1f;

issue: one gameobject cant’t be attached more than 2 audio sources.

another solution: get audio sources from other game objects and detect if it’s isPalying. 

2.problem to solve: close the box animation

issue: when all the game objects are destroyed in the scene, trigger the animation. 

use of GameObject.Find(“”)

3.User test feedback: the floating clouds movement is too intense that it makes user feel dizzy; solution: 1.narrow the range of height movement and the range of moving speed. 2. scale up the red carpet where the user is standing on, so it will feel less scary and dizzy.

Ending: Initial idea was to do an “close the box” animation when all the objects are paired and destroyed to cater the chosen theme “close the door” by indicating that the owner of the memory space “I” close the door of the bittersweet love memory and leave the memories behind in the box to keep moving on. However, I worked on the scripts of animation but ended up finding that our box is not animatable, because the lips of the box comes together with the box body and can’t be animated separately. Therefore we came up with an alternative ending of the story – in stead of close the box, the box will be destroyed and the moment it disappear, it will be accompanied with the particle effect to show the sense of “vanishing” and an ending explanation in 2D words will be shown to suggest the end of the game as well to explain to the player what happened, by saying “Thank you for helping me recall those memories… Now let me just leave my love story in this box behind and move on….”



Development Blog – Cursed

Team: Cassie & Nico

April 6

Concept brainstorming/storyboard – see Nico’s post

April 14

Today we tested out a paper version of our game on our friend Emma. We had several objects made out of paper cardboard: a headset to limit the field of view, a sword, several stones, the statue, and some monsters.

The monsters and statues were pictures of the actual assets we are using.

We set up the room so that the statue was resting on a chair, which will be a platform in the game. The stones were scattered on the floor by the chair.

To start, we had Emma put on the cardboard headset. When she picked up the statue, I wheeled away the chair (the platform will sink down in the game), and Nico announced that the curse has been released, and Emma must now protect herself. Nico then dropped the cardboard sword from above her head. To represent the monsters, Nico and I held up the printouts of the monsters and ran towards Emma one at a time. Here’s how our first test went:

For that first test, we didn’t give Emma any prior instructions, although she had heard about our concept before from casual conversation. However, we did another test where we gave her the instruction to try using the stones. Here’s how that test went:

In this test, she ended up dropping the statue, which means she lost the game.

Here’s what we learned from these tests:

  • In the first test, Emma didn’t notice the stones on the ground or knew that she could use them.
  • In the second test, when Emma wanted to use the stones, she dropped the statue so that she could have stones in one hand and a sword in the other. However, the game doesn’t allow this to happen.
  • The statue stood out enough for Emma to want to pick it up
  • Emma suggested that we should tell people that they have to hold onto the statue, like the voice could say something like “protect the statue” rather than just “protect yourself.” The reason she kept holding onto the statue in the first test was just because she wasn’t really thinking about it.
  • When asked if she thought it would be better if the stones weren’t there at all, she said the stones could be useful and she would rather have the option to use the stones in addition to the sword.

April 15

Feedback from Sarah Rothberg’s visit:

  • Why does the user want the statue? Why does the statue cause a curse?
  • Maybe there can be more things the user can interact with in the environment so that there is more build-up before the user picks up the statue. This would also build more of a narrative, because then it would be like “oh no, I messed with the wrong thing” when the user does pick up the statue.
  • Consider the difficulty of the game in relation to the user. Who is the user and how do we want them to feel?
  • Think about what kind of sounds to implement

April 16

Today I began to build up the environment:

  • Created a terrain. I made it much much smaller this time…lesson learned from Zenboo. Added a grass texture to this as well as a few raised and smoothed sections so that the ground wasn’t super flat.
  • Added in walls and ruins from Cartoon Temple Building Kit. The ruins could possibly add more to the narrative…could cause the user to wonder what this place used to be, potentially adding onto a more “cursed” feeling. Decided to make the ruins like four walls surrounding the player so that when the monsters come out it kind of feels like an arena of sorts…adds on to the feeling that the user is supposed to fight the monsters.
  • Added in trees from the Fantasy Forest pack. Have to have trees. 🙂

Progress pic:

April 17

Class playtesting feedback:

  • Simran went first – she first looked around a bit before picking up the statue and throwing it. She eventually picked up the stones and threw them, though she mentioned that the stones look like you’re not supposed to move them because of their placement
    • Perhaps the rocks can shake or tremble to signify that the user can pick them up
  • Mai went second – she said the monsters were pretty scary, but they look kind of like Shrek.
  • The monsters might be coming out too fast – would be nice if it was slow at first and then became faster and faster
  • Would be cool if lightning struck when the statue was picked up
  • Maybe fire or some sort of goblets could be put up to prevent users from moving away from the center (although you can’t move around that much anyway with the space we are in)
  • Either change the size of the rocks or change the gravity so that they feel heavier…kind of strange that the rocks are huge but easy to pick up. Also makes it seem like the user isn’t supposed to pick them up, because they are so large
  • Maybe limit the amount of rocks there are so that you are forced to use the sword

April 27

Today I worked on:

  • Putting more trees outside of the walls to make the forest more populated
  • Raising the terrain in the background to make everything less flat
  • Putting stones in the background to add variation
  • Putting more decorative objects within the walls: mushrooms, a rock, another stone structure
  • Adding lights to the rest of the doors
  • Finding a skybox for the initial scene (before statue is picked up)
  • Experimenting with a couple floating blocks, but I don’t think it looked that good. Also not sure if we would want these sorts of fantasy elements in the beginning scene, as it would disrupt the sort of “where am I but also this could be somewhere in the real world” initial feeling.

Progress pic:

May 1

Playtesting feedback:

  • Would be cool to have blood when the monsters get hit
  • The headset cable is annoying because it kind of twists around you when you’re playing – would be nice to have it hung up in final presentation
  • A creepy voice would be better than a loud booming voice for the voiceovers

May 5

Today I worked on gathering and creating all of the sound for the game. I first worked on the voiceover instructions:

  • First I recorded the audio, and tried to say the lines kind of creepily:
    • When the user picks up the statue: “The curse has been released…now you must protect the statue or risk releasing the curse forever.” This was taking into account feedback for instructing the user to take care of the statue, hopefully putting into their heads that they aren’t supposed to drop it.
    • When the user loses (either drops statue or monster gets to statue): “You have failed to protect the statue…the curse has taken over….”
    • User wins (kills x amount of monsters): “Congratulations…the curse has been contained, and peace will be restored.”
  • I then found an evil laugh on freesound.org (https://freesound.org/people/Robinhood76/sounds/132252/), which I mixed together with the recorded audio on Audacity.
  • To add a more eerie effect and to also match the sound quality of the laughter, I added a slight echo to the recorded audio.

The next type of sounds I gathered were the background music sounds:

  • First, some sort of calm music was needed for both before the statue is picked up and for after the user wins and peace is restored. For this, I found forest sounds off of Youtube: https://www.youtube.com/watch?v=wKnS8VPxpHI&t=92s
  • Perhaps more importantly is the music that plays when you must kill the monsters. I tested out different music out while listening to the recorded soundtracks on top to see what sounded good, and settled on the intro song in this video about creepy video game music ( https://www.youtube.com/watch?v=-8FN29sHWq8), editing out the rest of the video sounds with Audacity.

And last but not certainly not least, the sound effects:

I then added the scary background music and the first introduction audio when the user picks up the statue to our game. I tried adding in a couple other sounds but was having a little trouble getting the sounds to play, so I will have to spend more time figuring that out!

May 10

Today I worked on the sound effects, the lighting/skybox, the environment, and the blood particle system.

All of the sound effects have now been added into the game, except for a clang sound when the sword first drops to the ground. The way I placed it in the code it was playing but would make a very strange sound at first, like it was starting over and over again. I might also create another sound that instructs the user they can grab the sphere to restart the game if they lose, since one of the feedback we received during playtesting was that it wasn’t clear that the user could restart the game.

The idea for the lighting is that at first, it will be bright and sunny, but when the user picks up the statue it will become dark and creepy. The sky will return to being bright and sunny once the user wins. I thought it would be easiest to switch the skyboxes themselves between the sunny and creepy situations, and accomplished this through this code (at least partly – to change the skybox back to how it was before I put it in a different script, but with the same concept/logic as this):

However, the ambient intensity also had to be lowered because without this, the sky was dark but everything else was still light.

For the environment, I added more things like grass, logs, ruins, trees, and rocks to make everything look less barren and more like a forest. This was a lot easier to do now thanks to Nico who made a layer to place objects in so that they wouldn’t disrupt the monsters’ movements.

Lastly, I worked on making the blood particle system look slightly more realistic and subtle. I made the particles a darker shade of red, made the circles larger so it looked more like a “gush” rather than splatters, changed the shape from cone to box, turned off the loop, made the particle system play for a shorter period of time, and changed the particle’s texture.



Development Blog [Cursed]

Team: Nico and Cassie

April 2

Initial thoughts

  • smashing/hitting apples from a tree (falling?)
    • Protecting Newton
  • Protecting or moving a dragon egg
    • Something flying at you
    • Have to protect the egg with a shield or weapon
    • Combine with apple idea
      • Protect the egg from falling apples
      • Bird in a cage
      • Instead of an egg, magical stones to be protected
        • Protect from things running towards you
  • Something with cooking
  • Maze or quest for the player
    • Boulder following the player, have to constantly move
  • Skydiving
    • Starting in an abandoned location

Expanding on Protecting Egg/Item Idea

  • Instead of falling with gravity, objects run from in front of player
  • Instead of protecting item, protecting self
  • Indiana Jones sort of scenario
    • Player has stolen an item, now has to protect self and item
    • Evil doers are coming for the player
    • Survive a certain amount of time or monsters/evil doers
    • 3 possible outcomes
      • Drop the item
        • Release the curse
      • Evil doer gets to the player
        • Releases the curse
      • Survive a certain amount of monsters
        • Item transforms
        • Final location, nice scene

Final Idea – Cursed (Protecting the Statue)

  • Initial scenery (first scene)
    • Large open sky area
    • Cave not so prominent
    • Nice lighting
      • Light green
      • Bright yellow
      • Sky blue
    • Outside
    • Large old tree
    • Old run down brick walls surrounding player
    • Mystical statue on a platform closeby to the player
    • Throwable rocks around the statue
  • Picking up the statue (second scene)
    • Lighting changes
      • Nice lighting changes to darker and more evil like
      • Red lights appear above 4 caves, each at a cardinal direction
      • Caves become prominent
    • Statue has a glow
    • Platform lowers
    • Sword falls from above (can be picked up)
    • UI message appears
      • The curse has been released
      • Tells player to protect themself (logic to use sword and stones)
    • Monsters slowly start to appear
      • More start to appear faster
      • Localization of monsters is random
      • Appear behind cave and move towards the player
  • Monster hits player or player drops statue (losing scene)
    • UI message appears
      • The curse has permanently taken over
      • In order to restart
        • Grab another object
        • Maybe no restart
        • Automatically restart
      • Lighting al turns off except for the statue’s glow
  • Destroy X number of monsters (winning scene)
    • Statue is replaced with animated “god” or something
    • UI message appears
      • You have defeated the curse
      • You have destroyed all the monsters
    • Lighting becomes merry
  • Involved scripts
    • Changing lighting
    • Initiating sword
    • Throwable sword, rocks, statue
    • Lowering platform
    • Moving monsters
    • Collision detector for destroying monsters
    • Collision detector for monster touching statue
    • Sound effect
    • UI messages
    • Score in top left/right
    • Potential animation of monsters
    • Animation of final scene statue
    • Restarting game
    • Initiating monsters (randomly) (increase amount with time)
    • Moving of monsters towards statue

Possible Scenery Inspiration

April 13

Today’s goal was just to set up the testing area and prepare the Unity file for the project. In order to do that I downloaded all the necessary assets for the project (fig.1). This included all the building blocks for the dungeon, the statue, the sword, the lights, and the stones. After obtaining all the assets, I went ahead and started placing some into the “Dungeon” scene (fig.2). I found a suitable platform for the for the dragon statue, floors that looked decent, and gates that matched. I tried to scale everything to an entertaining size and then tested it out. It is all looking pretty nice, I can see with lights, trees, accessories, and blocks added it, this scene will look a lot like a fully-fledged dungeon room (fig.3). The only issue is that the statue is a bit out of style (too shiny) but that might be useful in catching the player’s attention.

April 14

Today we paper player tested the concept of our games. Cassie fabricated the basic items that were going to be involved in the game and then we gathered a friend of ours to test out the scenario. The items included: the head mounted display (fig.1), the monsters (fig.2), the statue (fig.3), the rocks (fig.4), the sword (fig.5) and the lights, and the podium for the statue.

From the testing (vid.1 & vid.2), we gained some insight into the changes and improvements we needed for our game. The important ones had to do with the voices and narrative structure. It was suggested that we clearing state the goal of the game with a phrase such as “protect the statue” instead of keeping the goal too ambiguous (but don’t go too detailed by saying exactly how). Also more monsters and large ones if possible would be desired. Lastly the idea of being able to place the statue down would make it easier to both throw stones and fend with the sword at the same time. The last idea might not be followed but it was good advice.

April 16

Today, a lot of work was put into the project in order to develop a fundamental basis to continue work off of. Stones were added and scripts were added for each of the object that will need a function (fig.1 & fig.2).

Next, a bunch of work was placed on the monster. The monster came from an asset pack that also involved its animations. The animator was removed just for now, just to keep everything simple for now. A rigid body was added to the monster as well as the script (fig.3).

The monster script was quite simple, it caused the monster to move forward one value every second as well as making it vulnerable to any object that has the tag “HurtMonster” (fig.4). The next script that was worked on was for the statue. This script simply kept the statue still and unaffected by gravity until it was moved, at which point it would no longer be kinematic and would also trigger the “hasMoved” Boolean to be true (fig.5). This was used by the control script as an indicator to spawn monsters.

The control script had many parts to it as well (and will have even more with time) (fig.6). It requires the prefab for the monster that is going to be spawned as well as the connection to the statue. Once the statue has been moved, the script will start spawning monsters every 2 seconds. This parameter will eventually be changed to spawn monsters more often as the timer float increase more. The spawning of the monster is also random (placing randomly out of 4 possible gates). This was quite annoying to set up being it required the accurate position and rotation of the monsters to be correct (so that it would walk towards the center). Ideally another script would eventually be added in order to have monsters randomly appear from the diagonal directions as well (just to make it so that the player can’t just move out of the way of the monsters to protect themselves.

April 21

Today a lot of the project and its foundation were worked on. Many scripts were written and many object placement and game testing took place. I continued working on the control script, the statue script, and the monster script but also added scripts for the sword, stones, and podium (fig.1). The two prefabs that were created, with the appropriate scales, details, scripts, and components attached were the monster and sword (fig.2)

Four major additions were made to the environment. The 4 types of stones were placed around the podium in a circular manner and brought down in scale from before. The terrain was flattened out a bit because it was interfering with the monsters movements. A suitable light source was found and placed were it will be visible and blend it with the gate. The gates and monsters were scaled up in size to give a larger affect; this required some rearranging of objects as well. (fig.3)

The prefab for the monster had a few features that were worked on in detail. The animator was turned back on and the walking motion was placed on loop (fig.4). I tried turning on root motion to use as more aesthetic walking behavior but it didn’t move the monsters so the previous code to move was retained. The rigid body also needed to be played with a bit in terms of parameters being locked because the monster occasionally would bump off something and start walking into the sky.

The sword prefab also had some features worked on. The original sword was taken from an asset pack and edited down in terms of scale. It was also made intractable and throwable using the SteamVR asset pack’s scripts. A collider was added and made convex so that it could interact with other object in the game. It was important to mess with some of the boxes in the throwable script because the sword would fall out of your hand slowly as it was being held due to gravity not being turned off. The same issue occurred with the stones, this was an easy fix to apply to everything. (fig.5)

The monster script was kept simple. Since root motion didn’t work the moving forward script had to be kept. A collision detector based on tag names was also implemented. Now items could either have the “NoHurt” or the “HurtMonster” tag that permitted the object to either destroy or damage the monster it hit (fig.6). For now this would be used solely on stones and the sword (at specific times when they were being used).

The sword script was created with several features. The original position and rotation was recorded so that the sword could be respawned there if the game were to restart. Also the alternating tags (between hurting and not hurting the monster) was coded for. This was important so that the sword could not hurt the monster when it was on the ground (fig.7).

The podium was finally given a script that permitted it to disappear out of sight when necessary). The script recorded its original position and rotation so that it knew how to move and also so that it could be brought back if needed. The podium only moved down (at a reasonable speed one fourth of the scale per second) if the statue was moved (fig.8). It would also not move further than -1.5, just to keep it relatively close and not cause lag to the game.

The script that was written for the stones required a good deal of work and thought. First their original position and rotation was recorded. The stones were also originally set as kinematic so that they didn’t move. If the stones were moved, the kinematic was turned off and a timer would start counting down to respawn a stone at the original location. The respawning doe was written in such a way (that was kind of crude) that it would respawn a new stone only once (this was necessary because otherwise stones would start overlapping and cause the game to have serious lag and issues. The script also check every update to see if the stone could hurt the monsters, the parameters to allow such behavior could be easily altered (for now it had to be at a certain height). Another parameter could be based off of the location, if it was still close to its original location then the stone would not be able to hurt the monsters (meaning it hasn’t been thrown far). There is currently a glitch that I don’t know how to resolve: the first stone that is spawned doesn’t gather any velocity from the hand when it is first thrown (so it doesn’t fly forward but drops down) but once picked up it works normally (fig.9). The stones that then spawn from that stone all behave normally. Also, every now and then the stone loses gravity and just flies away once thrown or bounced on something. These are glitches that could either be maintained to cause difficulty to the player or worked on later on.

The last script that was worked on was the control. I just added some code to this script to spawn monsters more logically and spawn the sword. Once the statue has been moved, a sword will spawn from overhead (the prefab) 3 seconds afterwards (after the podium has gone down) and fall down. This relies on a Boolean variable to not spawn the sword repetitively. The script will also start spawning monsters. It will start spawning monsters every 5 seconds (not shown) but then after half a minute it will spawn monsters every 4 seconds, this will continue increasing till after 135 seconds (about 2.5 minutes) where it will spawn a monster every 2 seconds (fig.10). This mean that after 3 minutes about 60 monsters would have spawned. These times and frequency of spawning can all be easily changed but for now these seem ideal. The spawn frequency cannot go below 1 a second because that is how long it take for the monster to move entirely forward (don’t want monsters spawning on each other).

Lastly in addition to the tags, the layers were played around with a little bit. Two layers were created to make the game more efficient in coding, a “seeking statue” layer for the monsters and an “avoiding monsters” layer for the objects that should not interfere with the monsters movement or behavior (fig.11).

Finally, some important code that has to be worked on: fixing any glitches that were discovered, changing the lighting once the statue is picked up, animating the death of the monster (this should also place them in the avoiding monster layer so it doesn’t interfere with other monsters), having a start or end screen, and implementing a winning and losing condition. Up to this point a lot of work has been put into the project and it looks like a bunch more will have to be put in (especially solving glitches), hopefully it works out!

April 27

Today was another successful day of coding, a substantial amount of progress was made. I started off by tackling the monster movement issue. The very first thing I did was move everything around the monsters trajectory, including the terrain, into a layer that wouldn’t interact with the monster (fig.1). Since I did this, I had to make sure the monster wouldn’t fall through the ground, so I fixed the y position (along with the x and z rotation to keep straight) of the monsters rigid body. After getting the monster’s movement fluid and without stopping, I wanted to animate the dead when hit by a rock. I did this in the animator component of the monster’s prefab. I added a new action (called “Dead”) to the current walk and made a Boolean parameter (called “isDead”) that had to be turned on in order for it to occur. When the monster is hit by something that has the “HurtMonster” tag, then the Boolean within the script for death would turn on as would the Boolean in the animator (fig.2). The falling monster would also be moved to the layer that doesn’t interact with other monsters (“Avoiding Monsters”) as to not inhibit the movement and trajectory (fig.2). A really cool effect of this is that the corpses stay present after their death. An issue I came across was that the dead monster still interacted with other, to fix this I inputted a script I found online that would change the layer for all the children and grandchildren within the monster prefab, function called “SetLayerRecursively”, which worked in the end (fig.2).

Since I noticed that the monsters would be blocked by the stones that were newly spawned (thus not reaching the middle or the statue) I added to the code to fix the issue. I made it so that newly spawned stones were placed in the layer that didn’t interact with monsters (fig.3). I also lowered the time for the stones to respawn since it seemed to take too long. If the player threw the stone at a monster before a new one respawned then it wouldn’t respawn, this was a way to punish the player for using stones at a close distance.

To add to the convenience of the game a bit I made a function that brought the sword back to the original position if it was thrown too far. Since the stones respawned I thought it was only fair that the sword does too. I did this by using the math library and making it so that the position of the sword, along with its rotation and velocity, were set to original if thrown further than 2 in any x or z direction (fig.4).

Finally I attached a losing behavior for the game to the statue’s script. Currently, only if the statue fell below a certain level (on the ground) would the player lose (fig.5). I gave room for the possibility of cheating the system, you could make a platform of stones or place the statue on a dead monster and you would not lose.

I made a change in scenery for the when the player supposedly lost. With a lot of difficulty I found the main camera within the player and found a way to alter the skybox so that it became black when the player lost. I found this through trial and error. Turns out that if you change the “Clear Flags” of the main camera from “Skybox” to “Solid Color” then the beautiful skybox would be turned to a single color quickly (fig.6). This gave off a strong effect for when the player lost. I also made it so that the ambient light intensity would be set to very low when the layer lost, which turned a lot of the environment dark (fig.6). I found out that this would only work on non-static objects. Ideally, I would find a way to turn everything dark.

The control script is getting a bit hectic because I am slowly realizing how inefficient my coding is (stating things more times than they need to be and writing too many lines). It is a bit too late to fix this because it would take a lot of time to redo but it is a good learning experience. I think so far the game is looking good. The next few steps necessary for the coding is: adding more losing conditions, fixing the losing condition, making a winning condition, counting the number of monsters killed, and making a method to restart the game (perhaps with SceneManager.LoadScene(SceneManager.GetActiveScene().name).

April 30

Having in mind what I wanted to do today, I created 2 new materials and a new prefab that I was going to use (fig.1). I created a dark looking material for the planes from which the monsters will emerge (fig.2, naturally set in the “Avoiding Monsters” layer as not to interact with the monster) and a glowing purple material for the respawn sphere that will let you restart the game if desired (fig.3).

I then went ahead and made it so that the player could indeed restart the game if they lost. I did this in a roundabout way, when the player loses everything turns dark but a sphere will appear. This sphere (which is glowing) can be interacted with. A voice will tell the player that they can try again by grabbing the sphere. Grabbing the sphere will then reload the scene (fig.4). When I first tried running this code I noticed that some objects would be carried over into the reloaded scene. This caused issues because some of the scripts would malfunction due to there being multiple objects with the same name. Also, there would be too many statues, swords, and stones, which made the game very different. I added a section to the code that deleted the sword, player, and statue before reloading but I decided to keep the stones (fig.4). I think this would be enjoyable because it would give the player a bit more of a head start and would also allow them to strategize their placement of stones ahead of time (simply gave a bit more character to the game). I noticed that in the reloaded scene the stones and statues would have the issues of not taking velocity from the hand after being thrown (the first time). I don’t know how to fix this but I think it might be reasonable to keep it in the final version of the game because it is a disadvantage that balances out with the advantage the player obtains from restarting.

I also noticed that the monsters would continue to spawn and walk towards the player once they had lost (or won) which seemed aesthetically displeasing. There was also the issue of them (and the corpses) being reloaded to the next scene after a restart. To fix this I made a very simple addition to the code for the monsters. I simply made it so that when the player lost, the monsters would delete themselves (fig.5).

Though I didn’t actually code for the winning scene I wrote the code that prepared for it (as well as the losing scene entry way). If the monster collided with the statue or the player (depending on the name of the objects) the player would lose (fig.6). I might have to change this later on so that it is only the statue because the monster can quite easily collided with the player (even when as a corpse). I also made it so that the player would gain one point every time a monster is killed and will win once they kill 60 monsters (fig.6 & fig.7). As I am writing this blog I noticed an error in the code that needs to be fixed; currently the sword will get destroyed once it interacts with the monsters because it has the “HurtMonster” tag. This needs to be made into an if condition. Also the current if condition needs to have the “or’ operator turned into an “and operator”; currently the player could win simply by hitting a corpse repetitively with the stone or sword.

I think the coding for the game is getting close to its end point. To finalize, I think I need to code the winning scene and fix some bugs with the reloading and the throwing. If necessary, I can also make it so that monsters spawn form the diagonals every now and then. I like how the game is looking so far.

May 5

I started off by fixing something that I thought was made the game unnecessarily inconvenient. I made it so that the losing condition only took into account when the statue touched a monster and not when the player touched a monster (fig.1). I also placed the player in the “Avoid Monsters” layer. This made it so that the monsters would walk through the player to reach the statue.

Another aspect I wanted to fix was the difficulty level of the game. From player testing I understood that the game was a bit too difficult because monsters spawned too quickly. To fix this I decreased the spawn rate. I started at every 7 seconds then 6, 5 and finally 4 (fig.2). This meant that after 2 minutes close to 25 monsters would have spawn. This is the amount of monsters to kill to win.

Next, I wanted to add a blood effect to the monsters. I made a particle system that looked mildly like blood splatter and attached it to the chest of the monsters (fig.3). I found the right parameters mostly through trial and error. I then added code in the “death of monster” section so that it would play the particle system when the monster died (fig.4). This meant that the blood continued inevitably till the player won or lost. Also, the particle system didn’t collide with anything which fixed a few bugs I had in the previous project.

I fixed the losing condition from dropping the statue. Originally it was based on the y position of the statue but do make the system more accurate I based the touching on collisions. Now, if the statue collided with an object named “Terrain” (the ground) then the player would lose (fig.5). This also permitted me to add into the game a small Easter Egg which I do later.

To balance the losing condition, I added a winning condition. Now if the player did indeed kill 25 monsters then the previously turned off directional light would be turned on (fig.6). This made the scene a lot brighter and does indeed feel like success. I had to destroy the statue in the winning scene or else the player would still lose when dropping it. I made it so that there was no more replaying after winning; that is the end of the game.

Finally I worked on the Easter Egg portion. I first made it so almost all of the objects were not static. This made it so that I didn’t have to deal with the baking of light maps and so that everything turned dark or bright with the change of light (fig.7). This is not a perfect method but since there are not too many objects in the game there won’t be much lag. There is one hollow shape that doesn’t turn black when the player loses (fig.7). If when the player is defending themselves, they can throw the statue in the hole and not lose. This makes it so that the player doesn’t have to worry about the statue when fighting. I am thinking of making it so the player automatically wins when they throw it in there.

So I think all the coding for the game is pretty much done. Now all that has to be done is the addition of sounds and a few touch ups.

May 10

I spent way too much time trying to fix the glitch where the stones would not fly after being thrown (only after the scene reload). I found out that it had nothing to do with my script though a lot of trial and error. In the end I found it to be a problem with the throwable script. I just had to prevent the script from turning the object kinetic when it was being picked up (fig.1). This was done in the “Attachment Flags.”

I then went ahead and corrected the blood splatter particle system. I found out that adding an animation to a character doesn’t move all the objects within the prefab. I order to make it so blood came out at the right place when the monster died I just placed the particle system where the chest would be when they fell (fig.2).

Lastly I added a flat sphere (since there are no circles) to the bottom of the statue (fig.3). Originally the statue was see through at the bottom so this fixed that issues.

Done.

Representation

  • Education
  • Social media
  • Training professionals
  • Architecture representation
  • House retailers
  • Autism assistance
  • Overcoming phobias
  • help with PTSD, anxiety
  • this list can go on & on..

I feel like although VR in the perfect mindset would be used to achieve great things through education and training as well as advertisement. But what is seen to be the most common thing that ties people to one another is social media. The tool of VR can be applied to so many things but when applied to the way humans communicate, it would provide an new platform which might be dangerous in the way it would immerse individuals into complete different realities thus escaping their own.

There is this show that I watched previously called “Kiss Me First”, where you would follow the rise of technological advances where they managed the sense of touch in VR. The show represents quite a dystopia, but i feel like it’s an interesting way of thinking where VR is heading. It isn’t just a social media platform but a game as well, and that is sort of a new idea to cross these two things.

Project 2 Documentation. Don’t Feed The Plants.

This project was created together with Mai Lootah and Shenuka Corea. Since they were working more on the environment and textures and animation, I was working on the scripts and mostly will dicuss them.

Description:
This project is a greenhouse on an alien planet where you can see all sorts of alien plants. And when you place a seed in the pot and water it, something weird grows. Some plants make sound, like the one that is behind you and placed in a cage.
There were a total of two main interaction and some secondary interactions. The main interaction was tied to the seed. You can pick it up, its throwable, but the goal is to put it into the pot. Once the seed is in the pot, you can water it to make it grow. That is the second interaction which is tilting the watering jug so it could pour water. This script was a disaster since it was the first script I have ever written. The secondary interactions are the gardening instruments that can be picked up and thrown.

Implementation:
It started off with an empty terrain where we put an imported from the asset store greenhouse (costed is 1$) and made the outside tree meshes and grass. After the we have created a work station which included some benches from that same greenhouse asset and pots. Right after that we have added mesh colliders to every part of the work station and added a new asset which was the gardening tools. The main camera was set in front of the work station and it consisted of the “player” from the steamVR interaction example scene. After the environment was set by Shenuka and Mai, I have started working on the scripts. The first script was to make the particle system, which was attached to the water canister, play when tilted. This script used the transform.euler angle (took me a while to figure out) and when it is in the desired range, just run it. The next script was the collision detection of the seed and pot. That one was not hard: when the seed is on the soil of the pot, pass a “true” boolean value. The next script was to detect collision from the particle system to the seed. Not hard as well, same thing as with the seed and pot. Next is making a counter for the seed which will count the particles of the water only when the seed is in the pot. That is where we need the seed with pot collision script, and once there is enough water for the seed, it shrinks and the plant grows. This was another script named “growth”. If growth was true, the seed began to shrink and plant to grow. Those are all the scripts that were created to make our project 2.

Reflection:
Our goal was to make a greenhouse with a man-eater plant. You can find a clue about it if you look behind you (same plant in cage) and that it is dangerous. As it is seen on the pictures of the blog which was dedicated to expectations before the project was started, we have reached our expectations. The environment was really well made to understand that we are actually on an alien planet.

Storyboard before the project was created
Expectation before the project was created
First view of the greenhouse
Upgraded view of the greenhouse
The inside of the greenhouse
implementing the water pouring when tilted
Final space

Project 1 Documentation. Sunset Valley.

This project was made to show the environment that could be possibly perfect. The environment set as a goal was a sunset valley.

Description:
I have created a mountain area with trees. The main camera was set at the top of the mountain, not the highest, but then the ground level. From that point of you you could see a lovely sunset and some trees that are below you.

Process and implementation:
Using a terrain tool I have raised the terrain in some areas to make it look like mountains and using the brush tool I have added tree meshes and grass meshes. After that I have added some filters on the main camera to make the sunset look even better and move the camera using the “smooth mouse look” script. This made a wonderful representation of the sunset valley.

Reflection:
This places is build to make a person be immersed into a nice place where you can clear your thoughts and just relax. I have never seen a place with such sunset before personally, but now I have a goal to find something in real life that will look very similar.

Project 1 Documentation

Project 1 Development Blog Link: https://alternaterealities.nyuadim.com/2019/02/11/project-1-development-blog-5/

In this project, the goal I set out to accomplish was to create a peaceful environment. Even though the implementation of such differed in many aspects with my initial idea for the project,  the overarching goal of creating a peaceful environment was definitely accomplished. As such, I will use this piece to talk about the similarities and differences between my project’s ideation and its actual implementation, as well as the process that I went through to go from the former to the later.

Differences

If you look at my first entry in the development blog (link above), my initial idea had the user in the middle of the tent. Even though I could have accomplished this in my project, I decided that locating the user outside of the tent created a more meaningful impact given that the user can enjoy more of the scenery thanks to the 360 degree  look of the natural landscape I created.

I also didn’t add the snack assets into my project. I could not find any of the assets I wanted and instead I placed camping tools and wood logs all over my scene. Cutting wood logs was also something I used to do quite often in my camping trips, so this resulted in a really good alternative.

Similarities

All in all, I can say that the tent part of my idea was accomplished effectively. However, I didn’t expect to get so invested in designing the natural landscape. I spent more than 70% of my time placing trees and playing around with the mountain assets. I really liked this portion of my project, and it made me retrospectively analyze the importance I placed in nature. Whenever I went camping, I thought that the most enjoyable part of the experience was to spend time with my friends and that the landscape/scenery came in as an added bonus. After doing this project, I now know that the refreshing look of nature was more important than how I initially perceived it to be, and I hope that I value more this importance as I go on more camping trips.

Implementation:

As stated in the development blog, the design of the scenery was not the most strenuous part of the process. The most time-consuming part was making the executable file. However, looking my project in a Google cardboard Kit was worth it as it gave me a newfound appreciation of the scene view I created. Also, the terrain object proved to be really difficult to alter in the version of Unity I had installed in my computer. As such, I had to use a cube for my floor and then use a mountain asset to fill the user’s distant view with mountain tops.

Project 2 Documentation

What I have learned from this project

I have learned to build bigger environments more effectively. Before it was hard for me to plan out the environment and build it, but this time it was possible for me to see the environment three-dimensionally. It was definitely easier to build the environment

Limitations and Reflection

The project can be improved with these elements in the future

  • More complex objects
  • Having the trash react angrily if you pass without picking up
  • Having a message indicate the right place to recycle something if you don’t put it in the correct bin
  • Develop environment and interaction system more in tandem with each other

Moreover, we should have had more conversations about interactions and the environment. We faced some hardships when it came to adding interactions because we built the environment separately from interactions.

What I want to work on my next project

I would like to work with the interaction part and while working with it, I would like to work with the environment to make sure it is scaled properly. I want the user to feel like they are actually part of the environment. We want them to feel like they are in the right height, and right scale.

Here is the link to my presentation

Documentation Project 2 (Interactions)

Initial Post: https://alternaterealities.nyuadim.com/2019/03/04/project-2-storyboard-claire-junior-atoka/

Development Blog: https://alternaterealities.nyuadim.com/2019/03/20/development-blog-project-2-interactions/

In retrospect, creating and implementing the interactions for this project was definitely a worthwhile experience. Learning to teach yourself a new software is definitely a realistic expectation of someone’s professional career and this project provided an excellent testing ground for such expectation. However, there where several unexpected mishaps that intervened with the project’s complete fruition as well as major moments of success and I will explain such in the following paragraphs.

  • SteamVR

SteamVR repertoire of scripts and prefabs allowed me to implement the grabbing of the glasses really easily. However, my initial approach to create the change of camera blurr was to modify the scripts that came with SteamVR. However, this scripts are overly complicated and not easily readable which resulted in me just messing up this interaction in my efforts of implementing additional functionalities to the game.

Another problem that occured whenever I was working on my project was that Steamvr stopped working unexpectedly. This was an unexpected bug that forced me to create an entirely new project file, export all files (expect the SteamVR plugin)  from my original project to the new project file, and then install and import a new SteamVR plugin into my new project file.

  • New Scripts

Given the issue with Steam VR and its closed system that doesn’t allow for a modification of its scripts, I decided to create four new scenes with different colors(Atoka’s idea) and glasses. This resulted in a modification of our projects initial idea, as well as a different functionality. The user now has to look for the glasses, and once they find them, they will be transported into an entirely new scene with misplaced glasses located in an entirely new place. The user must now find the glasses in each scene, and then at the end, the will end up in a new scene with corrected vision. In order to change scenes,I used Unity Scene Manager library. I created four sceneswaps scripts and I attached one to each pair of glasses.

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using UnityEngine.SceneManagement;

public class sceneswap : MonoBehaviour

{

   // Start is called before the first frame update

   public bool changed;

   public string[] scenes = { “Bathroom7Blue”, “scene1”, “Bathroom7Green”, “Bathroom7Red” };

   public float initz;

   public float currentz;

   public Scene currentscene;

   void Start()

   {

       currentscene = SceneManager.GetActiveScene();

       initz = GameObject.Find(“Glasses1”).transform.position.z;

       changed = true;

   }

   // Update is called once per frame

   void Update()

   {

       currentz= GameObject.Find(“Glasses1”).transform.position.z;

       print(“currentz: “+currentz);

       print(“initz:”+  initz);

       if (changed==true)

       {

           if (initz != currentz)

           {

               Destroy(gameObject);

               SceneManager.LoadSceneAsync(scenes[3]);

               SceneManager.UnloadSceneAsync(currentscene);

               //Application.LoadLevel(2);

               changed = false;

           }

       }

   }

}

Note: There are four scripts like the one above implemented in my project, each one for each pair of glasses that is linked to a particular scene.

At first, I wanted to modify the Interactable script so that the scene is swapped whenever the game object is attached to the hand. However, even though the change of scene was achieved through this approach, the flow of the code was interfered with which resulted in interfering with the Interactable Hover Events Script (the glasses wouldn’t stop glowing). The approach I  implemented in the above mentioned script was to base the scene swap in the position of the glasses. Once the glasses were moved from their original position, the scene will change. I used the Game Objects Z value, but the x or y value would work as well.

Further Improvement

Even though both interactions were achieved, some things could been added in order to fully culminate tha narrative we wanted to achieve. Some sound could have been added by my partners. Also, maybe changing the camera blurr back to normal once the user goes to the last scene would have been excellent as well. All in all, I am really proud of the results of this project and what it came to be.