Entradas

Final Game and Conclusion

Imagen
What I Built and How I Did It Throughout the development process, I got to work across nearly every Unity system: Scripting : I wrote dozens of custom scripts using to manage weapons, enemies, player controls, pickups, and more. I also used coroutines for actions like rolling invulnerability or UI transitions, and relied on Unity events to communicate between systems (like triggering win conditions when all enemies are dead).  Input & Vectors : I implemented the new Input System , allowing for both keyboard and arcade stick integration. Movement and aiming are handled using vectors to rotate the player or calculate bullet direction with precision. Physics : All movement and combat use Unity’s 2D physics engine . I configured rigidbodies , colliders , and triggers to manage everything from bullet impacts to object pushing. Careful layer setup and tag filtering helped prevent unwanted collisions (like enemies accidentally killing each other). Graphics & Audi...

Polishing, Win/Lose Conditions, Main Menu Setup and some other Bug Fixes

Imagen
Polishing, Win/Lose Conditions, Main Menu Setup and some other Bug Fixes This post is all about polishing the game experience, implementing win/lose conditions , and finally setting up a Main Menu to give the game a proper flow. Most of the mechanics were in place already, but now it’s about making sure everything feels smooth, responsive, and coherent. TileMap Pain (and Progress) First off: the TileMap slicing issue . I originally imported a tileset with incorrect grid settings, so some tiles weren’t aligned properly, causing seams and offset visuals in the scene. I went back, re-sliced everything using the correct pixel-per-unit and grid cell size, and re-painted the level. It was tedious but absolutely worth it. The environment feels more consistent now, and small things like tile alignment really DO affect how polished the game looks. Below is the final view of how the "FirstPlayable" level looks like. Of course, not everything in the above picture is made from the T...

Enemy AIs, UI logic and Adjusting Weapons Architecture

Imagen
NavMesh 2D, Changing Weapon's Architecture, and Implementing first UI For this blog post, I started by cleaning up the weapon system, then gave the enemies some actual AI, and implemented a Pause Menu. A Cleaner Way to Handle Guns At first, the weapons were just hardcoded actions. One script, one gun. But that wouldn’t scale, and it was starting to get messy. I was having some other problems as well, specially when grabbing and dropping the gun, because (for some reason), clones of the GameObject were being created instead of using the original. So I decided to restructure it using an abstract class called "GunBase". Every weapon now inherits from it and implements its own "Shoot()" method and other characteristics a weapon has (ammo, icon, audio, etc). For example, the pistol and machine gun now share the same structure but behave differently (semi-auto vs. full-auto). There’s also built-in logic for ammo, bullet speed, and reloading.  This approach makes i...

Core Gameplay Prototype

Imagen
Introduction So far, I’ve been building the foundation of the game by getting the core gameplay running: movement, shooting, and bullet ricochets. These mechanics define the entire feel of the game, so I wanted to make sure I nailed the basics before diving into level design or AI. Movement & Rotation I started by implementing 2D movement using Unity’s new Input System. The player can move using a joystick or keys, and optionally rotate toward the aim direction (in my current setup, that’s the mouse). A key aspect of the experience is that the player always faces where they’re aiming or moving, which makes the action feel more responsive. If you’re holding the "aim" button, the character rotates toward the cursor. Otherwise, the player rotates automatically based on movement direction. Shooting System & Bullet Behavior Next came the shooting system. Once the player picks up a gun, they can shoot in their current facing direction. Bullets are instantiated slightly ahea...

Game Design Document

Imagen
Game Design Document (Version 1.0) 1. Executive Summary Game Title:   Echo Kill Genre: 2D Top-Down Shooter Target Audience: Fans of fast-paced, high-difficulty action games (e.g., Hotline Miami, My Friend Pedro). Players who enjoy skill-based, tactical shooting mechanics. Project Scope: A small game with tight combat mechanics and replayability. Focus on player skill , and fast-paced  action. Developed in Unity (2D) , targeting the VIA Arcade Machine initially. 2. Gameplay Objectives: The player must eliminate all enemies in a level using a mix of shooting, melee, and movement mechanics . Might add a multiplayer 1vs1. Survive without getting hit (one shot = death). Master bullet bouncing  to eliminate enemies in creative ways. Game Progression: Levels are short but challenging , with increasing difficulty. Each level introduces new enemy types, obstacles, and layouts . Scoring system based on style (how many times the bullet bounce before killing an enemy), and the s...

Roll-a-Ball: Introduction to Game Development

Imagen
 Overview This post serves as an introduction to game development in Unity , using the  Roll-a-Ball tutorial as a foundation. The purpose of this exercise was to understand the basics of creating game objects, adding components, working with prefabs, scripting, and designing simple levels . This mini-project provided essential knowledge that will be applied to my main game development project for the VIA Arcade Machine in the XR Lab (which I already have the idea :D). Core Mechanics Physics-based movement: The player sphere uses a Rigidbody component to enable realistic movement. Player input handling: Implemented through Unity’s Input System , allowing responsive controls. UI and score tracking: TextMeshPro displays the player's collected items and if the player wins or loses dynamically. Game logic: A win condition triggers when all collectibles are picked up. This first picture is the script that allows a "PickUp" object to be picked up by setting the gameObject t...