Merhaba dostlar, bu yazımızda daha önce youtube kanalımızda çektiğimiz Unity Patlamalı Rollerball adlı Rigidbody örneğini biraz daha güncelleyerek, nasıl oluşturacağınızı adım adım anlatacağız. Aşağıdaki görselde projenin nasıl gözükeceğini görebilirsiniz.
Şimdi gelelim hazırlıklara. Öncelikle boş bir proje açabilirsiniz veya varolan bir proje üzerinden devam edebilirsiniz, tercih sizin. Daha sonrasında ilk olarak yapacağımız iş, görselliği biraz arttırmak adına 2 paket yüklemek. İlki Unity Particle Pack, bu paket içerisinde çeşitli particle sistem prefablarını hazır halde kullanmamızı sağlıyor. Ufak bir uyarı, eğer hali hazırda farklı ayarlamalara sahip bir projenize ekleyecekseniz, import ederken “Projects Settings” adlı klasördeki tiki kaldırın. Ayrıca tamamını projeye eklemenize de gerek yok, ancak tamamını indirip incelemenizi öneririm.. Diğer paket ise Grid Box Prototype Materials, bu paket içerisinde daha çok prototip aşamasında kullanabileceğimiz bazı materyaller bulunduruyor. Genel proje başlangıçları için de kullanmanızı önereceğim bir paket.
Patlamalı RollerBall Sahne Tasarımı
Sahne tasarımı için yapacaklarımız aslında gayet basit olacak. Yazının öncesi görebileceğiniz gibi, birbirinden ayrı şekilde platformlar ve patlama efekti ile diğerine geçişi sağlamak için bu platformlar üzerinde kapsüller bulunuyor. Zemin olarak “Cube” objeleri kullanıp daha inceltenizi öneririm. Daha sonrasında indirdiğimiz materyal paketindeki materyalleri kullanarak istediğiniz gibi renklendirebilirsiniz. Ben zemin için mavi, zıplama kapsülleri için de kırmızı ve bitiş alanı için yeşil renkli kullandım. Kabaca hazırladığım sahneyi göstermek isterim, size de bir yol oluşturur. Bu arada dikkat etmeniz gereken şey, sahnemizin Z ekseninde ilerleyeceği.
Unutmadan, kapsüllerin Collider bileşenini isTrigger aktif halde ayarlanız gerekiyor. Karakterimiz hareket ederken bu nesnelerin fiziksel şeklinden etkilenmeyecek, onları sadece o alana girdiklerini anlamak için kullanacağız. Ayrıca kapsül objelerinin altobjesi olarak “Small Explosion” adlı prefab’ı eklememiz gerekiyor. Ve bu prefabı ekledikten sonra prefab ve altoblerini seçip hepsinde Inspector panelinde “Particle System” bileşeninin altında bulunan “Looping” ve “Play On Awake” adlı seçeneklerden tiki kaldırmamız gerek. Çünkü sadece patlama anında ve tek sefer çalışmasını istiyoruz. Eğer looping aktif olursa, tik atılmış halde olursa, particle system animasyonları sürekli çalışacaktır. Ve “Play On Awake” aktif olursa da oyun başlar başlamaz efekt çalışacaktır. Farklı efektleri kullanmak isterseniz de farklı prefabları kullanabilirsiniz. Ve son olarak, kapsülümüze “Ziplatici” adlı bir c# dosyası oluşturup ekliyoruz.
Platform kısmı tamam, şimdi yapmamız gereken şey karakterimizi eklemek. Basit bir küre (Sphere) işimizi görecektir. Bunu sahneye ekledikten sonra “Add Component” kısmından Rigidbody bileşenini ekledikten sonrası işlemlerimiz tamam. Hazır elinizi atmışken “KarakterKontrol” adlı bir script oluşturup onu da ekleyebilirsiniz, çünkü yazının devamında kodlama kısmına geçeceğiz. Şayet bileşenleri nasıl ekleyeceğinizi bilmiyorsanız, “Unity GameObject Nedir?” adlı yazımızdan bileşen ekleme ve GameObject konusunda daha fazla bilgiyi elde edebilirsiniz.
Ve kamera ayarlarına gelirsek, kodlama kısmnda kameraya basit bir takip kodu ekleyeceğiz. Bu yüzden iyi konumlandırma yapıp oynanışta etrafı görmemizi olabildiğince mümkün kılmak gerekiyor. Ben karakterin baya bir üstüne ve hafif arka çaprazına alacağım. Ayrıca isterseniz “Camera“ bileşeni altında “Clear Flags” seçeneğini “Solid Background” yapıp, “Background” özelliğiyle bir renk atayabilirsiniz. Ardından da “BasitTakip” isimli bir c# dosyası oluşturup kamerama ekliyorum. Sahne tasarımı artık hazır, şimdi kodlamaya geçelim.
Unity Patlamalı RollerBall Kodlama Kısmı
Patlamalı RollerBall kodlama kısmı basit de olsa, daha organize şekilde çalışabileceğimiz şekilde düşünmemiz gereken bir konu. Bu oyun için bir sürü seviye hazırladığımızı düşünelim. Her seviyede platformlar birbirinden farklı uzaklıkta olacak, farklı yükseklikte olacaktır. Haliyle her ziplatici kapsülümüzün daha farklı kuvvet uygulayacak şekilde olması gerekir. Bu kadar basit bir konu olmasına rağmen scriptler arasında görev bölümünü iyi yapmamız gerekiyor. Şimdi adım adım ilerleyelim.
KarakterKontrol : Karakter kontrol kodumuzun temel işlevi kullanıcıdan kontrol almamız ve karakteri hareket ettirmemiz olacak. Ayrıca zıplatıcı kapsül objelerinin Rigidbody bileşenine rahatlıkla erişebilmesi için public halde bir property-özellik barındırmalı.
Rigidbody rgb;
//dışarıdan erişim için gerekli alan-özellik
public Rigidbody KarakterRgb {
get {
return rgb;
}
}
//kullanıcının kontrolünde kullanacağımız hız değişkeni
[SerializeField]
float hiz = 7f;
void Start () {
//başlangıça Rigidbody bileşenine erişiyoruz
rgb = GetComponent<Rigidbody> ();
}
void Update () {
//Horizontal(A-D tuşları) ve Vertical(W-S tuşları) ile
//kullanıcıdan komutlar alıyoruz. Bu değerler -1 veya 1 olabiliyor
float h = Input.GetAxis ("Horizontal");
float v = Input.GetAxis ("Vertical");
//eğer herhangi bir şekilde kullanıcı bize değer gönderiyorsa
//yani kontrol ettiğimiz axis değerlerinden ikisi de 0 değilse
//objeye kuvvet uyguluyoruz
if (h != 0 || v != 0) {
Vector3 hareket = new Vector3 (h, 0, v) * hiz;
rgb.AddForce (hareket);
}
}
Ziplatici :Zıplatıcı kodumuzda yapacağımız 2 şey var, karakterimizin bu obje ile teması bittiği anda karakterimizi Rigidbody bileşeni aracılığıyla kuvvet uygulayarak zıplatmak ve patlama görselini aktif hale getirmek. Ayrıca daha önce bahsettiğimiz gibi, her zıplatıcının farklı kuvvetler uygulamasını sağlamamız gerekiyor.
//kod üzerinde atama yapmadığımız için 0 değerine sahip olacaktır
//her kapsülden zıplamak istediğiniz platforma göre bu değerleri ayarlamanız gerekir
//ziplamaCarpani ne kadar büyük kuvvet uygulanacağı
//ziplamaYuksekligi de yukarı doğru ekstra uygulanacak kuvvet çarpanını belirtiyor
[SerializeField]
float ziplamaCarpani, ziplamaYuksekligi;
ParticleSystem efekt;
void Start () {
//AltObjedeki ParticleSystem bileşenine erişiyoruz
efekt = GetComponentInChildren<ParticleSystem> ();
}
//Obje ile diğer diğer objenin çakışması-içiçe geçmesi bittiği anda çalışacak
void OnTriggerExit (Collider digerObje) {
//diğer objenin içerisinde KarakterKontrol bileşenine erişmeye çalışıyoruz
KarakterKontrol karakter = digerObje.GetComponent<KarakterKontrol> ();
//eğer diğer objeden KarakterKontrol isimli bileşene erişebilirsek
//karaktere kuvvet uygulayıp, efekti aktif hale getiriyoruz
if (karakter != null) {
karakter.KarakterRgb.AddExplosionForce (ziplamaCarpani, transform.position, 3, ziplamaYuksekligi, ForceMode.Impulse);
efekt.Play ();
}
}
BasitTakip : Bu kodun tek amacı karakteri belirli bir mesafeden takip etmek ve karaktere bakmak. Gayet basit ve işimizi görecek bir kod olacak.
//takip edeceğimiz obje, inspector üzerinden atamayı unutmayın
[SerializeField]
Transform karakter;
//aradaki mesafe için kullanacağımız değişken
Vector3 mesafe;
void Start () {
//başlangıçta kamerayı nasıl konumlandırdıysak
//o şekilde devam etmesi için başlangıçta
//aralarındaki farkı alıp mesafe değişkeninde tutuyoruz.
mesafe = transform.position - karakter.position;
}
void Update () {
//aradaki mesafe ile karakterin pozisyonunu topladığımızda
//başlangıçta ayarladığımız mesafeyi korumuş olacağız
transform.position = karakter.position + mesafe;
//transform.LookAt bir objenin diğerine doğru bakması
//için kullandığımız bir fonksiyon. Karaktere bakmasını sağlıyoruz
transform.LookAt (karakter);
}
Böylece basit şekilde Unity3d – Patlamalı Rollerball örneğimizi tamamlamış olduk. Umarım temel konuları ve az çok görev bölümünü doğru yaparak kodlamaya dair kafanızda bir şeyler oturmuştur. Eğer Rigidbody hakkında daha fazla şey öğrenmek isterseniz Unity – Rigidbody Nedir ? adlı yazımıza göz atabilirsiniz. Yeni yazılarda görüşmek dileğiyle.