Bir karakter denetleyicisi, oyununuzda basit hareket fiziğini uygulamanıza yardımcı olabilir.
Unity3D karakter denetleyicilerine birkaç açıdan yaklaşabilirsiniz. Güçlü sınıflara ve işlevlere sahip bir kitaplık kullanıyorsanız, fizik tabanlı bir karakter denetleyicisi oluşturmak, oyun geliştirmeye başlamak için eğlenceli bir yer olabilir.
1. Adım: Oyuncu ve Arazi Nesneleriyle Bir Sahne Oluşturun
Unity açıldığında ve yeni bir proje oluşturduğunuzda, sahnenize birkaç nesne ekleyerek başlayabilirsiniz. Bu nesneleri istediğiniz sırayla oluşturabilirsiniz, ancak doğru ayarları kullandığınızdan emin olun. Bu proje temel olsa da, Unity'yi kullanmaya başlayın.
Arazi için 3B Düzlem Nesnesi
Sahnenize eklenecek ilk nesne bir uçaktır. Hiyerarşi bölmesinin içine sağ tıklayın, üzerine gelin 3B Nesneve seçin Uçak listeden. Daha geniş bir test alanı sağlamak için uçağın boyutunu ayarlayabilirsiniz, ancak bunun için başka bir şey yapmanıza gerek yoktur.
Bir Küp Nesne Oyuncu Modeli
Ardından, oyuncu modeli olarak hareket etmesi için sahneye bir küp ekleme zamanı. Hiyerarşi bölmesinin içine sağ tıklayın, üzerine gelin 3B Nesneve seçin Küp açılır menüden Yeni küpü, eklediğiniz düzlemin üzerine oturacak şekilde konumlandırın. Küpü bir fizik nesnesine dönüştürmek için bir katı cisim bileşeni de eklemeniz gerekir.
Küpü seçin ve Müfettiş'e gidin. Tıklamak Bileşen Ekle bölmenin altında, sert gövdeyi arayın ve seçin Sağlam vücut göründüğünde listeden tikle Yerçekimi Kullan onay kutusunu işaretleyin ve ayarların geri kalanını olduğu gibi bırakın.
Bulabilirsin ücretsiz Unity varlıkları çevrimiçi projenizi canlandırmak için.
Üçüncü Kişi Kamera
Sahnenizde, üçüncü şahıs kameranız olarak kullanabileceğiniz bir kamera bulunmalıdır. Kamerayı, küpünüzün üzerinde rahat bir üçüncü şahıs konumuna oturacak şekilde konumlandırın. Ebeveyn-alt ilişkisi oluşturmak için kamerayı küpün üzerine sürükleyip bırakmadan önce hiyerarşi bölmesine gidin. Bu işlem yapıldığında kamera küpünüzü otomatik olarak takip edecektir.
Hızlı Test
Sahnenizin henüz bir kodu yokken, şimdiye kadar yaptığınız işleri test edebilirsiniz. Tıkla Oynamak Oyununuzu yüklemek için ekranın üst kısmındaki düğmesine basın. Küpün düştüğünü ve Uçağın üstüne indiğini görmelisiniz ve Kamera düşerken küpü takip etmelidir.
2. Adım: Bir C# Dosyası Kurun
Şimdi biraz hareket programlamaya başlayabilmeniz için bir C# dosyası oluşturma zamanı. Proje bölümüne gidin, sağ tıklayın, Yarat'ın üzerine gelin ve listeden Klasör'ü seçin. Klasörü Komut Dosyaları veya benzeri bir adla adlandırın.
Yeni klasörünüzde gezinin ve işlemi tekrarlayın ancak listeden C# Komut Dosyası'nı seçin. Bu dosyaya herhangi bir ad verebilirsiniz, ancak bu aynı zamanda içindeki ana işlevin adı olacaktır. Yeni C#'ınızın böyle göründüğünden emin olun.
kullanarak Sistem. Koleksiyonlar;
kullanarak Sistem. Koleksiyonlar. Genel;
kullanarak Birlik Motoru;halksınıfKarakter_Kontrolü: MonoDavranış {
geçersizBaşlangıç() {
}
geçersizGüncelleme() {
}
}
3. Adım: Hızla İleri ve Geri Hareket Oluşturmak için C# Kullanın
Betik dosyanızdaki işlevlere eklemeden önce, bazı genel değişkenleri bildirin. İlk olarak, oyuncu modelini depolamak için bir Rigidbody var. Ayrıca hareket hızını takip etmek için bir şamandıra ilan edin. Bu değişkenler, herhangi bir işlevin dışında, ana sınıfa girer.
halk rijit cisim rijit cisim;
halkbatmadan yüzmek hız;
Ardından, Başlat işlevine tek bir kod satırı eklemenin zamanı geldi. Bu, Cube'un katı gövde bileşenini oluşturduğunuz katı gövde değişkenine atamak için bir GetComponent bildirimi kullanır.
geçersizBaşlangıç() {
rijit cisim = GetComponent < Rijit cisim > ();
}
Artık oyuncu modelinizin hareket etmesini sağlayacak bazı kodlar ekleyebilirsiniz. Bu kod güzel ve basittir; sadece iki if ifadesine ihtiyacınız var, biri ileri hareket için, diğeri geri hareket için. Giriş'i kullanabilirsiniz. Bir tuşa ne zaman basıldığını belirlemek için GetKey. Bu durumda, W ve S tuşlarına basmayı arıyorsunuz.
Bu tuşlardan herhangi birine basmak, rijit cisim kullanan küp rijit cisme bir kuvvet ekler. AddForce. Eklenen kuvvetin yönünü ve hızını, Z ekseni konumunu (transform.forward) hız değişkeni ile çarparak hesaplayabilirsiniz. Geriye doğru hareket için kullanabileceğiniz bir transform.backward sınıfı yoktur, ancak bu, transform.forward'ı -1 ile çarparak elde edilebilir.
eğer (Giriş. Anahtarı al("w")) {
sağlam vücut. AddForce (transform.forward * hız);
}
eğer (Giriş. Anahtarı al("S")) {
sağlam vücut. AddForce((transform.forward * -1) * hız);
}
C# dosyasını kaydedin ve Unity'ye geri dönün. Proje bölmesinde komut dosyasını bulun ve komut dosyasını o nesneye atamak için hiyerarşi içindeki karakter modeli Cube'a sürükleyip bırakın. Küpü seçtiğinizde, komut dosyasını Denetçi bölmesinde bir bileşen olarak görmelisiniz. Katı cisim değişken kutusunun içine tıklayın ve küpünüzün sert gövdesini seçin.
Artık oyunu başlatmak ve kodunuzu test etmek için Oynat düğmesini kullanabilirsiniz. Fakat bekle! Bir sorun var; Küpünüz dümdüz ilerlemek yerine yuvarlanacak. Cube denetçisine geri dönün, Rigidbody bileşenini bulun ve oyunu yeniden başlatmadan önce X ve Z ekseninde Döndürmeyi Dondur için kutuları işaretleyin. Şimdi çalışması gerekir.
Adım 4: Tork ile Sola ve Sağa Dönüş Oluşturmak için C# Kullanın
Geri ve ileri hareket etmenin aksine, Cube oynatıcı modelinizi döndürmek, tork adı verilen bir kuvvet gerektirir. Bunun için başka bir değişkene ihtiyacınız var: bir tork değeri atamak için halka açık bir değişken.
halkbatmadan yüzmek tork;
Bu betikte sola ve sağa dönme kodu, ileri ve geri hareket etmek için kullanılana çok benzer. bir var eğer D tuşuna (sağa dönüş) veya A tuşuna (sola dönüş) basılmasını arayan her yön için ifade.
Her bir if ifadesindeki ilk adım, Girişi kullanarak dönüşün yönünü belirlemektir. GetAxis yöntemini seçin ve sonucu bir kayan değişkene atayın. Bunu takiben, rijit cisim kullanın. Küpün torkunu, dönüşünü ve Z eksenini çarparak Küp karakter modeline dönme kuvveti uygulamak için AddTorque.
eğer (Giriş. Anahtarı al("D")) {
batmadan yüzmek dönüş = Giriş. GetAxis("Yatay");
sağlam vücut. AddTorque (transform.yukarı * tork * dönüş);
}
eğer (Giriş. Anahtarı al("A")) {
batmadan yüzmek dönüş = Giriş. GetAxis("Yatay");
sağlam vücut. AddTorque (transform.yukarı * tork * dönüş);
}
Kodunuzu kaydedin ve test etmek için Unity'ye geri dönün. Küpü seçip sert cismin kütle, sürükleme ve tork değişkenlerini betiğinizde düzenleyerek oyuncu modeli dönüşünüzün hızını ve yükselme süresini ayarlayabilirsiniz. Bu örnek proje 1 kütle, 1 sürükleme ve 2 tork üzerine kuruludur.
Adım 5: Atlamayı Programlamak için C# Kullanın
Bu Unity karakter kontrol cihazının son unsuru olarak, zıplamanızı yaratmanın zamanı geldi. Bir sıçramanın sınırlı bir yüksekliğe sahip olması gerektiği göz önüne alındığında, bir sıçrama oluşturmak, üzerinde çalıştığınız diğer temel kontrollerden daha karmaşıktır. Oyuncunun zıplayıp atlamadığını izlemek için özel bir boolean değişkeni ekleyerek başlayın.
özelbool atlıyor = YANLIŞ;
Bu değişken, onu test etmek için bir ifade olmadan hiçbir şey yapmaz. Bu durumda, değişkenin yanlış olup olmadığını kontrol etmek için basit bir if ifadesi işinizi görecektir. Aynı koşulu diğer harekete eklemek if ifadeleri oyuncunun zıplamalar sırasında hareket etmesini durduracaktır.
eğer (!isSıçrayıyor) {
}
Aynı koşulu diğer harekete eklemek if ifadeleri oyuncunun zıplamalar sırasında hareket etmesini durduracaktır.
eğer (Giriş. Anahtarı al("w") && !isZıplıyor) {
sağlam vücut. AddForce (transform.forward * hız);
}
!isJumping if ifadesinde, bu kez atlama düğmesine basıldığını kontrol etmek için başka bir if ifadesine ihtiyacınız var. isJumping değişkenini true olarak ayarlamak, bu if ifadesinde yapılacak ilk şeydir, ardından küpe o anda uygulanan kuvvetleri kaldırmak için bir rijidbody.angularVelocity bildirimi yapmak gelir.
Artık sert gövdeyi kullanabilirsiniz. Küpün Z ekseni üzerinde kuvvet eklemek için AddForce bildirimi, bir sıçramanın yukarı doğru hareketini oluşturur. Son olarak, 0,8 saniye sonra farklı bir işlevi çağırmak için bir invoke bildirimi kullanmanın zamanı geldi.
eğer (!isSıçrayıyor) {
eğer (Giriş. Anahtarı İndir("uzay")) {
atlıyor = doğru;
sağlam vücut. AddForce (transform.up * hız * 120);
rijit cisim.angularHız = Vector3.zero;
Çağırmak("Move_Setter", 0.8 F);
}
}
Bu işlev, isJumping değişkenini tekrar false değerine ayarlar, böylece hareket/atlama bir kez daha mümkün olur ve 0,8 saniyelik gecikme değişkenin çok erken tetiklenmesini engeller.
geçersizMove_Setter() {
atlıyor = YANLIŞ;
}
6. Adım: Karakter Denetleyici Kodunuzu Test Edin
Dosyanızı kaydedin ve yazdığınız kodu test etmek için Unity'ye geri dönün. Çoğu derleyici gibi, Unity de değiştirmeniz gerekebilecek şeyleri görmenizi kolaylaştırmak için kodunuzla ilgili hatalar ve diğer sorunlar hakkında bilgi sağlar. Bu projenin tam kodunu şu adreste görüntüleyebilirsiniz: GitHub sayfa.
Unity Karakter Denetleyicileri Oluşturma
Unity'de bir karakter denetleyicisi oluştururken çeşitli farklı yaklaşımlar arasından seçim yapabilirsiniz. Fiziği kullanmak bir seçenektir, ancak isterseniz yerleşik karakter kontrol sistemini de kullanabilirsiniz.
Bunun gibi farklı seçenekleri keşfetmek, Unity gibi araçlar hakkında bilgi edinmenin harika bir yoludur.