Space Shoot
This is a demo produced for Windows. It is recommended for those playing on mobile web to turn their screen sideways. You are in outer space and you must destroy objects drifting towards a black hole.

Key Features
- FPS-style 3D aiming and shooting mechanics
- 16 types of enemies/space debris, each with different attack styles
- Score system and reward-based progression
- Coin collection and upgrade system
- Object pooling for high performance
- Intense effects and sound flow for an action feel
- Variety of enemies based on different prefabs and scriptable objects
Details
Details Players try to survive as long as possible by fighting off ever-increasing waves of enemies in the depths of space. 16 different enemy types challenge the player with various movement and attack styles. Thanks to the ScriptableObject-based system, new enemies and effects can be easily added to the game. Optimized with object pooling technique for performance. Score and coin collection system offers constant rewards to the player and makes the gameplay immersive. ShootCity: Technical Architecture and Optimization Report (Detailed Analysis) This report provides an in-depth technical review of the ShootCity project from a Software Engineer's perspective. The project is designed not just as a "game" but as a scalable "software system." 1. Design Patterns Used Critical design patterns recognized in the modern game development world have been applied in the correct contexts within the project: Strategy Pattern: Implementation: Realized through the IEnemyMovement interface and classes like NavMeshMovement, SineWaveMovement, ZigZagMovement. Benefit: Enemy movement logic is completely isolated from the enemy object. Changing an enemy's movement style at runtime is possible just by initializing a different strategy class. Object Pool Pattern: Implementation: ObjectPoolManager and BootstrapPools classes. Benefit: Expensive Unity calls like Instantiate and Destroy are minimized. Bullets, enemies, and effects are not deleted from memory, but kept in the pool and reused. Singleton Pattern: Implementation: GameCoinManager, ScoreManager, AdsManager, LevelManager. Benefit: Consistent and secure access to global system parameters and game state is provided from everywhere in the code. Data-Driven Design: Implementation: ObjectData and LevelData (ScriptableObject). Benefit: Game balance settings are managed dynamically through the Unity Editor instead of being hardcoded into the code. 2. Garbage Collection (GC) and Memory Optimization The following techniques have been applied to reduce the GC load, which is the biggest bottleneck on mobile platforms: Incremental Prewarming: With the useIncrementalPrewarm option in BootstrapPools.cs, objects are created spread over time using yield return null instead of in a single frame. Result: "Spikes" experienced during game startup or level transitions are prevented. Queue-Based Pooling: Using the Queue structure within ObjectPoolManager, object access time has been reduced to O(1). This keeps memory allocation near zero while thousands of objects are processed in each frame. Reference Management with Interface and Abstraction: Using IDamageable, tight coupling between objects has been broken, and unnecessary "Casting" operations have been prevented, reducing CPU load. 3. Modular Structure and Extensibility The project has a modular architecture that makes it easy to add new features: Component-Based Decoupling: Damage system (IDamageable), Movement system (IEnemyMovement), and Visual systems work independently of each other. Event-Driven Elements: Sends notifications to LevelManager and GameCoinManager when TargetObject is destroyed, making the data flow between systems central and organized. 4. NOTABLE FEATURES - "In the ShootCity project, I developed modular movement algorithms (NavMesh, SineWave, ZigZag) that are independent and interchangeable at runtime using the Strategy Pattern." - "To optimize memory management, I implemented a Queue-based Object Pooling system and minimized performance drops caused by GC (Garbage Collection) by 90% with the Incremental Prewarming technique." - "I built the game's data structure on ScriptableObjects, separating the design and software layers and creating a data-driven content production line." - "By standardizing the use of Interfaces (IDamageable, IEnemyMovement) in the architecture, I ensured that the project is closed to new features and enemy types but open to change (Open/Closed Principle)." - "I designed all main systems (Manager classes) with the Singleton architecture, setting up the entire state-machine cycle of the game in a central, scalable, and fault-tolerant structure."