Capital Waters: Dev Blog #2 - Kurallar ve Karakter Kontrolcüsü.
Ön Bilgi: Kurallar
Posta geçmeden önce, projenin gelişim süreci boyunca uymam gereken bazı kuralları açıklamak istiyorum, sonuçta kendimi geliştirdiğim ve test ettiğim bir portfolyo projesi olacak. İlk olarak eğer Unity‘nin içine entegre olmadığı sürece hazır assetlar ve kodlardan kaçınacağım, yani çoğu şeyi sıfırdan yazacağım. Hali hazırda 3 boyutlu modellemeci olduğum için bu modellerimiz için de geçerli, hepsini projenin gidişatına göre kendim yapma niyetindeyim. Kısacası,elimden geldiğince Unity Asset Store’u kullanmayacağım.
Karakter Kontrolcüsü: Mouse Movement System
Bu postumda Unity‘nin NavMesh sistemini kullanan karakter kontrolcüsünü yapacağım, tabi şimdilik çok kompleks bir şey yapmak istemiyorum ama en azından karakterin mouse sol tık ile hareket edebilmesini istiyorum. Başlangıç olarak karakterler, çevre gibi bir çok şey için placeholder kullanacağım, Unity ile beraber gelen basit geometrik şekiller bu ihtiyacımızı büyük bir şekilde karşılayacak.
Daha fazla uzatmadan Unity Hub‘ı açıp 3D Universal Render-Pipeline şablonu ile projemizi oluşturalım.
Şablon olarak URP seçmemin sebebi, performans açısından hafif olması. Oyunumun grafiklerini stilize ve gerçekçilik arasında bir yerde tutmak istiyorum, bu yüzden URP şablonu yeterli olacaktır. Projemizi açtıktan sonra ışıklandırma assetleri hariç bütün her şeyi projemden kaldırdım, bir çoğunu sonradan kendim ekleyeceğim ve şablonla beraber gelen çoğu asseti kullanmayacağım için yer kaplamasını istemedim. Böylece projemi geliştirdikçe assetlarımı kendi kullanım standartlarıma göre düzenleyebileceğim.
Kontrolcü sistemine geçmeden önce karakterimin üstünde duracağı bir platforma ihtiyacım var, bunun için basit bir plane işimi görecek. Plane’i oluşturtan sonra ise karakterimizi temsil edecek bir kapsül oluşturdum. Yönünü belirtmek için ise ileri eksenini temsil eden bir küp koydum. Görünülüğü arttırmak içinse hepsine birer materyal atadım.
Karakterin hareketini sağlamak için NavMesh kullacağımı belirtmiştim, bu sebepten dolayı ilk önce kapsül objemi bir NavMesh Agent olarak tanımlamam gerekiyor. Kapsül objesinin Inspector kısmından Add Component diyerek NavMeshAgent komponentini objeme tanımladım.
Şimdi karakterimizi asıl hareket ettirecek kısmı geldik, character movement script. Oyunum üstten bakmalı olduğu için Raycast adı verilen bir sistem kullanmam gerekiyor. Yani kameramızdan sürekli platforma vuran bir ışın olacak ve her mouse tıkında karakterin bu noktaya hareket etmesini sağlayacağım. Unity dokümantasyonuna iyice bir göz gezdirtikten ve bir kaç tutorialdan sonra, işlemin çokta zor olmadığını anladım. İstediğim sonucu elde etmem yaklaşık 10-15 dk dakika sürdü. Hatta ekstra olarak deneme amaçlı, “shift” tuşuna basıldığında karakteri fareyi takip edecek şekilde kendi etrafında döndürme özelliğini de ekledim.
Kodum bu şekilde:
Kamera: Cinemachine
Karakterimiz için kamera ve takip sistemi olarak Unity ile birlikte gelen Cinemachine aracını kullanacağım. Böylece kamera için kod yazmaktan kurtulmuş oluyorum ve üzerinde değişliklik yapmakta bir o kadar kolaylaşıyor. Unity ile beraber geldiği içinde kendime koyduğum kuralları çiğnememiş oluyorum.
Cinemachine ile bir yapay kamera oluşturup, ana kameraya bağladım ve body seçeneğinden framing transposer seçtim; nerdeyse hepsini denedim ama üstten bakış için en iyisi buydu. Follow kısmına daha önce oluşturduğumuz Capsule objesini tanımlayınca, kameramız karakterimizi takip etmeye başladı.
Sonuç:
Dilek, görüş ve sorularınız için web sitemin iletişim bölümünden ulaşabilirsiniz.
- Samet