GAME DEVELOPMENT //PROPOSAL, GAME ART ASSET, PROTOTYPE & FINAL SUBMISSION
23.4.2024-30.7.2024 (Week 1 - Week 14)
Ang Shin Er / 0355231
Bachelor Of Design (Hons) In Creative Media / Taylor's University
Game Development // Proposal, Game Art Asset, Prototype & Final Submission
LECTURES
| Game Design Introduction
GAME DEVELOPMENT COMPONENTS:
- GAME DESIGN
- GAME ART
- GAME TECHNOLOGY
ELEMENTS OF A GAME : STORY
- How What Happens
- Affects Someone
- In Pursuit of a Difficult Goal
- How he or She Changes
- The Final Battle, the hardest & last challenge. (i.e. Boss Fight)
- Introduction to the characters, premise, goals and objectives
- Obstacles and challenges to overcome before meeting the goals
- Conclusion: What happened after?
- STORY SPINE/SPLINE/ARC
ELEMENTS OF A GAME: GAMEPLAY
- CHALLENGE
- STRATEGY
- CHANCE
- CHOICE
- LUCK
| Game Ideation
What is SCAMPER?:
- SUBSTITUTE
- COMBINE
- ADAPT
- MODIFY
- PUT TO ANOTHER USE
- ELIMINATE
- REVERSE
What is 3(i)?
1. INCORPORATE/INCLUDE
2. IMPROVE
3. INVERSE/INVERT
SCAMPER - In-class Group Exercise
After Mr.Razif introduced what SCAMPER means, we were required to have a group discussion with teammates at the same table to discuss about scamper. We created 2 storylines:
- Storyline 1: Once a upon a time , a girl named 'penny' was playing with a ball...However , the ball rolled into the jungle. There was a sudden thunderstorm that made the atmosphere changed. What she did not realise was that she had entered into a multiverse world which is a world that has various blocks - the BLOCK world. The girl will have to collect skills/abilities by completing quests.
- Storyline 2: Once upon a time, a curious young girl named Penny lived in a quaint little village nestled between lush green forests. On a cloudy afternoon, Penny was engrossed in playing with her favorite ball near the edge of the dense jungle that bordered her village. As she kicked the ball around, a sudden gust of wind sent it rolling deep into the mysterious depths of the jungle. Determined to retrieve her beloved ball, Penny ventured into the dense foliage. But just as she entered, the sky darkened ominously, and thunder rumbled in the distance. With each step, the atmosphere around her seemed to change, and before she knew it, she found herself in a strange and wondrous multiverse world. In this surreal realm, the laws of nature were different. Instead of rain, it hailed down blocks of various shapes and colors. As Penny looked around in awe, she realized that she was in for an adventure unlike any other. Guiding Penny through this puzzling world, you'll help her navigate through treacherous terrains filled with falling blocks. Using her newfound ability to conjure Tetris-like shapes, Penny must solve puzzles, overcome obstacles, and uncover the secrets of this enigmatic realm. With each challenge she faces, Penny learns more about herself and the world she has stumbled upon. Along the way, she'll meet quirky characters, encounter formidable foes, and ultimately unravel the mystery behind the raining blocks and the true nature of the multiverse. Are you ready to embark on Penny's Puzzle Quest and help her find her way back home?
Miro link: https://miro.com/app/board/uXjVKNyga30=/
| Game Design
Design Process
- Initial Ideas: Game type, player actions, visuals.
- Concrete Details: Building the game from the ground up.
User-Centered Design
- Focus: Designing the game as an interactive experience giving players agency and autonomy.
Breakdown of Game Design Elements
- Mechanics: Game objects and actions the player interacts with.
- Gameplay: Interaction process with mechanics, creating player experiences.
- Player Experience: Subjective feelings from gameplay.
Player Experience
- Identify specific enjoyable aspects of a game.
- Example: "Civilization V" - enjoyment from progression, city management, strategic reactions, and historical context.
Bartle’s Model (1996)
- Action: Destruction, excitement.
- Social: Competition, community.
- Mastery: Challenge, strategy.
- Achievement: Completion, power.
- Immersion: Fantasy, story.
- Creativity: Design, discovery.
Yee’s Gamer Motivation Profiles
- Various profiles based on player motivations and preferences.
Game Concept
- Purpose: Describe a game in detail to communicate its vision, fun factors, target audience, and reasons for its creation.
- Components:
- Introduction (elevator pitch)
- Game overview
- Key features and USPs
- Game genre, platform, target audience
- Core gameplay mechanics
- Narrative (story)
- Mode and setting
- Characters and game world information
Description
- Provide a clear picture of the final experience.
- Use multimedia (concept artwork, audio) to reinforce the vision.
Key Features
- Include main features relevant to the game.
- Features can range from game modes, AI, graphics, to progression systems.
Game Types
- Linear Games: Predefined path and structure.
- Non-Linear Games: Open-ended, player-driven exploration.
| Chapter 1: Implement Player Control
Introduction
- Program a car moving side-to-side on a floating road to avoid or hit obstacles.
- Learn to create C# scripts, call basic functions, and tweak variables.
- Import Asset in Unity
NOTE:
- Import "Prototype-1_Starter-Files.unitypackage".: Add a Vehicle to the Scene
- Drag and drop a vehicle from "Course Library > Vehicles" to the "Hierarchy" window: Interact in Scene Window
- Use right-click and keyboard shortcuts to navigate and manipulate objects.: Add Obstacle and Reposition it
- Drag and drop an obstacle and set its position to (X:0, Y:0, Z:25).: Rename GameObject
- Rename objects to "Vehicle" and "Obstacle".: Move the Camera Behind the Vehicle
- Adjust camera position relative to the vehicle.: Customize the Interface Layout
- Modify Unity's layout to optimize workflow.: Create and Apply Script
- Create a "Scripts" folder, add a "PlayerController" script, and assign it to the vehicle.
- Use MonoBehaviour for scripts.: Commenting: Single-line (//) and multi-line (/* ... */).- Give the Vehicle Forward Motion
- Implement forward movement with transform.Translate.: Customize Vehicle Speed
- Adjust speed using Time.deltaTime: Add Rigidbody Components
- Assign Rigidbody to vehicle and obstacle, and adjust their mass.
- Rigidbody properties: mass, drag, angular drag, gravity, kinematic.
- Collider uses: triggers, obstacles, walls, ray casting.: Duplicate Obstacle
- Duplicate objects and reposition them.: Add Speed Variable
- Use public variables to adjust speed in the inspector.: Camera Follow Script
- Create a script to make the camera follow the player.: Edit Playmode Tint Color
- Change playmode tint color to avoid editing during playmode.: Allow Vehicle Movement
- Implement left/right and forward/backward movement.: Rotate Vehicle Instead of Sliding
- Implement rotation using transform.Rotate.: Complete PlayerController Code
- Combine movement and rotation in one script.
| Chapter 2: Implement Basic Gameplay
Introduction
- Program a top-down game to throw food to hungry animals.
- Learn important Unity concepts: if-then statements, random value generation, arrays, collision detection, prefabs, and instantiation.
- Program game mechanics: launching projectiles and maneuvering the player.
- Add the Player, Animals, and Food
NOTE:
Import "Prototype-2_Starter-Files.unitypackage".
- Add 1 Player, 3 Animals, and 1 Food.
- Rename Player to "Player".
- Get the User’s Horizontal Input
Create a "Scripts" folder and a "PlayerController" script.
- Attach the script to the Player.
- Script to get user’s horizontal input:
- private float horizontalInput;
- void Update() { horizontalInput = Input.GetAxis("Horizontal"); }
- Moving Player Left/Right
Script for moving the player left/right:
- private float horizontalInput;
- private float speed = 10f;
- void Update() { horizontalInput = Input.GetAxis("Horizontal"); transform.Translate(Vector3.right * horizontalInput * Time.deltaTime * speed); }
- Using If Condition to Keep Player Inbounds
Script to keep player in bounds:
- private float xRange = 20f;
- void Update() { if (transform.position.x < -xRange) { transform.position = new Vector3(-xRange, transform.position.y, transform.position.z); } else if (transform.position.x > xRange) { transform.position = new Vector3(xRange, transform.position.y, transform.position.z); } }
- Make the Projectile Fly Forwards
Create a "MoveForward" script and assign it to Food GameObject:
- public float speed = 40f;
- void Update() { transform.Translate(Vector3.forward * Time.deltaTime * speed); }
- Make the Projectile into a Prefab
Create a "Prefabs" folder.
- Convert the Food GameObject into a Prefab.
- Add to PlayerController.cs:
- public GameObject projectilePrefab;
- Drag Food prefab from Prefabs folder onto the Projectile Prefab box in the inspector.
- Launch Projectile on Spacebar Press
Script to launch projectile on spacebar press:
- if (Input.GetKeyDown(KeyCode.Space)) { Instantiate(projectilePrefab, transform.position, projectilePrefab.transform.rotation); }
- Make Animals into Prefabs
Rotate animals on Y axis by 180 degrees.
- Assign MoveForward to animals and set speed.
- Convert animals to prefabs.
- Destroy Projectiles Offscreen
Create a "DestroyOutOfBounds" script and apply to Projectile prefab:
- private float topBounds = 30.0f;
- void Update() { if (transform.position.z > topBounds) { Destroy(gameObject); } }
- Destroy Animals Offscreen
Add to "DestroyOutOfBounds":
- private float lowerBounds = -10.0f;
- void Update() { else if (transform.position.z < lowerBounds) { Destroy(gameObject); } }
- Create a Spawn Manager
Create an Empty Object called "SpawnManager".
- Create a "SpawnManager" script and attach it to "SpawnManager".
- Declare public GameObject array:
- public GameObject[] animalPrefabs;
- Spawn Random Animals from Array
Script to spawn random animals on "S" press:
- private void Update() { if (Input.GetKeyDown(KeyCode.S)) { int animalIndex = Random.Range(0, animalPrefabs.Length); Instantiate(animalPrefabs[animalIndex], new Vector3(0, 0, 20), animalPrefabs[animalIndex].transform.rotation); } }
- Randomize the Spawn Location
Add variables for random spawn location:
- private float spawnRangeX = 20;
- private float spawnPosZ = 20;
- Update function for random spawning position:
- Vector3 spawnPos = new Vector3(Random.Range(-spawnRangeX, spawnRangeX), 0, spawnPosZ); Instantiate(animalPrefabs[animalIndex], spawnPos, animalPrefabs[animalIndex].transform.rotation);
- Change the Perspective of the Camera
Toggle between "Perspective" and "Isometric" view in Scene view.
- Change camera projection to "Orthographic".
- Make a New Method to Spawn Animals
In "SpawnManager.cs", create a new void function:
- void SpawnRandomAnimal() {}
- Spawn the Animals at Timed Intervals
In Start(), use InvokeRepeating:
- private float startDelay = 2f;
- private float spawnInterval = 1.5f;
- private void Start() { InvokeRepeating("SpawnRandomAnimal", startDelay, spawnInterval); }
- Add Collider and Trigger Components
Add Box Collider to Animal and check "Is Trigger".
- Add Rigidbody component to projectile and uncheck "use gravity".
- Destroy Objects on Collision
Create "DetectCollisions.cs" script and add to each animal prefab:
- private void OnTriggerEnter(Collider other) { Destroy(gameObject); Destroy(other.gameObject); }
- Trigger a “Game Over” Message
In "DestroyOutOfBounds.cs", add Game Over message:
- Debug.Log("Game Over!");
| Chapter 3: Implement Sounds and Effects
Introduction for Implement Sounds and Effects
- Program a fast-paced endless side-scrolling runner game
- Add music and sound effects
- Create dynamic endless repeating backgrounds
- Incorporate particle effects like splatters and explosions
Change Background
1. Select the “Background” gameobject in the Hierarchy Window.
2. Search “Sprite Renderer component > Sprite” in the Inspector Window.
3. Select either “_City, _Nature, or _Town” image.
Choose and Set up a Player Character
1. Drag a character into the Hierarchy, rename it “Player”.
2. Rotate it on the Y axis to face to the right.
3. Add a “RigidBody” component.
4. Add a “Box collider” and edit the collider bounds.
5. Create a new “Scripts” folder in Assets.
6. Create a “PlayerController” script and attach it to the player.
Make Player Jump at Start
1. Declare a new “private Rigidbody playerRb;” variable in PlayerController.cs.
2. Initialize “playerRb = GetComponent<Rigidbody>();” in Start().
3. Use AddForce method to make the player jump at the start of the game.
Player Jump if Spacebar Pressed
1. Initialize playerRb in Start().
2. Check for spacebar press in Update() and apply jump force.
Tweak the Jump Force and Gravity
1. Replace hardcoded values with “public float jumpForce” and “public float gravityModifier“.
2. Adjust gravity in Start() using “Physics.gravity *= gravityModifier;”.
3. Tweak gravityModifier, jumpForce, and Rigidbody mass values in Inspector.
Prevent Player from Double-Jumping
1. Add a “public bool isOnGround” variable set to “true”.
2. Update jump if-statement to set “isOnGround = false”.
3. Add condition “&& isOnGround” to the jump if-statement.
4. Create OnCollisionEnter method to reset “isOnGround” to true.
Make an Obstacle and Move it Left
1. Add an obstacle from “Course Library > Obstacles”, rename it “Obstacle”.
2. Apply “RigidBody” and “Box Collider” components.
3. Create a new “Prefabs” folder and save the obstacle as a prefab.
4. Create a “MoveLeft” script and apply it to the obstacle and background.
Create a Spawn Manager
1. Create an empty “Spawn Manager” object and attach a SpawnManager.cs script.
2. Declare “public GameObject obstaclePrefab;” and assign prefab in Inspector.
3. Instantiate new obstacle prefab in Start().
Spawn Obstacles at Intervals
1. Move Instantiate call to a new “void SpawnObstacle” method.
2. Create float variables for “startDelay” and “repeatRate”.
3. Use InvokeRepeating() to spawn obstacles at intervals.
4. Freeze all but Y position in Rigidbody Constraints.
Script to Repeat Background
1. Create “RepeatBackground.cs” script and attach it to “Background” Object.
2. Declare and initialize startPos variable.
3. Reset position in Update() if it moves a certain distance.
Fix Background Repeat with Collider
1. Add Box Collider component to the Background.
2. Declare a private float repeatWidth variable.
3. Get the width of the box collider divided by 2 in Start().
4. Use repeatWidth in the repeat function.
Add a New Game Over Trigger
1. Add “Ground” and “Obstacle” tags to respective objects.
2. Declare “public bool gameOver;” in PlayerController.
3. Use OnCollisionEnter to test collisions and update gameOver.
Stop MoveLeft on GameOver
1. Declare and initialize PlayerController script reference in MoveLeft.cs.
2. Check gameOver condition in Update() before translating.
Stop Obstacle Spawning on GameOver
1. Get reference to PlayerController script in SpawnManager.cs.
2. Only instantiate objects if gameOver is false.
Destroy Obstacles that Exit Bounds
1. Add if-statement in Update() to destroy obstacles if their position is less than leftBound.
Explore the Player’s Animations
1. Explore Animation Controller layers, states, and transitions.
Set up a Jump Animation
1. Declare “private Animator playerAnim;” in PlayerController.cs.
2. Initialize playerAnim in Start().
3. Trigger jump animation in the jump if-statement.
Adjust the Jump Animation
1. Reduce speed of Running_Jump state animation.
2. Adjust player’s mass, jump force, and gravity modifier.
Set up a Falling Animation
1. Set Death bool to true and DeathType integer to 1 on obstacle collision.
Keep Player from Unconscious Jumping
1. Add “&& !gameOver” to the jump condition.
Customize an Explosion Particle
1. Drag “FX_Explosion_Smoke” into the hierarchy and adjust settings.
2. Make particle a child of the player and position it relative to the player.
Play the Particle on Collision
1. Declare “public ParticleSystem explosionParticle;” in PlayerController.cs.
2. Assign explosion in Inspector and play it on obstacle collision.
Add a Dirt Splatter Particle
1. Drag “FX_DirtSplatter” as the Player’s child object and adjust settings.
2. Declare “public ParticleSystem dirtParticle;” and assign it in Inspector.
3. Stop particle on jump or collision, play on landing.
Add Music to the Camera Object
1. Add Audio Source component to Main Camera.
2. Assign music clip to AudioClip variable in Inspector.
3. Reduce volume and enable Loop.
Declare Variables for Audio Clips
1. Declare “public AudioClip jumpSound;” and “public AudioClip crashSound;” in PlayerController.cs.
2. Assign sound clips in Inspector.
Play Audio Clips on Jump and Crash
1. Add Audio Source component to player.
2. Declare and initialize “private AudioSource playerAudio;”.
3. Play jump and crash sounds using PlayOneShot().
Challenge 3 - Balloons, Bombs, & Booleans
1. Balloon floats up on spacebar press.
2. Background moves at start and stops on game over.
3. Spawn bombs or money objects every few seconds.
4. Fireworks display at balloon’s position.
5. Repeat background seamlessly.
6. Bonus: Prevent balloon from floating too high.
7. Bonus: Make balloon bounce off the ground with sound effect.
___
INSTRUCTIONS
GAME IDEA PROPOSAL
Here are the two ideas I brainstormed for this project:
IDEA 1: Asher’s Sky Adventure
- Story introduction:
A brave explorer, filled with curiosity and excitement about the world beyond the clouds. Needs player help to guide the explorer through all the obstacles and reach new heights without crashing.
- Storyline:
There was a brave explorer named Asher who was full of curiosity and excitement about the world beyond the clouds. Every night, she would gaze at the stars, dreaming of what lay above the fluffy white blanket that covered the sky. One day, Asher discovered a magical hot air balloon hidden in the attic of her house. It was
old but sturdy, with a basket woven from enchanted vines and a balloon that shimmered with every color of the rainbow. Knowing this was her chance, Asher packed a small bag with essentials and set off on her grand adventure.
- Game setting:
Start the adventure by flying through the gaps in the clouds and thunderstorms, but watch out to avoid crashing into them.
Reach the Starry Night level, The explorer flies through a beautiful sky full of stars. But be careful for meteors (like moving obstacles) and space creatures trying to block the way. Help the explorer fly through gaps in the clouds without bumping into anything. After fly through the starry night, the adventure will end and level complete. The background will stay the same, but after completing Level 1, the scene will switch to scene 2 and the “Stage 2” title will pop up.
- Gameplay:
In this game, player can control an explorer flying through tricky places full of obstacles. Player make the explorer fly up by tapping or clicking. When let go, the explorer start falling again. The background doesn't move, like in old Mario games.
Inspiration:
This game is inspired by Flappy Bird, so it's easy to understand and fun to play. Player can control the explorer instead of bird flying through obstacles. Every time player tap or click, the explorer goes up, avoiding danger. The goal is to keep going without hitting anything. It's simple to play but really tough to master. Each time play Flappy bird, it feels like a new adventure, full of excitement and surprises.
IDEA 2: Jungle Escape
- Story introduction:
- Storyline:
- Game setting: There will be 3 stage to escape the scary jungle.
| Stage 1 - Wild Jungle:
In the wild jungle, the explorer faces many dangers like scary creatures and traps. Help the explorer navigate through the jungle safely, avoiding harm from these threats.
| Stage 2 - Ancient Temple:
Upon reaching the Ancient Temple, the explorer encounters frightening creatures that approach to attack. The explorer must defend against these creatures by fighting them off before they get too close.
| Stage 3 - Monster Village:
Upon reaching the Monster Village, flying monsters become obstacles along the way. The boss helped the explorer fly safely through, avoiding clashes with the monsters.
- Gameplay:
| Stage 1: Player are the explorer in a wild jungle, and the job is to jump over dangerous traps like pits and spikes. Just tap the button (spacebar) to make the explorer jump and avoid getting hurt.
| Stage 2: The jungle is full of scary monsters, player can shoot them by tapping on button (spacebar). Keep shooting until defeat all the monsters. Once they're all gone, player will meet the guardian of the temple and will get help by it.
| Stage 3: With the guardian of the temple help, player control a little pointer and need to move it around to dodge the monsters that are coming, with limited time. Once you've dodged them all, the explorer escaped from the jungle safely. Each stage brings new challenges, but with player skills, can help the explorer overcome
them and make it out of the jungle.
Google Drive Link File: https://drive.google.com/drive/folders/1czh6aRKoHT45DFXtvduTOKDIHtvm7oDq?usp=sharing
Final Game Idea: JUNGLE ESCAPE

Stage done:
Stage done:
| Character design:
The movement:
| Start (Main) page design:
inspiration/moodboard :
Background :
Elements:
Final :
| Game setting and gameplay: there will be 3 stages to escape the jungle.
- Stage 1 - Wild Jungle:
In a wild jungle, the explorer encounters many dangers such as frightening animals and hidden traps. The player’s goal is to help the explorer move through the jungle without getting hurt. As the player in this dangerous jungle, need to jump over all the traps and dangers like poison plants and frightening animals to stay safe. To make the explorer jump, press the spacebar. This will help the explorer avoid getting hurt.
Game Design Elements/Assets:
- Health points symbols x3 (3 HP - love)
- Poison plant x 4 (4 types)
- Grass block (short) : solid block covered in grass
- A green jungle background: with trees, sun, clouds..
Background:
Elements:
Final:

Stage done:
- Stage 2 - Ancient Temple:
When the explorer arrives at the Ancient Temple, scary creatures come forward and try to attack. The explorer must fight these creatures to stop them from getting too close. The temple is filled with these frightening monsters, and the player can shoot them by pressing the spacebar button. Keep pressing the spacebar to shoot the monsters until they are all defeated. After all the monsters are gone, the player will meet the guardian of the temple, who will offer help. The boss :"You win! Next, after leaving this temple, you'll come across a village of monsters. The boss of the temple admired your bravery and offered to assist you in escaping from here."
Game Design Elements/Assets:
- Health points symbols x3 (3 HP - love)
- Temple monsters x 4 (4 types)
- Shoot power (fire)
- Monster defeated symbol (star)
- Ancient orange/gold background: with ancient buildings and bricks
Background:
Elements:
Final:
Meet "boss'" : "You win! Next, after leaving this temple, you'll come across a village of monsters. The boss of the temple admired your bravery and offered to assist you in escaping from here."
- Stage 3 - Monster Village:
When the explorer arrived at the Monster Village, there were flying monsters blocking the path. The boss guided the explorer to fly through safely, avoiding the monsters. With the temple guardian's help, the player controls a small pointer and must move it to dodge the approaching monsters. If the players dodge all the monsters successfully, the explorer safely escapes the jungle.
Game Design Elements/Assets:
- Health points symbols x3 (3 HP - love)
- Flying Monster x1 (1Type)
- Temple boss who gives help to the explorer( A flying “boss”; Asher sits on the back)
- A dark spooky village background: with bats, small houses clustered together, groove, night cloudy sky..
Background:
Elements:
Final:Stage done:
- End stage: level complete and back to the main page.
- Game over -> immediately restart the stage (return to the starting point of the stage)
- Font: Silkscreen https://www.fontsquirrel.com/fonts/silkscreen
Prototype Presentation:
Final video presentation :
Game asset in final:
Netlify Link :https://jungleescape0355231.netlify.app
Video Link : https://youtu.be/7MEwp2G8IuY
Doc Link : https://docs.google.com/document/d/1AMC7o_pkiNWTZiFY4K24eOu02BInCjX6Tr1nxH0K-pY/edit?usp=sharing
______
REFLECTION
Over the past 14 weeks, working on the "Jungle Escape" game has been both challenging and rewarding. Started by planning the game idea, then moved on to designing characters and backgrounds, and finally coded the game mechanics. Along the way, I faced issues with console errors and debugging in Unity, which taught me a lot about problem-solving and patience. Despite these challenges, the experience helped me improve my skills in game development, from designing and coding to testing and presenting my final project.


























Comments
Post a Comment