Stick & Step is a hyper-casual 2D precision timing mobile platformer where players build bridges of dynamic lengths by holding and releasing the screen to traverse procedurally spaced pillars.
This repository serves as an Engineering Showcase & Architectural Case Study, keeping commercial binary assets (licensed artwork, SDK plugins, release keystores) private while displaying core gameplay algorithms, procedural locomotion physics, event-driven shop architecture, and the Google Play Target SDK 36 (Android 15) custom build pipeline.
StickController.cs)Bridge extension operates proportionally to input duration. Instead of basic linear rotation, the fall simulation is driven by a quadratic curve ($t^2$) using Quaternion.Slerp to mimic realistic gravitational acceleration. Landing checks verify bounding box coordinates:
private IEnumerator FallRoutine()
{
Quaternion startRotation = transform.rotation;
Quaternion targetRotation = Quaternion.Euler(0f, 0f, -90f);
float elapsed = 0f;
while (elapsed < fallDuration)
{
elapsed += Time.deltaTime;
float t = elapsed / fallDuration;
transform.rotation = Quaternion.Slerp(startRotation, targetRotation, t * t); // Gravity acceleration simulation
yield return null;
}
transform.rotation = targetRotation;
currentState = StickState.Walking;
EvaluateFall();
}
PlayerController.cs)Character movement eliminates traditional animator overhead by calculating tilt and bounce through procedural trigonometric equations:
Mathf.Sin(walkTimer) * tiltAngle produces responsive angular sway.Mathf.Abs(Mathf.Cos(walkTimer)) * bounceHeight creates vertical step bounce.timeout ensures the player never enters an unrecoverable infinite loop during physics edge cases.float currentTilt = Mathf.Sin(walkTimer) * tiltAngle;
float currentBounce = Mathf.Abs(Mathf.Cos(walkTimer)) * bounceHeight;
visualTransform.localRotation = Quaternion.Euler(0f, 0f, -currentTilt);
visualTransform.localPosition = initialVisualLocalPos + new Vector3(0f, currentBounce, 0f);
ShopManager.cs)Built with zero rigid scene couplings using C# Action OnShopUpdated delegations:
Ad 0/4) handled within an unified model.| Component | Technology / Standard |
|---|---|
| Engine | Unity 2022.3.62f2 LTS (Security Patched Runtime) |
| Language | C# (.NET Standard 2.1), Async/Delegates |
| Build System | Unity Gradle Export ➔ Android Studio Pipeline |
| Target SDK | compileSdk 36, targetSdk 36 (Android 15), minSdk 24 |
| Distribution | Google Play Closed Testing (Active 14-day compliance period) |
| Monetization | Google Mobile Ads (AdMob) Rewarded / Interstitial / Banner |
| Legal & Privacy | Hosted on GitHub Gist (GDPR & Google Play Compliant) |
Stick & Step, oyuncuların ekrana basılı tutup bırakarak değişken uzunlukta köprüler inşa ettiği ve prosedürel aralıklarla yerleştirilmiş sütunlar üzerinde ilerlediği, hassas zamanlama odaklı 2D hiper-gündelik (hyper-casual) bir mobil platform oyunudur.
Bu depo, oyunun ticari varlıklarını (lisanslı görsel materyaller, SDK eklentileri, release anahtar dosyaları) gizli tutarak; çekirdek oyun algoritmalarını, prosedürel hareket fiziğini, olay güdümlü (event-driven) mağaza mimarisini ve Google Play Target SDK 36 (Android 15) özel derleme boru hattını (build pipeline) sergileyen bir Mühendislik Vitrini ve Mimari Vaka Analizidir (Case Study).
StickController.cs)Çubuğun uzama miktarı, kullanıcının ekrana basılı tutma süresiyle doğru orantılıdır. Düşüş simülasyonu basit lineer bir rotasyon yerine, gerçekçi yer çekimi ivmesini taklit etmek amacıyla Quaternion.Slerp fonksiyonu üzerinde kuadratik bir eğri ($t^2$) ile çalıştırılır. İniş kontrolü sınır koordinatları (bounding box) üzerinden hesaplanır:
private IEnumerator FallRoutine()
{
Quaternion startRotation = transform.rotation;
Quaternion targetRotation = Quaternion.Euler(0f, 0f, -90f);
float elapsed = 0f;
while (elapsed < fallDuration)
{
elapsed += Time.deltaTime;
float t = elapsed / fallDuration;
transform.rotation = Quaternion.Slerp(startRotation, targetRotation, t * t); // Yer çekimi ivmesi simülasyonu
yield return null;
}
transform.rotation = targetRotation;
currentState = StickState.Walking;
EvaluateFall();
}
PlayerController.cs)Karakterin yürüme animasyonları geleneksel animatör yükünü ortadan kaldırarak prosedürel trigonometrik formüllerle hesaplanır:
Mathf.Sin(walkTimer) * tiltAngle ile adıma duyarlı açısal eğilme üretilir.Mathf.Abs(Mathf.Cos(walkTimer)) * bounceHeight ile adım başına dikey sekme oluşturulur.timeout güvenlik kilidi barındırır.float currentTilt = Mathf.Sin(walkTimer) * tiltAngle;
float currentBounce = Mathf.Abs(Mathf.Cos(walkTimer)) * bounceHeight;
visualTransform.localRotation = Quaternion.Euler(0f, 0f, -currentTilt);
visualTransform.localPosition = initialVisualLocalPos + new Vector3(0f, currentBounce, 0f);
ShopManager.cs)Sahneler arasında katı bağımlılıklar olmadan, C# Action OnShopUpdated delege yapısı üzerine inşa edilmiştir:
Reklam 0/4) tek bir model üzerinden yönetilir.| Bileşen | Kullanılan Teknoloji / Standart |
|---|---|
| Oyun Motoru | Unity 2022.3.62f2 LTS (Güvenlik yamaları uygulanmış runtime) |
| Programlama Dili | C# (.NET Standard 2.1), Async/Delegates |
| Derleme Ortamı | Unity Gradle Export ➔ Android Studio Derleme Hattı |
| Hedef SDK | compileSdk 36, targetSdk 36 (Android 15), minSdk 24 |
| Yayınlama | Google Play Kapalı Test (14 günlük aktif test periyodu) |
| Monetizasyon | Google Mobile Ads (AdMob) Rewarded / Interstitial / Banner |
| Yasal & Gizlilik | GitHub Gist üzerinde barındırılmaktadır (GDPR & Google Play Uyumlu) |
© 2026 MHT Software - Mehmet Açıkgöz. All rights reserved. / Tüm hakları saklıdır.
Bu depodaki kod parçaları mimari portföy ve teknik inceleme amacıyla açık tutulmaktadır. Ticari materyaller ve görseller izinsiz kullanılamaz.