Unity ile Temel Android Oyunu Nasıl Oluşturulur

bu benzer eğiticide, temel bir Android Unity kullanarak oyun.



Gereksinimler:

  • Birlik
  • NotePad ++ gibi iyi bir metin düzenleyici (İsteğe bağlı ancak önerilir)
  • Android SDK
Henüz sahip değilseniz, Unity SDK'yı ve ayrıca Android SDK'yı indirip kurarak başlamalısınız. Oyunun APK'sını bir Android ortamında test edebilmemiz için Android SDK'ya ihtiyacımız var.

Unity'yi başlatın ve yeni bir proje oluşturun. Bunu 2 boyutlu bir proje yapın.



Aşina olmanız gereken birkaç panel var - tüm sahne öğelerimizi içerecek olan Hiyerarşi paneli (sahne = şu anda üzerinde çalıştığınız 'düzey' ne olursa olsun). Ardından, editörün içindeyken oyununuzu oynamak / test etmek için kullanılan Oyun sekmesi ve sağ tarafta aydınlatma, fizik vb. Gibi çeşitli şeyleri düzenleyeceğiniz Müfettiş paneliniz var.



Yapmak istediğimiz ilk şey bir hareketli grafik yaratmak - bu bizim kontrol ettiğimiz ana karakterimiz olacak. Gözleri olan bir kare çizmek gibi kendi hareketli grafiğinizi çizebilir veya internetten bir hareketli grafik yakalayabilirsiniz - bunun bir .PNG dosyası (şeffaf arka plan) olduğundan emin olmanız yeterlidir.



Hareketli grafiğinizi ana sahne penceresine (en büyük pencere) sürükleyip bırakın - aynı zamanda soldaki Hiyerarşi panelinde de görünecektir.

Şimdi birkaç platform oluşturacağız - bunlar basit kareler olabilir, çünkü duvarları ve diğer platformları yapmak için bunları kolayca yeniden boyutlandırabileceğiz.

Bu nedenle, yeni bir kare 'hareketli grafik' oluşturun ve sprite karakterinizle yaptığınız gibi bunu Sahne penceresine sürükleyip bırakın.



Şimdi Unity'ye ana karakterimize fizik vermesi için talimat vermemiz gerekiyor - ana sprite karakterinize tıklayın (Sahne penceresinde maviyle vurgulanmalıdır), ardından Denetçi panelinde 'GameObjects' i arayın.

'Bileşen Ekle> Fizik 2D> RigidBody2D' ye tıklayın. Bu, sprite'ınıza otomatik olarak fizik ekler, aksi takdirde başka bir SDK'da kendiniz komut dosyası oluşturmanız gerekirdi.

Ana hareketli grafik karakterinin kontrolden çıkmasını önlemek istiyoruz - bu nedenle Denetçi panelinde Kısıtlamalar sekmesini bulun (ana hareketli grafik Sahne penceresinde hala vurgulanmıştır) ve 'Döndürmeyi Dondur Z' kutusunu işaretleyin.

'Oynat' düğmesine basarsanız, ana sprite karakteriniz gökten düşmeli ve sonsuza dek düşmelidir - bununla daha sonra ilgileneceğiz, ancak sadece fiziği nasıl kolayca uygulayabildiğimize dikkat edin. Uyguladığımız fizik, uygulandıkları şekle bağlıdır - yani aynı fiziği bir küreye uygularsanız, örneğin, yuvarlanacaktır.

Ayrıca karakterin dönmesini ve serbestçe dönmesini önlemek için yönelimimizi düzeltmek istiyoruz. Denetçide seçilen oyuncu ile 'kısıtlamaları' bulun ve döndürme Z'yi dondurmak için kutuyu işaretleyin. Şimdi tekrar oynat'ı tıklayın ve oyuncunuzun şimdi gökyüzünden sonsuz kıyametine düştüğünü görmelisiniz.

Ana sprite karakterimizin sonsuza dek düşmesini engellemek için bir çarpıştırıcı eklememiz gerekecek. Bu, temelde ana hareketli grafik karakterine ekleyeceğimiz bir şeklin tam dış çizgisidir. Ana sprite karakterinizi vurgulayın, 'Bileşen Ekle> Fizik 2D> BoxCollider2D'ye tıklayın.

Şimdi, daha önce oluşturduğunuz platformla aynı şeyi yapın. Ana sprite karakteriniz artık platformla 'çarpışmalı' ve orada kalmalıdır.

Şimdi, kameranın ana sprite karakterinizi takip edeceğinden emin olmak istiyoruz - sahnenin içinde zaten bir kamera nesnesi olmalı. Bunu sürüklemek istiyorsun üstüne ana sprite karakteri.

Bu, özellikle bir 3D tabanlı koşucu , gibi bir şey Eğim kameranın sürekli olarak birincil oyun nesnesinin (ana sprite karakterinizin) arkasında kalmasına ihtiyaç duyduğunuz yer.

Şimdi Hiyerarşi paneline gidin ve GameObjects listesinde kamerayı sürüklemek istiyorsunuz altında ana hareketli karakter (Player GameObject). Bu, ana sprite karakterini ' ebeveyn ' kameranın. Dolayısıyla, Player GameObject ekranda her hareket ettiğinde, kamera onu takip etmelidir.

Dolayısıyla bu eğitici oyun için, temel bir sonsuz koşucu türü oyun oluşturacağız. 3. Koşu , ana karakterinizin ekranın üzerinden geçeceği ve engellerden kaçacağı (veya bir engele çarptığınızda “oyun bittiği” yer. Bu, çoğu bu kılavuzda verilecek olan birkaç senaryo alacaktır.

'Varlıklar' klasörünü sağ tıklayın ve yeni bir klasör oluşturun - adını verin Kodlar . Şimdi bu yeni klasöre sağ tıklayın ve 'Oluştur> C # Komut Dosyası' na basın ve adlandırın PlayerControls . Bu komut dosyası, ana sprite karakterimizin davranışını tanımlayacak.

Bu yeni betiğe çift tıkladığınızda, meli Visual Studio'da açın - alternatif olarak (ve kişisel tercihim), bunu NotePad ++ gibi bir şeyle düzenleyebilirsiniz.

Komut dosyası dosyasında zaten bir miktar 'kazan plakası' kodu bulunmalıdır - temelde bu, tek başına bırakılması veya ihtiyaçlarınıza göre ayarlanması gereken bir komut dosyasıdır ve bize çok zaman kazandıracaktır. Bu yüzden yeni bir nesne ekleyeceğiz.

Satırın üstünde void Başlat ():

halka açık Rigidbody2D rb;

Eklememiz gereken bir sonraki kod parçası Start () içine girecek ve katı cismi bulmak için kullanılıyor - temel olarak Unity'ye GameObjects'e (ana sprite karakterimiz) eklediğimiz fiziği bulması için talimat veriyoruz ve Başlat (), yeni bir nesne veya komut dosyası oluşturulduğunda yürütülecektir.

Şimdi, fizik nesnesini bulun.

rb = GetComponent< Sert gövde2D > ();

Ve bu satırı Güncellemenin () içine ekleyeceksiniz.

rb.velocity = yeni Vektör2 (3, rb.velocity.y);

Update () sürekli olarak yenilemektir, bu nedenle buraya eklenen herhangi bir kod sürekli olarak çalışır (nesne yok edilmedikçe). Yaptığımız şey, komut dosyasına, katı cismin Y ekseninde aynı hızı (rb.velocity.y) kullanarak, ancak yatay eksende 3 hızıyla yeni bir vektöre sahip olmasını istediğimizi talimat vermek oldu. Gelecekte, ' FixedUpdate () ’ Bu benzer ancak farklıdır, çünkü orada komut dosyasının güncelleme / yenileme miktarını kontrol edebilirsiniz.

Komut dosyasını kaydedin ve Unity'ye geri dönün, ardından vurgulamak için ana sprite karakterinizi tıklayın. Denetçi panelinde, Bileşen Ekle> Komut Dosyaları'na gidin ve az önce kaydettiğimiz komut dosyasını ekleyin. Şimdi Oynat düğmesini tıkladığınızda, ana hareketli grafik karakteri sürekli olarak platform kenarına doğru hareket etmelidir.

Oyuncu Giriş Kontrolleri Oluşturma

Dolayısıyla bu, engelleri olan sonsuz bir koşucu tarzı oyun olduğu için, oyuncu için 'zıpla' düğmesi gibi kontroller eklememiz gerekiyor.

Komut dosyasını daha önce yeniden açın ve şu ek kodu ekleyeceğiz:

 Eğer (Input.GetMouseButtonDown (0)) {rb.velocity = yeni Vektör2 (rb.velocity.x, 5); }

Bunu Update () yönteminin içine koyacaksınız ve temelde Unity'ye, oyuncu fare düğmesini tıkladığında (Android'de ekran dokunuşu olarak çevrilecek) ana sprite karakterinin 'zıplayacağını' ' Havada. Bunun nedeni, Y eksenine 5 değerine sahip bir hız eklememizdir (daha yüksek bir değer elbette daha yüksek bir sıçrama anlamına gelir).

Kodlamaya fazla aşina değilseniz, Eğer ifade çünkü Eğer temelde 'yap ya da yapma' türü bir talimattır - kelimenin tam anlamıyla Bu olursa, bu komutu yapın . Dolayısıyla, oyuncu fareyi tıklamıyorsa (veya Android ekranına dokunmuyorsa), o zaman açıkça betik çalışmayacaktır.

Devam edin ve 'Oynat' düğmesini tıklayın ve devam etmeden önce doğru çalıştığından emin olun.

Ardından, engellerimizi (ana karakter sprite'ı 'yok edebilen'), bir oyun skoru ve 'oyun bitti' menüsü ekleyeceğiz.

Şimdiye kadar oyunu test ettiyseniz, şimdiye kadar sahip olduğumuz tek sorun, oluşturduğumuz 'zıpla' düğmesine basmanın, topraklanmış olsun veya olmasın karakterin atlayacağıdır - bu temelde Flappy Birds, gibi bir koşucu değil istiyoruz. Ama bunu düzelteceğiz.

Komut dosyasında, bu kod parçasını ekleyin yukarıda Update () yöntemi:

 halka açık GroundCheck'i dönüştürün; halka açık StartPosition'u dönüştürün; halka açık   yüzer groundCheckRadius; halka açık LayerMask whatIsGround; özel   bool yerde; Ve sonra bu sonraki satırı, yukarıdaki Güncelleme yöntemine ekleyin. Eğer ifade: onGround = Physics2D.OverlapCircle (groundCheck.position, groundCheckRadius, whatIsGround); Ve sonra bu aşağıdaki satırı '&& onGround' öğesini içerecek şekilde değiştireceksiniz. Eğer (Input.GetMouseButtonDown (0) && onGround) {Yani tüm komut dosyamız temelde şöyle görünmeli: halka açık   sınıf   PlayerControls : MonoBehaviour { halka açık Rigidbody2D rb; halka açık GroundCheck'i dönüştürün; halka açık StartPosition'u dönüştürün; halka açık   yüzer groundCheckRadius; halka açık LayerMask whatIsGround; özel   bool yerde; geçersiz   Başlat () {rb = GetComponent (); } geçersiz   Güncelleme () {rb.velocity = yeni Vektör2 (3, rb.velocity.y); onGround = Physics2D.OverlapCircle (groundCheck.position, groundCheckRadius, whatIsGround); Eğer (Input.GetMouseButtonDown (0) && onGround) {rb.velocity = yeni Vektör2 (rb.velocity.x, 5); }}}

Ne yaptığımızı açıklamak için, oyun dünyasının uzayında bir konum anlamına gelen yeni bir 'dönüşüm' yarattık. Yarıçapını ayarladık ve Unity'ye yarıçapın 'zemin' katmanımızla örtüşüp örtüşmediğini kontrol etmesi için talimat veriyoruz - bu nedenle yarıçapımız 'zemin' ile senkronize edilirse, karakterimiz zıplayabilir ve eğer biz Zaten bir atlamadan havadayız, tekrar atlayamamalıyız. Temel olarak, yerde doğru olacak Eğer adlı dönüşüm GroundCheck zemin tabakası ile örtüşüyor. Umarım bu mantıklıdır.

Bu yüzden komut dosyasını kaydedin ve Unity'ye geri dönün ve oynatıcıyı vurguladıktan sonra Müfettiş'e daha fazla seçeneğin eklendiğini fark edeceksiniz. Bunlar genel değişkenlerdir ve bunları kendi zevkimize göre ayarlayabiliriz.

Şimdi Hiyerarşi üzerine sağ tıklayın ve yeni bir boş nesne oluşturun ve ana Sahne penceresindeki ana karakter hareketli grafiğinin altında olacak şekilde sürükleyin - bu boş nesneyi zeminin algılanmasını istediğimiz yere yerleştirin. Nesneyi 'Zemin Kontrol Et' olarak yeniden adlandırın ve daha önce kamerayla yaptığımız gibi oyuncunun oyun nesnesinin altına sürükleyin (nesneler arasında bir ebeveyn-çocuk ilişkisi oluşturmak için). Artık boş nesne, tıpkı kamera gibi ana karakter sprite'ı takip edecek ve kat mesafesini sürekli olarak kontrol edecektir.

Şimdi ana karakter hareketli grafiğini seçin ve Inspector paneline gidin - Check Ground nesnesini 'groundCheck' adlı alana sürükleyin. 'Dönüştürme' konumu, bu yeni nesnenin konumuna eşit olmalı ve 'Yarıçap' dediği yerde onu 0,1 yapın.

Zemin katmanını tanımlamamız gerekiyor. Sadece zemin arazisini seçin ve Denetçi'de 'Katman: Varsayılan' düğmesini bulun (bu bir açılır kutudur) ve 'Katman Ekle' yi seçin.

Şimdi platformumuz için katman olarak 'zemin' i seçin ve bunu oyun penceresindeki diğer platformlar için tekrarlayın. Ana karakter sprite nesnemizde 'Zemin Nedir' yazan yerde, zemin katmanını da seçin.

Yaptığımız şey, oynatıcı komut dosyasına bir kontrol yapması için talimat vermektir - Eğer ekrandaki küçük nokta katmanla eşleşen herhangi bir şeyle örtüşüyorsa, karakter yalnızca bu doğruysa atlayacaktır.

Çarpışma ve Oyun Menüsünde Oyun Bitti

Sonuç olarak, her şeyi özetlemek gerekirse, yapmak istediğimiz son şeyler A: Engellerle çarpışmanın bir oyunla sonuçlanmasını sağlamak ve B: Tekrar oynat düğmesiyle bir 'oyun bitti' menü ekranı oluşturun.

Temelde yapmak istediğiniz şey:

  1. Ekle oyuncu nesne ve atama sağlam vücut ve bir çarpıştırıcı sizin seçiminiz.
  2. Ekle Düşman nesne ve atama sağlam vücut ve bir çarpıştırıcı sizin seçiminiz. (ve isteğe bağlı, ekle 'Düşman' etiketi ona)
  3. Yeni bir tane oluştur C # komut dosyası ve bir bileşen olarak ekleyin oyuncu (veya oynatıcıya eklenmiş herhangi bir komut dosyasını kullanın, zaten varsa yeni bir tane oluşturmanıza gerek yok)
  4. Bunu komut dosyanıza ekleyin:
geçersiz OnCollisionEnter ( Çarpışma coll) { Hata ayıklama . Kayıt ('Çarpışma'); // Bir çarpışma kaydedip kaydetmediğini kontrol edin, eğer çalışırsa bu satırı kaldırabilirsiniz eğer (coll.gameobject. etiket == 'Düşman') { // oyuncunuzun çarpıştığı nesnenin 'Düşman' adlı bir etiketi olup olmadığını görür