🇹🇷 Kitchen Chaos; oyuncunun verilen süre içerisinde, ekrandaki rastgele yemek tariflerini doğru bir şekilde teslim etmesi gereken Overcooked benzeri Single Player bir 3D Unity oyunudur.
🇪🇳 Kitchen Chaos is a Single-Player 3D Unity game similar to Overcooked, where the player must correctly deliver random recipe orders on the screen within a given time.
Gameplay_Video.mp4
🇹🇷 Bu proje, Code Monkey dersinin uygulamasını içermektedir. Bu dersle birlikte Unity ile oyun geliştirirken gerekli olan temel ve ileri seviye Unity, Game Design Patterns, C#, Clean Code, SOLID Principles gibi birçok önemli concepti uygulamalı olarak öğrenme ve deneme fırsatı edindim.
🇪🇳 This project includes the implementation of the Code Monkey tutorial. Alongside this tutorial, I had the opportunity to learn and practice essential and advanced concepts in Unity game development, such as Unity, Game Design Patterns, C#, Clean Code, and SOLID Principles, in a hands-on manner.
The Concepts I Learned and Applied with this Course: |
---|
✔️ Naming Rules |
✔️ Unity Layout |
✔️ Unity Execution Order |
✔️ URP |
✔️ Post Processing (Color Correction, Bloom, Vignette, Screen Space Ambient Occlusion and Anti-Aliasing) |
✔️ Particles |
✔️ Lerp / Slerp |
✔️ Animation System |
✔️ Cinemachine |
✔️ New Input System (Keyboard + Mouse / Gamepad) |
✔️ Input Rebinding |
✔️ Character Controller |
✔️ Collisions and Interactions |
✔️ Raycast, Capsule Cast |
✔️ Unity Layers, LayerMask |
✔️ Unity Prefabs |
✔️ Enums |
✔️ Delegates, Actions, C# Events, EventHandlers |
✔️ Statics |
✔️ Singleton Pattern |
✔️ Scriptable Object |
✔️ Inheritance |
✔️ Interfaces |
✔️ Generics |
✔️ Structs |
✔️ Canvas, UI (Menu UI, Fail / Succes UI, Progress Bar UI etc.) |
✔️ State Machine |
✔️ Shader Graph |
✔️ Audio Source, Audio Clips |
✔️ Scene Loading |
✔️ Game Pause |
✔️ Player Prefs (Data Saving) |
Bu projedeki oyun geliştirme serüvenim, çeşitli konuları içererek hem teknik hem de yaratıcı becerilerimi geliştirmeme olanak sağladı. Daha önceden bildiğim ama uygulama fırsatı bulamadığım önemli OOP konseptlerini, Game Development Design Pattern'lerini ve Unity'deki Tool'ları kullanma imkanı buldum.
Proje içindeki değişken, fonksiyon ve nesneleri uygun bir şekilde adlandırma konusundaki önemi öğrendim. Bu, kodun anlaşılırlığını artırıp ve işbirliğine uygunluğu sağladı.
Unity'nin kullanıcı arayüzünü efektif bir şekilde kullanmayı öğrenerek, projelerimi daha düzenli ve erişilebilir hale getirdim. Bu, çalışma verimliliğimi artırdı.
Oyun nesnelerinin işlem sırasını anlamak, oyun mekaniğimi daha iyi kontrol etmemi sağladı. Bu, düzgün bir oyun akışı oluşturmamı sağladı. Execution Order'ın oyun geliştirmede ne kadar yararlı olduğunu ama aynı zamanda dikkat edilmezse çok kolay hataya sebebiyet verebileceğini anladım.
URP kullanarak, oyunumun grafik kalitesini artırma ve performansı optimize etme yeteneği kazandım.
Color Correction, Bloom, Vignette, Screen Space Ambient Occulusion ve Anti-Aliasing gibi post proccessing efektlerini kullanarak, oyunun atmosferini ve görsel çekiciliğini iyileştirdim.
Unity'nin Particle System ve Animation System'ini kullanarak, yaptığım oyundaki dünyayı canlandırmak ve daha etkileyici bir deneyim sunmak konusunda beceri kazandım.
- Player'ın yürüme durumunda ve ocakta et pişme durumunda tetiklenen particle effectler kullandım. Aynı zamanda Player'a Walking ve Idle animasyonu, yemek malzemelerinini kesme animasyonu gibi animasyonlar ekleyerek Animation System'i sıkça kullandım.
Klavye, fare ve gamepad gibi farklı giriş cihazlarını etkili bir şekilde yönetme yeteneği kazandım. New Input System sayesinde oyuna farklı input destekleri kazandırmanın ne kadar kolay olduğunu gördüm.
Unity'nin bu aracı sayesinde kamera kontrolünü optimize etmeyi ve oyun içinde etkileyici görsel deneyimler oluşturmayı öğrendim. Cinemachine sayesinde; kamera takibi, zoom, yandan bakış gibi birçok özelliği basitleştirerek karmaşık kamera sistemleri kolayca oluşturabileceğimi ve yönetebileceğimi anladım.
Character Controller kullanarak, oyuncu karakterimin hareketini ve etkileşimlerini daha doğru bir şekilde yönetme becerisi kazandım. Bunu yaparken input dinleyerek gelen input Vector'unu kullanarak transform ile Player'ın hareket etmesini sağladım.
Collisions and Interactions konusunda derinlemesine bilgi edindim. Bu, oyun dünyamda daha gerçekçi ve dinamik etkileşimler oluşturmama yardımcı oldu.
Fizik tabanlı etkileşimlerde ve çarpışma algılamada kullanılan raycasting ve capsule casting tekniklerini öğrenerek, nesneler arası etkileşimlerimi daha hassas bir hale getirdim. Eskiden kullandığım OnCollisionEnter, OnTriggerEnter gibi yapılar yerine CapsuleCast ve RayCast gibi yapıların çok daha esnek ve performans yönünden faydalı olduğunu anladım. Bu nedenle gerektiği yerlerde OnCollisionEnter, gerektiğinde de RayCast gibi yapıların kullanılmaya karar verdim.
Oyun nesnelerini ve etkileşimlerini katmanlar aracılığıyla düzenleyerek, performansı artırma ve karmaşık sahneleri daha iyi yönetme yeteneği kazandım.
Prefab ve enum kullanarak, oyun nesnelerini daha verimli bir şekilde oluşturmayı ve yönetmeyi öğrendim.
Delegate ve event kullanarak, oyun içindeki olayları etkili bir şekilde yönetmeyi ve kodumun daha modüler olmasını sağlamayı öğrendim.
Singleton ve Static yapıları sayesinde, verileri paylaşma ve tek bir örnek üzerinden erişim sağlama yetenekleri kazandım.
Scriptable Object kullanımı ile oyun verilerini daha esnek bir şekilde düzenleyebilme ve sürdürülebilirliği artırma konusunda deneyim kazandım.
Sınıflar arasında kodun paylaşılmasını sağlayarak ve farklı nesnelerin ortak davranışlarını tanımlayarak, kodumu daha organize hale getirdim. Böylece kod hem daha anlaşılır hem de refactor edilmeye daha müsait ve modüler bir hal aldı. Proje büyüdükçe, kod yapısının bu şekilde tasarlanmasının aslında projenin Spaghetti Code yapısına bürünmemesi açısından ne kadar önemli olduğunu anladım.
Generics kullanarak daha esnek veri yapıları oluşturma yeteneği kazandım. Ayrıca, Class yapısı yerine daha hafif ve performans odaklı Struct yapısının kullanımını öğrenerek, kod verimliliğimi artırdım.
UI tasarımı ve implementasyonunda Canvas kullanımıyla, kullanıcı arayüzünü daha çekici ve kullanıcı dostu bir hale getirme yeteneği kazandım. UI elemanlarının kullanıcının ekranına göre uyum sağlayabilir bir yapıda olmasını sağladım.
State machine kullanarak, oyun karakterinin farklı durumlar arasında geçiş yapmasını ve davranışlarını düzenlemeyi öğrendim. Bu, oyun karakterinin daha modüler ve kontrol edilebilir olmasını sağladı.
Shader Graph kullanarak, özel görüntü efektleri oluşturmayı ve oyunun görsel estetiğini artırmayı öğrendim. Oyundaki Delivery Counter'ın üzerindeki ok işaretinin hareketli olmasını sağladım ve farkettim ki ShaderGraph'ler çok kullanışlı ve eğlenceli yapılar.
Unity'nin audio sistemi ile Audio Source ve Audio Clipleri yönetmeyi öğrenerek, oyun atmosferini zenginleştirmeyi başardım. Aynı zamanda menüye ses kontrol arayüzü de ekleyerek kullanıcıya ses seviyelerini ayarlama imkanı sağladım.
Sahneler arası geçişleri yöneterek, oyun içinde farklı bölümleri etkili bir şekilde yüklemeyi ve yönetmeyi öğrendim.
Oyunun duraklatma mekanizmasını oluşturarak, kullanıcıya daha iyi bir oyun kontrolü sağlamayı öğrendim.
PlayerPrefs kullanarak oyun verilerini saklamayı ve kullanıcı ilerlemesini kaydetmeyi öğrenerek, oyunun sürekli bir deneyim sunmasını sağladım.
My game development journey in this project has provided the opportunity to enhance both technical and creative skills, covering various aspects. I had the chance to apply essential OOP concepts, and game development design patterns, and utilize Unity tools that I previously knew but hadn't implemented. This project allowed me to apply and solidify these skills, contributing to a well-rounded game development expertise.
Learned the importance of appropriately naming variables, functions, and objects in the project, enhancing code readability and collaboration.
Mastered effective use of Unity's user interface, creating more organized and accessible projects, thereby improving workflow efficiency.
Understanding the processing order of game objects facilitated better control of game mechanics, ensuring a smooth game flow.
Gained the ability to enhance graphic quality and optimize performance using URP.
Improved the game's atmosphere and visual appeal through the use of post-processing effects like Color Correction, Bloom, Vignette, Screen Space Ambient Occlusion, and Anti-Aliasing.
Utilized Unity's Particle System and Animation System to bring the game world to life, creating a more immersive experience.
Effectively managed different input devices, such as keyboard, mouse, and gamepad, enhancing the game's accessibility. The New Input System provided an easy way to add various input support to the game.
Learned to optimize camera control and create impressive visual experiences using Unity's Cinemachine tool, simplifying complex camera systems.
Acquired the skill to precisely manage the movement and interactions of the player character using the Character Controller.
Deepened knowledge in handling collisions and interactions, creating more realistic and dynamic in-game experiences.
Learned to use raycasting and capsule casting techniques for precise interaction and collision detection, replacing traditional methods in certain situations for better flexibility and performance.
Organized game objects and interactions using Unity Layers and LayerMask, enhancing performance and managing complex scenes more effectively.
Efficiently created and managed game objects using Prefabs and Enums.
Managed in-game events effectively using Delegates and Events, making the code more modular.
Utilized Singleton and Static structures to share data and provide access through a single instance.
Used Scriptable Objects to organize game data more flexibly, enhancing sustainability.
Organized code by facilitating code sharing between classes and defining common behaviors for different objects, promoting code modularity.
Utilized Generics for creating flexible data structures and learned the performance-oriented usage of Structs, improving code efficiency.
Enhanced user interface design using Canvas, making it more attractive and user-friendly.
Implemented a state machine to manage the player character's different states, enhancing modularity and control.
Used Shader Graph to create custom visual effects, improving the game's aesthetic appeal.
Managed audio sources and clips using Unity's audio system, enriching the in-game atmosphere.
Learned to manage scene transitions effectively, loading and handling different sections of the game.
Implemented a game pause mechanism, providing users with better control.
Used PlayerPrefs to store game data, ensuring a continuous gaming experience for users.
📌 Git, GitHub
📌 Visual Studio 2022
📌 Unity 2022.2.13f1
📌 Universal Render Pipeline
📌 Unity Cinemachine
📌 Unity Shader Graph
📌 Unity (New) Input System
📌 Unity UI
📌 Unity TextMeshPro
- Windows x64
- webGL
- Soon...
-
Restart Button
-
Selectable Player Color
-
Android Build Features
- Touchscreen Support
- Landscape Rotation
- Optimize for mobile
-
Multiplayer Support
I would like to express my sincere gratitude to Code Monkey (Hugo) for sharing his knowledge with us through this educational video series and for his mentorship during the challenges we encountered. I am truly thankful to Hugo for his guidance. His instructional approach and passion for game development played a crucial role in the realization of this project. The educational materials he provided not only contributed to my growth as a game developer but also enriched my journey as a learner.
The dedication shown and the value of the shared information have turned this project into more than just a technical achievement—it has become a learning journey and a community experience. Hugo's commitment and the significance of the shared knowledge have made this project a profound learning experience.
If you are a video game development learner then you should check Hugo's YouTube Page.