Parking Perfect! ๐Ÿš—๐ŸŽฎ

Parking Perfect! is an arcade-style car parking game built with Unity Engine for WebGL and Android platforms. The goal of the game is to park the car in the designated parking area without hitting any traffic cones. The game features intuitive controls, smooth animations, and a dynamic economy system. The project follows SOLID and OOP principles with a strong focus on performance and clean code.

๐ŸŽฅ Gameplay Video


๐ŸŽฎ Gameplay Overview

In Parking Perfect!, players control a car using either keyboard or on-screen controls:

  • Web Controls: WASD for movement and Space for the handbrake.
  • Mobile Controls: On-screen buttons for forward, reverse, left, right, and handbrake.

๐Ÿ–ผ๏ธ Screenshots

Menu SceneGameplay Scene
Menu Gameplay

Objective:

  • Park the car perfectly without hitting any traffic cones.
  • Earn up to 3 stars based on your performance.
  • Stars and parking success are rewarded with in-game currency.
  • Damage to the car affects both the stars earned and the amount of money rewarded.
  • Health reaches zero? The level fails, but you still earn a small consolation reward.

๐ŸŒŸ Key Features

  • Arcade Car Controls: Realistic and responsive controls that are easy to pick up but challenging to master.
  • Smooth Camera Follow: The camera dynamically follows the player's car, ensuring smooth and isometric transitions.
  • Dynamic Level Management: Each level is loaded dynamically with obstacles and parking areas.
  • Damage & Health System: Real-time health updates based on collisions with obstacles like traffic cones.
  • Car Selection & Economy: Unlock new cars and manage your in-game currency through our gallery system.
  • 2 Playable Cars & 10 Test Levels: Start with two different cars, each with unique handling, and test your skills across ten challenging levels.

๐Ÿ› ๏ธ Technologies Used

  • Unity Engine: Game development and scene management.
  • C#: Core programming language, following SOLID and OOP principles.
  • DOTween: Smooth animations and transitions for UI elements and gameplay events.
  • Scriptable Objects: Flexible and reusable game data management (e.g., car configurations, levels, etc.).
  • Singleton Pattern: Efficient management of game managers and critical systems.
  • JSON Data Saving: Game progress and player data are saved in JSON format via PlayerPrefs for persistence.

๐Ÿ“š Architecture & Design

Parking Perfect! is designed using modular and scalable components, adhering to SOLID principles. The following are some of the core architectural patterns and code management approaches used:

  • Management-Based Architecture: Managers are responsible for specific areas of functionality like level loading, UI updates, economy management, and player input.
  • Scriptable Object Pattern: This pattern provides flexibility in managing game data such as car configurations, player progress, and game settings.
  • Interfaces and Abstract Classes: The damage system is implemented through interfaces (IDamageableIDamager) and abstract base classes (AbstractDamageableBaseAbstractDamagerBase) to ensure flexibility and reusability.

Key Components:

  • CarController.cs: Handles player input and car physics. Input is processed through the InputHandler.cs and PlayerInputSO scriptable object.
  • CarDamageHandler.cs: Manages player health, damage, and death events, using AbstractDamageableBase.
  • CarParkingChecker.cs: Verifies if the player successfully parks the car.
  • Obstacle.cs: Implements collision logic that damages the player when they hit obstacles (e.g., traffic cones).
  • CustomButton.cs: A custom button implementation using DOTween for smooth scale animations.
  • SaveManager.cs: Manages game saving and loading, using JSON formatting to store data in PlayerPrefs.

๐Ÿ“Š Game Flow

  • Menu Scene: The player can start the game, change cars, access the settings (sound/music settings), or exit the game.
  • Game Scene: Upon starting the game, the LevelManager.cs loads the selected level and manages the car, parking area, and obstacles.
  • Game Data: The game's progress, including the list of unlocked levels, earned money, and purchased cars, is managed by the GameData scriptable object. All changes are saved via the SaveManager.cs system.

๐Ÿ“ฆ Asset Credits

Contact Information

Made with ๐Ÿ’™ by Erkan Yaprak

Leave a comment

Log in with itch.io to leave a comment.