Unity ile Temel Android Oyunu Nasıl Oluşturulur

Daha önceki bir Uygulamanın Temel Birlik Platform Oyunu Nasıl Oluşturulacağı başlıklı öğretisinde ( ve bölüm 2), basit bir HTML5 tabanlı tarayıcı oyunu oluşturmak için Unity ve yerleşik WebGL eklentisini kullanarak bu benzer öğreticide, Unity'yi kullanarak temel bir Android oyunu nasıl oluşturacağımıza bakacağız.

Gereksinimler:

  • Birlik
  • NotePad ++ gibi iyi bir metin düzenleyici (İsteğe bağlı ama önerilir)
  • Android SDK'sı
Henüz sahip değilseniz, Unity SDK'sını ve Android SDK'yı indirip yükleyerek başlamanız gerekir. Android'in SDK'sine ihtiyacımız var, böylece oyunun APK'sini bir Android ortamında test edebiliriz.

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

Tüm sahne öğelerini (sahne = şu an üzerinde çalıştığınız seviye) içerecek Hierarchy paneli - aşina olmak için birkaç panel vardır. Ardından editörün içinde oyununuzu oynamak / test etmek için kullanılan Oyun sekmesi vardır ve sağ tarafta ışıklandırma, fizik vb. Gibi çeşitli şeyleri düzenleyeceğiniz Müfettiş paneliniz bulunmaktadır.

Yapmamız gereken ilk şey bir sprite yaratmaktır - bu bizim ana karakterimizdir (kontrol ettiğimiz). Kendi hareketli grafiğini çizebilirsin, sadece gözlerle bir kare çizebilirsin, ya da internetten bir sprite alabilirsin - sadece bir .PNG dosyası olduğundan emin olun (şeffaf arka plan).

Sprite'ınızı ana sahne penceresine sürükleyin ve bırakın (en büyük pencere) - soldaki Hiyerarşi panelinde de görünecektir.

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

Bu yüzden sadece yeni bir kare hareketli grafik oluşturun ve hareketli grafiğinizle yaptığınız gibi Sahne Alanı penceresine sürükleyip bırakın.

Şimdi Birlik'e ana karakterimize fizik vermesini emretmeliyiz - ana hareketli karakterinizi tıklayın (Sahne penceresinde mavi renkte vurgulanmalıdır), ardından Inspector panelinde GameObjects'i arayın.

Bileşen Ekle> Fizik 2D> RigidBody2D'ye tıklayın. Bu, başka bir SDK'da kendinizi betimlemek zorunda kalacağınız fiziği otomatik olarak sprite'a ekler.

Ana sprite karakterinin kontrolden çıkmasını önlemek istiyoruz - bu yüzden Inspector panelindeki Kısıtlamalar sekmesini bulunuz (Sahne penceresindeki hala ana sprite ile birlikte) ve Freeze Rotation Z için kutuyu işaretleyin.

Eğer Oynat düğmesine basarsanız, ana hareketli karakteriniz gökyüzünden düşmeli ve sadece sonsuza dek düşmelidir - daha sonra bununla ilgileneceğiz, ama sadece fiziği kolayca nasıl uygulayabildiğimizi not edin. Uyguladığımız fizik, uygulandıkları şekle bağımlıdır - böylece aynı fiziği bir küreye uygularsanız, örneğin, etrafta dolanırdı.

Ayrıca, karakter eğrilerini ve serbest dolaşımı önlemek için yönelimimizi düzeltmek istiyoruz. Seçilen oyuncu ile müfettişte 'kısıtlamaları' bulun ve Z'yi dondurmak için kutuyu işaretleyin. Şimdi tekrar oynayın ve oyuncuyu artık gökten sonsuz doomuna düşürün.

Ana hareketli karakterimizi sonsuza dek düşürmek için, bir çarpıştırıcı eklememiz gerekecek. Bu temel olarak sadece ana hareketli karaktere ekleyeceğimiz bir şeklin katı çizgisidir. Ana hareketli karakterinizi vurgulayın, Bileşen Ekle> Fizik 2B> BoxCollider2D'yi tıklayın.

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

Şimdi kameranın ana hareketli karakterini izleyeceğinden emin olmak istiyoruz - sahnenin içinde, zaten bir kamera objesi olmalı. Bunu ana hareketli karakterin üstüne sürüklemek istersiniz.

Bu, özellikle 3D oyun tabanlı bir koşucu oluşturuyorsanız, özellikle oyunun ana oyun nesnesinin (ana hareketli karakterinizin) arkasında kalması için gereken yere ihtiyacınız olduğunda önemlidir.

Şimdi Hiyerarşi paneline gidin ve GameObjects listesinde kamerayı ana hareketli karakterin (Player GameObject) altına sürüklemek istersiniz. Bu, ana hareketli karakteri kameranın ' ana' yapacaktır. Bu yüzden Oyuncu GameObject ekran etrafında hareket ettiğinde, kamera takip etmelidir.

Öyleyse, bu oyun eğitimi için, sadece temel bir sonsuz koşucu tipi oyun oluşturacağız, Run 3 gibi bir şey, ana karakteriniz ekran boyunca koşacak ve engelleri aşacak (ya da bir engele çarptığınızda oyun biter.) Bu kılavuzda birçoğu yazılacak birkaç betik.

Varlıklar klasörünü sağ tıklayın ve yeni bir klasör oluşturun - Scripts olarak adlandırın . Şimdi bu yeni klasöre sağ tıklayın ve Create> C # Script'e basın ve PlayerControls olarak adlandırın . Bu senaryo ana sprite karakterimizin davranışını tanımlayacak.

Bu yeni senaryoyu çift tıkladığınızda, Visual Studio'da açılmalıdır - alternatif olarak (ve kişisel tercihim), onu NotePad ++ gibi bir şekilde düzenleyebilirsiniz.

Komut dosyası dosyası içinde zaten bir miktar kazan plakası koduna sahip olmalıdır - temel olarak bu, tek başına bırakılması gereken ya da ihtiyaçlarınız doğrultusunda ayarlanması gereken bir komut dosyasıdır ve bize çok fazla zaman kazandıracaktır. Böylece yeni bir nesne ekleyeceğiz.

Satırın üstünde Start ():

kamu Rigidbody2D rb;

Eklememiz gereken bir sonraki kod, Start () içinde gidip rijit cismi bulmak için kullanılır - temel olarak, Unity'ye GameObjects'e (bizim ana sprite karakterimiz) eklediğimiz fiziği bulma talimatı veriyoruz ve Start'a başlıyoruz. () yeni bir nesne veya komut dosyası oluşturulduğunda yürütülecek.

Sonra, fizik nesnesini bulun.

 rb = GetComponent < Rigidbody2D > (); 

Ve bu satırı Güncelleştirme () içine eklersiniz.

 rb.velocity = yeni Vector2 (3, rb.velocity.y); 

Update () işlevi sürekli olarak yenilenir, bu nedenle orada eklenen herhangi bir kod sürekli olarak çalışır (nesne yok olmadıkça). Öyleyse yaptıklarımıza göre, ritmin, Y ekseninde (rb.velocity.y) aynı hızı kullanarak yeni bir vektöre sahip olmasını istediğimiz, ancak yatay eksende 3'lük bir hıza sahip olmasını istiyoruz. Gelecekte, benzer fakat farklı olan ' FixedUpdate ' () ' i de kullanabilirsiniz, çünkü 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 hareketli karakterinizi tıklayın. Denetçi panelinde, Bileşen Ekle> Komut Dosyaları'na gidin ve yeni kaydettiğimiz komut dosyasını ekleyin. Şimdi Oynat düğmesine tıkladığınızda, ana hareketli karakter sürekli olarak platform kenarına doğru hareket etmelidir.

PRO TIP: Sorun bilgisayarınız veya dizüstü bilgisayar / dizüstü bilgisayar ile yapılmışsa, depoları tarayabilen ve bozuk ve eksik dosyaları değiştirebilen Reimage Plus Yazılımı'nı kullanmayı denemeniz gerekir. Bu, çoğu durumda, sorunun sistem bozulmasından kaynaklandığı yerlerde çalışır. Reimage Plus'ı tıklayarak buraya tıklayarak indirebilirsiniz.

Oyuncu Girişi Denetimleri Oluşturma

Bu yüzden engelleri olan sonsuz koşucu bir oyun olduğu için, oyuncu için 'atlama' butonu gibi kontroller eklememiz gerekiyor.

Komut dosyasını daha önce tekrar açalım ve bu ek kodu ekleyeceğiz:

 eğer (Input.GetMouseButtonDown (0)) {rb.velocity = yeni Vector2 (rb.velocity.x, 5); } 

Bunu Update () yönteminin içine koyacaksınız ve temel olarak ne yaptığını Unity'ye, oyuncu fare tuşlarını (Android'de bir ekran dokunuşu olarak çevrilecek) tıkladığında, ana hareketli karakterin hava. Bunun nedeni, Y ekseni üzerinde 5 değerinde bir hız eklediğimizden (daha yüksek bir değer, tabii ki daha yüksek bir atlama anlamına gelir).

Eğer kodlamaya çok aşina değilseniz, If ifadesi kullandık çünkü If temelde bir öğretmendir ya da türden bir talimat değildir - bunun tam anlamıyla olduğunu söylerseniz, bu komutu yapın . Bu yüzden eğer oyuncu fareyi tıklatmıyorsa (veya Android ekranlarına dokunduğunda), o zaman betik çalışmayacaktır.

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

Ardından, engellerimizi (ana karakter grafiğini yok edebilir), oyun skorunu ve menüdeki oyunu ekleyeceğiz.

Eğer oyunu şimdiye kadar test ettiyseniz, şu ana kadar sahip olduğumuz tek sorun, yarattığımız atlama düğmesine basmak, ister topraklanmış olsun ister olmasın karakteri atlayacaktır - bu temelde Flappy Birds'tir ve bizim istediğimiz gibi bir koşucu değil . Ama bunu düzelteceğiz.

Komut dosyasında, bu küçük kodu Update () yönteminin üstüne ekleyin:

 public Transform groundCheck; public Transform startPosition; halka açık yüzer groundCheckRadius; public LayerMask whatIsGround; özel bool onGround; Ve sonra bir sonraki satırı if ifadesinin yukarısındaki Güncelleştirme yöntemine ekleyin: onGround = Physics2D.OverlapCircle (groundCheck.position, groundCheckRadius, whatIsGround); Ve sonra aşağıdaki satırı && onGround (Input.GetMouseButtonDown (0) && onGround) 'ı içerecek şekilde değiştireceğiz. {Yani bizim betiğimiz temelde şöyle görünmelidir: public class PlayerControls : MonoBehaviour { public Rigidbody2D rb; public Transform groundCheck; public Transform startPosition; halka açık yüzer groundCheckRadius; public LayerMask whatIsGround; özel bool onGround; void Başlat () {rb = GetComponent (); void Güncelleme () {rb.velocity = yeni Vector2 (3, rb.velocity.y); onGround = Physics2D.OverlapCircle (groundCheck.pozisyon, groundCheckRadius, whatIsGround); eğer (Input.GetMouseButtonDown (0) && onGround) {rb.velocity = yeni Vector2 (rb.velocity.x, 5); }}} 

Yaptıklarımızı açıklamak için, oyun dünyasının uzamında bir konum anlamına gelen yeni bir dönüşüm oluşturduk. Yarıçapını belirledik ve Birlik'e, yarıçapın zemin katmanımızla örtüşüp örtüşmediğini kontrol etmesini emrediyoruz. Böylece, eğer yarıçapımız yere eşitlendiyse, karakterimiz zıplayabiliyor ve eğer bizde bir sıçramadan hava, tekrar atlayamamalıyız. Temel olarak, groundCheck adlı dönüşümün zemin katmanı ile çakışması durumunda onGround doğru olur . Umarım bu mantıklıdır.

Komut dosyasını kaydedin ve Unity'ye geri dönün ve oyuncuyu vurguladıktan sonra Müfettişe daha fazla seçeneğin eklendiğini göreceksiniz. Bunlar genel değişkenler ve bunları bizim beğenimize göre ayarlayabiliriz.

Şimdi Hiyerarşi üzerine sağ tıklayın ve yeni bir boş nesne oluşturun ve ana Sahne penceresindeki ana karakter hareketinin altında sürükleyin - bu boş nesneyi, zeminin algılanmasını istediğimiz yere konumlandırın. Nesneyi Zemin Denetle olarak yeniden adlandırın ve daha sonra fotoğraf makinesinde yaptığımız gibi oyuncunun oyun nesnesinin altına sürükleyin (nesneler arasında ebeveyn - çocuk ilişkisi oluşturmak için). Şimdi boş nesne, tıpkı kamera gibi ana karakter hareketini izleyecek ve zemin mesafesini sürekli kontrol edecektir.

Şimdi ana karakter grafiğini seçin ve Inspector paneline gidin - Check Ground nesnesini groundCheck adlı alana sürükleyin. 'Dönüşüm' pozisyonu, bu yeni nesnenin konumuna eşit olmalı ve Yarıçap diyorsa, onu 0, 1 yapmalıdır.

Zemin tabakasını tanımlamamız gerek. Sadece zemin alanını seçin ve Müfettiş'te, Katman: Varsayılan (bu bir açılır kutu) düğmesini bulun ve Katman Ekle'yi seçin.

Şimdi platformumuz için katman olarak zemin seçin ve bunu oyun penceresindeki diğer tüm platformlar için tekrarlayın. Ana karakter sprite nesnesindeki zemin nedir diyor, aynı zamanda zemin katmanı seçin.

Yaptığımız şey, oyuncu betiğine bir kontrol gerçekleştirmesi için talimat vermesidir - ekrandaki küçük nokta, katmanla eşleşen herhangi bir şeyle çakışıyorsa, karakter yalnızca bu doğruysa atlayacaktır.

Çarpışma ve Oyun Menüsü Üzerine Oyun

Yani tüm bunları sarmak için, yapmak istediğimiz son şeyler A: Oyunun üstesinden gelinerek engellerin çarpışmasını sağla ve B: Tekrar oynat düğmesiyle menü ekranından bir oyun yarat.

Temelde yapmak istediğin şey:

  1. Bir Oyuncu nesnesi ekleyin ve seçeceğiniz bir rijit cisim ve bir çarpıştırıcı atayın.
  2. Bir Düşman nesnesini ekleyin ve seçeceğiniz bir rijit cisim ve çarpıştırıcı atayın. (ve isteğe bağlı, Enemy etiketini ekleyin)
  3. Yeni bir C # betiği oluşturun ve bunu Oynatıcı'ya bir bileşen olarak ekleyin (ya da oynatıcıya eklenmiş herhangi bir betik kullanın, zaten varsa yeni bir tane oluşturmanıza gerek yok)
  4. Bunu komut dosyanıza ekleyin:
 geçersiz OnCollisionEnter (Çarpışma coll) {Debug.Log ("Çarpışma"); // Bir çarpışmayı bile kaydedip kaydetmediğini kontrol edin, eğer çalışıyorsa bu satırı kaldırabilirsiniz (coll.gameobject.tag == "Enemy") { // oyuncunun çarpıştığı nesnenin "Enemy" adlı bir etiketin olup olmadığını görür. ", bu ile değiştirilebilir (coll.gameobject.name == ... ama bir etiket kullanarak bunu yapmak için kolay bir yoldur. // Kodunuzu buraya ekleyin, gibi: Application.LoadLevel (" GameOver "); Debug .Log ("Working"); // eğer çalışıyorsa, bu satırı kaldırabilirsiniz. } 

Bu örnek komut dosyası ile oynayın - bazı deneme ve hata ile, tam olarak ihtiyacımız olan şeyi yapmak için alacaksınız.

Şimdi bir Oyun Düğmesi ile bir GameOver seviyesinin nasıl oluşturulduğunu görmek için, Appual'ın kılavuzunun son bölümüne bakın. Temel Birlik Platformu Oyunu Oluşturma Pt. 2.

PRO TIP: Sorun bilgisayarınız veya dizüstü bilgisayar / dizüstü bilgisayar ile yapılmışsa, depoları tarayabilen ve bozuk ve eksik dosyaları değiştirebilen Reimage Plus Yazılımı'nı kullanmayı denemeniz gerekir. Bu, çoğu durumda, sorunun sistem bozulmasından kaynaklandığı yerlerde çalışır. Reimage Plus'ı tıklayarak buraya tıklayarak indirebilirsiniz.

Facebook Twitter Google Plus Pinterest