Unity ile 2D Video Oyunu Yapın

Bu Instructable da size gerçekten basit bir 2D Video oyunu yapmanızı göstereceğim. "Benimle Fly" veya "DoodleJump" gibi sonsuz bir koşucu tarzı oyun.

Burada deneyin !!

Size nasıl yapılacağını göstereceğim oyunun exe bir zip sağladı. İndirin ve deneyin.

Bir oyun giderken tamamen eksik, ama bana biraz C # komut dosyası öğrenmek ve iki hafta önce indirdiğimden beri aldığım Unity bilgisini sağlamlaştırmak için harika bir fırsat olarak hizmet etti. Paylaşım amacıyla, Eğitmenleri ana karakter olarak kendi sevimli Robot'u kullanmaya karar verdim. Aynı tarzda yapılan yore karikatürlerine saygı ile basit bir görünüm için gittim. Kalem karikatürle etkileşime girdiğinde hep sevdim.

Birliğin inanılmaz bir araç olduğunu söylemeliyim. Unity sitesinin öğrenme bölümünde bol miktarda bilgi var, 2D oyunları yapmaya başlamanın ne kadar basit olduğunu gördükten sonra bir göz atmanızı tavsiye ederim.

Size burada gösterdiğim her şey, Unity sitesinden öğrendim, harika eğiticiler ve video eğitim oturumları var.

Birlik konusunda yeni olabildiğiniz ya da olmayacağınız için yeniyim, bu sadece çevreye olan sevgimi ve şu ana kadar öğrenme deneyimimi paylaşmak.

Her adım için sprite varlıklarını sağlayacağım, böylece takip edebilir ve oyunu kendiniz yapabilirsiniz. Kodumu olduğu gibi kullanmamanızı, bunun yerine aynı komut dosyalarının kendi sürümünü izlemenizi ve yazmanızı öneririm.

C programlama deneyimi çok az ya da henüz C # çok hızlı bir şekilde komut dosyası oldu .... bana aşina olduğum Arduino ve İşleme, çok fazla hatırlatıyor.

Programlamaya aşina olmasanız bile, bunu da yapabileceğinize inanıyorum. En azından ne kadar kolay olduğunu görmek için maceramı takip et.

Adım 1: Ücretsiz Unity Yazılımını İndirin

Bascillay Unity, yazılımlarını kullanarak yaptığımız ürünlerle herhangi bir para kazanmadığımız sürece, oyun geliştirmeye girebilmemizi, ücretsiz öğrenmeye bırakarak dilememize izin verecek kadar naziktir. Muhteşem. Denemek için cesaret ve özgürlük ve inanılmaz yazılım için çok teşekkür ederim.

Takip etmeyi planlıyorsanız, Unity Homepage'e gitmeniz ve yazılımın ücretsiz sürümünü indirmeniz gerekir.
Ayrıca bir Unity Login (Unity Login) oluşturmanız gerekecektir, kurduktan sonra adımları izleyin.

Adım 2: Birliği Açın

Unity'yi ilk kez açıyorsanız, yeni bir proje oluşturmak için bir iletişim kutusu sunulur. Uygun bir yere göz atın ve projenize "Iblejump" gibi bir ad verin.
Formun altındaki "Kurulum Varsayılanları İçin" yazan 2D seçimi kontrol etmek çok önemlidir.

Yapacağımız oyun için hiçbir paketi içe aktarmanıza gerek kalmayacak. Oyununuz için ihtiyacınız olmadığı sürece onlarla uğraşmamanızı tavsiye ederim. Yapı dosyalarımıza ekstra toplu eklemenin bir anlamı yok.

Uygun seçimleri yaptığınızda, devam edin ve 'create' düğmesine basın.

Şimdi Unity Editor yeni boş projemizi açacak ve bize hoş bir açılır pencere sunacak. Şimdilik bunu kapatalım ve arayüzü biraz keşfedelim.

Çalışma alanı, iş akışınıza uyacak şekilde düzenleyebileceğiniz dört farklı bölüme ayrılmıştır.

Sol taraftaki hiyerarşi penceresi, o anda sahnenizde olan tüm nesneleri gösterir. Sahne penceresi, oyun nesnelerimizi oluşturacağımız ve yerleştireceğimiz yerdir.

Aşağıda, farklı sekmeleri kaldırabileceğiniz başka bir çalışma alanımız var. Sekmelerin çoğu uygun bulduğunuz bir alana yerleştirilebilir. Alanımı böyle ayarladım, işleri biraz farklı yapabilirsin. Dikkat edilmesi gereken en önemli şey, tüm bu pencerelere pencere açılır menüsünden erişebileceğiniz ve gerektiğinde ekleyebileceğiniz veya çıkarabileceğinizdir. pencereniz aynı görünmüyorsa endişelenmenize gerek yok. Kullanacağımız her alanı gittikçe daha ayrıntılı olarak göstereceğim.

Şimdilik "Ana Kameranızı" tıklayın, böylece Müfettiş ve sahne pencerelerinde sağda neler olduğunu görebilirsiniz.
Artık sahne penceresinin alt köşesinde boş sahnenizin nasıl bir önizlemesine sahip olduğunuza ve kameranın tüm bileşenlerinin ve özellik değerlerinin gösterildiğine dikkat edin.

3. Adım: İlk Oyun Nesnenizi Oluşturun


Öncelikle, sıkıştırılmış bir dosya olarak eklediğim Sprites klasörüne ihtiyacınız olacak. Klasörü bulabileceğiniz bir yere çıkarın.

Unity'de, proje çalışma alanında, proje sekmesinin altında Varlıklar seçiliyken, sıkıştırılmamış klasörü sağdaki gri alana sürükleyin. Projemi çoğaltmanız gereken tüm spritelar bu klasörde.

Yeni Sprites klasörüne gidin ve "navbar" adlı bir hareketli grafik bulun. Bunu Sahne penceresine sürükleyin. Görüntüde yaptığım gibi, sahnenin altına yakın bir yere bırakın.

Hiyerarşi pencerenizde yerleştirdikten sonra Ana Kamera'yı tıklarsanız, oyununuzda nasıl görüneceğini zaten görebilirsiniz.

Kutumuzu sağlamlaştırmak için bazı bileşenler eklememiz gerekecek, bir kutu çarpıştırıcısı ile başlayalım.

Yeni nesneniz seçiliyken, Müfettiş'te "Bileşen Ekle" yi tıklayın ve ardından Physics2D altında bulunan bir Kutu Çarpıştırıcısı 2D ekleyin

İlerleyin ve nesnenize ikinci bir 2B Kutu Çarpıştırıcısı ekleyin, bu da oyuncunun yanlışlıkla oyunun başlangıcında navbarın yanından düşmesini engellemek için kullanacağız.

Robot'un Talimatlar web sayfasında nerede olduğu hakkında başlamasını istediğim için ana çarpıştırıcıyı biraz küçülttüm. Ve ikinci çarpıştırıcı aslında açık alanda oturuyor, bu da oyun başladığında oyuncumuzun sol taraftan kaçmasını engelleyecek.

Kutu çarpıştırıcılarınızı görüntüdeki boyutlara uyacak şekilde ayarlayın, ayrıca transform parametresinin x ve y boyutunu 1, 5'e ayarlayın. Değişiklikleri sahne penceresinde izleyin.

Ekler

  • Sprites.zip İndir

4. Adım: Bir Oyuncu Ekleyin

Artık oyuncumuzun ayakta durması için bir platformumuz olduğuna göre, bir oyuncuya ihtiyacımız olacak.

Üst menü çubuğunda GameObject'i tıklayın, boş oluştur'u seçin.

Hiyerarşi penceresinde yeni boş oyun nesnenizi seçin ve Müfettiş'te yeniden adını Oyuncu olarak değiştirin.
Ardından, Oluşturma altında bulunan bir Sprite Oluşturucu Bileşeni ekleyin.

Proje varlıkları / sprite klasöründe Idle_Sprite öğesini bulun, yanındaki küçük üçgeni tıklatın ve görüntülerden birini sprite oluşturucu bileşeninin Sprite değerine sürükleyin.

Player'ımız için birkaç bileşene daha ihtiyacımız olacak. İlk olarak Physics2D seçeneklerinden bir Rigidbody2D ekleyin.

Şimdi oynat düğmesine basarsanız, Oynatıcımız gezinme çubuğundan düşecektir. Haydi deneyin.

Bunu birkaç çarpıştırıcı ekleyerek düzeltiriz. Bir şekilde sezgisel olarak, ayaklarımıza ve vücudumuza bir daire çarpıştırıcısı ve başımıza bir kutu çarpıştırıcı ekleyeceğiz.

Şimdi, play tuşuna basarsak, küçük robotumuz daire tabanlı herhangi bir robotun sırtına dönecektir. Sabit Açı onay kutusunu işaretleyerek düzeltin ve ardından oynat düğmesine bastığınızda robotunuz gezinme çubuğuna düşmeli ve orada güzelce dinlenmelidir.

Sevdiğim için biraz büyük, bu yüzden dönüşümdeki boyutunu .75 x ve .75 y olarak değiştirdim.

Sonra mutlu olana kadar navbar ve robotun konumlandırmasıyla uğraştım.

Sahnenizi kurtarmak, size iyi gelen bir isim vermek ve kaydetmek için iyi bir zaman.

Adım 5: Robot'a Hayat Katın

Tamam, şimdi oyuncu nesnesini yerleştirdiğimize göre, ona biraz animasyon ve işlevsellik eklemeye başlayabiliriz.

Oynatıcı Nesnesi seçiliyken bir Animatör Bileşeni ekleyin. Bileşen Ekle -> Çeşitli -> Animatör.
"Kök Hareketini Uygula" nın işaretini kaldırın ve "Canlandırma Fiziği" kutusunu işaretleyin.

Şimdi Animator pencerenizi açın. Bunu, proje çalışma alanında henüz açık değilse Pencere açılır menüsünden yapabilirsiniz. Mayınları altına yerleştirmeyi seviyorum.

Hiyerarşi'de Player hala seçiliyken Animasyon penceresini açın. Ayrıca Pencere açılır menüsünde de bulunabilir. Sahne ve oyun pencerelerimle aynı alana benimkini yerleştirmeyi seviyorum.

Animasyon penceresinde, yeni bir klip oluşturmak için "örnek" in yanındaki küçük üçgenleri tıklayın.

Aşağıdan, varlık / sprite klasörünüzü açın ve boş hareketli grafiği tekrar açın. Tüm görüntü serilerini Shift seçin ve animasyon penceresine sürükleyin.

Animatör (ben) çerçevelerde ucuz olduğu için örnek boyutunu 10'a sıfırlayın.

Şimdi Animator'unuza bakın, otomatik olarak iki durum eklemeniz gerekir, herhangi bir durum ve yeni bir varsayılan durum, Boşta. Turuncu renk bize bunun varsayılan animasyon durumu olduğunu söyler.

Bu adımları doğru bir şekilde izlediyseniz, oynat düğmesine bastığınızda animasyonlu bir Robot'a sahip olmalısınız.

Başka bir animasyon oluşturun ve buna sürücü deyin. Drive hareketli grafik sayfasını kullanın. Yine kare hızını düşürün. Şimdilik 20'ye koyuyorum. Daha sonra beğeninize göre tweek edebilirsiniz.

Animatör penceresinde, otomatik olarak ikinci bir durumun oluşturulduğunu göreceksiniz. Harika! Geçişleri oluşturmadan önce Animatörümüze "Hız" adlı bir şamandıra parametresi ekleyelim.

Şimdi Bekleme durumunu sağ tıklayın ve "Geçiş Yap" ı seçin. Ardından sürücü durumuna sürükleyin. Bu küçük bir ok çubuğu yapmalıdır. geçiş çubuğunun ortasındaki üçgeni seçin. Hız 0.01'den büyük olduğunda, denetleyicideki geçiş koşulunu değiştirin. Şimdi Speed'in 0.01'den küçük olması koşuluyla sürücüden rölantiye bir geçiş oluşturun.

Sonra Robot için bir kontrolör komut dosyası oluşturmamız gerekecek.

Adım 6: Robot Denetleyici Komut Dosyası

Bazı animasyon durumlarına sahip bir Player'ım olduğuna göre, karakteri kontrol etmek için bir komut dosyasına ihtiyacımız var. Player'ımızı kontrol etmek için projemize basit bir C # betiği ekleyeceğiz.

Proje penceresinde yeni bir klasör oluşturun ve Komut Dosyaları olarak adlandırın. Bu klasörü açın ve yeni bir C # betiği oluşturun, RobotController deyin.

MonoDevelop'u başlatmak için betiğe çift tıklayın. Açmak, sabırlı olmak biraz zaman alabilir.
Başlamak için aşağıdaki kodu girin
 UnityEngine kullanarak; System.Collections kullanarak; public class RobotController: MonoBehaviour {// Her zaman 1 halka açık şamandıra ile çarpacağımızdan bu maksimum hızımız olacak maxSpeed ​​= 2f; // sola bakıp bakmadığımızı gösteren bir boolean değeri bool facesLeft = true; // Animatör Animatör animimizi temsil edecek bir değer; // Başlatma için bunu kullanın void Start () {// animasyonu animatörümüze ayarlayın anim = GetComponent (); } // Güncelleme her kare için bir kez boşluk olarak çağrılır FixedUpdate () {float move = Input.GetAxis ("Horizontal"); // Ok tuşları ile hareket edersek bize bir tane verir // Oynatıcılarımızı rigidbody2D.velocity = yeni Vector3 (hareket * maxSpeed, rigidbody2D.velocity.y); // bizim hız animimizi ayarlayın.SetFloat ("Hız", Mathf.Abs (hareket)); // sola hareket ediyor, ancak sol kapakla karşı karşıya kalmıyorsak ve tam tersi ise (0 ve& facesLeft taşı) {Flip (); }} // gerekirse çevirin void Flip () {facesLeft =! facesLeft; Vektör3 theScale = transform.localScale; Ölçek.x * = -1; transform.localScale = theScale; }} 

Komut dosyasını kaydedin ve Unity penceresine dönün. Proje çalışmasından yeni RobotController komut dosyasını Hiyerarşi penceresindeki Player nesnesine sürükleyin. Oyunu çalıştırmak için oynat düğmesine basın; robotu sol ve sağ ok tuşlarıyla kontrol edebilmelisiniz. Oyunun altındaki Animatör penceresini açarsanız, Robot'un hareket edip etmediğine bağlı olarak animasyonun durumları sürücüden rölantiye değiştirmesini görmelisiniz.

7. Adım: Zıplayın - Oyuncu Denetleyicisi Komut Dosyası Devam

Player'ımızın zıplamasını sağlamak için uygulamak için sadece birkaç adım.
Zıplama ve düşme için bir animasyon durumuna ve şeyleri kontrol etmek için biraz daha koda ihtiyacımız olacak.

Oyuncu Animator'umuza iki parametre daha ekleyerek başlayalım. VSpeed ​​adı verilen bir şamandıra ve `Ground 'adı verilen bir Bool ekleyin. Dikey hızımızı korumak için vSpeed'i kullanacağız ve karakterin yerde ne zaman olduğunu tespit etmemize yardımcı olmak için Zemin yerinde olacak ve daha gerçekçi bir sıçrama sağlayacak. (Yere dokunmadan havada atlamak daha çok uçmaya benzer).

Sahne penceresine geri döndüğünüzde yeni, boş bir Oyun Nesnesi oluşturun. Yere kontrol deyin ve bir 2D Daire Çarpıştırıcısı ekleyin.
Yeni Çarpıştırıcıyı Hiyerarşi penceresindeki Player nesnesine sürükleyin. Groundcheck çarpıştırıcısının yarıçapını 0, 1 olarak değiştirin ve y dönüş konumunu -1 olarak değiştirin. Bu Robotların ayaklarının altına küçük bir daire koyar. Ayrıca Player olarak etiketleyin ve Player Katmanına yerleştirin.

Şimdi yeni parametrelerimizi kullanmak için komut dosyamızı güncelleyelim ve boşluk çubuğuna basıldığında Robotun atlamasını sağlamak için kodu yerleştirelim.

RobotController betiğinizi aşağıdaki gibi güncelleyin.

 UnityEngine kullanarak; System.Collections kullanarak; public class RobotController: MonoBehaviour {// Her zaman 1 halka açık şamandıra ile çarpacağımızdan bu maksimum hızımız olacak maxSpeed ​​= 2f; // sola bakıp bakmadığımızı gösteren bir boolean değeri bool facesLeft = true; // Animatör Animatör animimizi temsil edecek bir değer; // zemini kontrol etmek ve bir takviye gücüne sahip olmak için editör bool grounded = false olarak değiştirebiliriz; genel Transform groundCheck; yüzer zeminRadius = 0.2f; public LayerMask whatIsGround; halka açık zıplama gücü Force = 700f; // Başlatma için bunu kullanın void Start () {// animasyonu animatörümüze ayarlayın anim = GetComponent (); } void FixedUpdate () {// vSpeed ​​anim.SetFloat'ımızı ("vSpeed", rigidbody2D.velocity.y) ayarlayın; // topraklanmış bool'umuzu topraklı = Physics2D.OverlapCircle (groundCheck.position, groundRadius, whatIsGround); // Animatörümüzde topraklamayı topraklanmış anim.SetBool ("Toprak", topraklanmış) ile eşleşecek şekilde ayarlayın; float move = Input.GetAxis ("Horizontal"); // Ok tuşları ile hareket edersek bize bir tane verir // Oyuncularımızı hareket ettirin rigidbody rigidbody2D.velocity = new Vector3 (move * maxSpeed, rigidbody2D.velocity.y); // bizim hız animimizi ayarlayın.SetFloat ("Hız", Mathf.Abs (hareket)); // sola hareket ediyor, ancak sol kapakla karşı karşıya kalmıyorsak ve tam tersi ise (0 ve& facesLeft taşı) {Flip (); }} void Update () {// yerdeysek ve boşluk çubuğuna basıldıysa, zemin durumumuzu değiştirin ve (topraklanmış && Input.GetKeyDown (KeyCode.Space)) {anim.SetBool (" Toprak", false); rigidbody2D.AddForce (yeni Vector2 (0, jumpForce)); }} // gerekirse çevirin void Flip () {facesLeft =! facesLeft; Vektör3 theScale = transform.localScale; Ölçek.x * = -1; transform.localScale = theScale; }} 
Tekrar Müfettiş'teki Robot Denetleyici Komut Dosyasına dönün ve Zemin Nedir, oyuncu dışında her şeye ayarladığınızdan emin olun. Her şeyi seçin, ardından iletişim kutusunu tekrar açın ve Player'ın seçimini kaldırın. (Teşekkürler c0)

Bir sonraki adımda, atlama ve düşmeyi idare etmek için bir Animator karışım ağacı oluşturacağız.



Adım 8: Karışım Ağacı Animasyonu Yapma

Farklı düşme / atlama durumlarımızı tutmak için bir karışım ağacı yapalım. Her ikisi için ayrı animasyonlar yapabiliriz, ancak bu daha verimlidir ve küçük oyunumuz için daha az toplu gerektirir. Ayrıca havalı. (Unity'nin harika bir öğrenme materyali barındırdığından bahsetmiş miydim?)

Player animasyon pencerenize geri dönün, Player nesneniz seçiliyken 5 yeni animasyon klibi oluşturun, jump1 -jump5 olarak adlandırın.

Her klip için sırayla bir çerçeveyi jumpsheet'ten sürükleyin. yani jump1 için jumpsheet ilk görüntü, vb.

Canlandıran penceresini tekrar açın, sağ tıklayın, yumuşak ağaçtan ... yeni oluşturun. JumpFall olarak adlandırın.
Müfettişteki karışım ağacını açarak yeni JumpFall durumuna çift tıklayın.

Küçük artı işaretini ve Hareket Ekle alanını tıklayın, bunu beş kez yapın.

Eşik değerini -13 ile 10 arasında olacak şekilde değiştirin ve eşik parametresini vSpeed ​​olarak değiştirin.

Animasyondan memnun değilseniz, Otomatik Eşiği seçerek değerleri değiştirebilirsiniz. Bu basit oyun için yeterince iyi görünüyor. (Animatör tembelleşti ... yine)

Şimdi Animatör penceresine dönün, karışım ağacının açıldığını göreceksiniz, temel durumlarımıza geri dönmek için sol üst köşedeki Temel Katman'ı tıklayın.

Otomatik olarak oluşturulan tüm atlama durumlarını da silmelisiniz, Jump1 - Jump5 şimdi de. (Teşekkürler c0)

Herhangi Bir Durumdan yeni JumpFall durumuna ve ardından JumpFall'dan boşta olana geçiş oluşturun. Bu, herhangi bir durumdan, yani düşersek, atlama animasyonuna gidebileceğimiz anlamına gelir.

Herhangi bir Durumdan JumpFall'a geçişi, Zemin yanlış olduğunda ve JumpFall'den boşta iken zemin doğru olduğunda olacak şekilde ayarlayın.

Her şey bitti, oyunu tekrar çalıştırın ve Robot atlama ve boşluk çubuğu ile animasyon yapmak mümkün olmalıdır. Animasyon çerçeve eksikliği nedeniyle biraz sarsıntılı, isterseniz biraz değiştirmek için hareket alanı ile oynayabilirsiniz.

Adım 9: Yok Ediciler

Önümüzdeki adımlarda, daha fazla nesne ortaya çıkaran nesneler yaratacağız ve biraz temizlik yapılmadan oyunumuz hızla çökecek. Bunu göz önünde bulundurarak, oyun alanını terk ettikçe nesneleri yok etmek için bazı nesneleri ekranın dışına koyarak temizlemeye özen göstereceğiz.

Oyunumuz bir yan kaydırma cihazı olacak, bu yüzden sahnenin altına düşen nesneleri (Oyuncu gibi) yakalamak için bir tane ve daha önce kaydırılmış olan herhangi bir şeyi temizlemek için bir ekranın soluna yerleştireceğiz.

Bir dörtlü oluşturarak başlayın. GameObject - Başka oluştur -> Quad'e tıklayın. Dönüşüm konumunu x olarak -25 ve y'yi 0 olarak değiştirin. Sonra dönüşüm ölçeğini X 1 ve y 25 olacak şekilde ayarlayın.

Quad nesnesine Destroyer gibi havalı bir ad verin Mesh Collider bileşenini kaldırın ve bir kutu çarpıştırıcısı 2D ekleyin, ancak bu sefer "Tetikleyicidir" işaretli kutuyu işaretleyin.

Ayrıca bir katı cisim 2D ekleyin, ancak Müfettiş penceresinde yerçekimi ölçeğini sıfıra ayarlayın.

Proje çalışma alanında, Komut Dosyaları klasörünüzü açın ve yeni bir C # komut dosyası ekleyin, Destroyer olarak adlandırın. Çift tıklayın ve Monodevelop'u açın.

Aşağıdaki kodu yeni betiğe girin ve kaydedin.

 UnityEngine kullanarak; System.Collections kullanarak; public class Destroyer: MonoBehaviour {// Başlatma için bunu kullanın void Start () {} void OnTriggerEnter2D (Collider2D diğer) {// olayı tetikleyen nesne oyuncu olarak etiketlenmişse (other.tag == "Player") {Hata ayıklama Break (); dönüş; } if (other.gameObject.transform.parent) {Destroy (diğer.gameObject.transform.parent.gameObject); } else {Destroy (diğer.gameObject); }}} 

Destroy komut dosyasını Destroyer nesnesinin üzerine sürükleyin.
Şimdi Hiyerarşi penceresinde Destroyer nesnesine sağ tıklayın ve Çoğalt'ı seçin. Yeni Destroyer'ın dönüşümünü x = 0, y = -15 konumunda olacak ve ölçeği x = 50 ve y = 1 olacak şekilde değiştirin.

Oyununuzu şimdi çalıştırırsanız ve platformdan çıkarsanız (unutmayın, solda görünmez bir engel var), oyunu duraklatmalı ve sizi editöre geri getirmelidir.

Bunu daha sonraki bir adımda çözeceğiz.

Destroyer nesnelerimizle ilgili son şey, onları takip etmelerini isteyeceğimiz veya çok fazla şey yapmayacakları için onları kamera nesnesinden çocuk yapmaktır. Bunu yapmak için, bunları seçin ve Ana Kamera nesnesine sürükleyin.

Adım 10: El

Çizgiyi çizen el oldukça basit. Hadi başlayalım.

Önce el hareketli grafiğini sahne pencerenize sürükleyin, sahnede nerede oturduğunu görmek için kamera nesnesini kullanarak konumlandırın.

Ölçeği x = 2 ve y = 2 olacak şekilde dönüştürün.

Yeni bir boş oyun nesnesi oluşturun ve buna Penciltip adını verin. Sahne düzenleyicisini kullanarak kalemin en ucuna yerleştirin.

Gerekirse kolayca bulabilmeniz için küçük bir etiket verin. Bunu Müfettiş'teki küçük küp simgesine tıklayarak yapın.

Şimdi Penciltip'i el nesnesine sürükleyerek birleştirin. Son olarak el nesnesini Hiyerarşi penceresindeki Ana Kameraya sürükleyin.

Henüz bir şey yapmıyor, ama parçalar yerinde. ihtiyacımız olan diğer bazı bitleri ayarlayalım.

Adım 11: Kalem Çizgisi

Bir prefabrik bir nesnenin kaydı gibidir, nesneyi bir prefabrik hale getirirsiniz ve onu sahnenizde istediğiniz gibi kullanabilirsiniz.
Seviye programlı olarak oluşturulduğu için bunları oyunun geri kalanında kullanacağız.

Varlıklar klasöründe yeni bir klasör oluşturarak başlayın ve buna Prefabs deyin. Sağ tıklayarak ve Prefabrik'i seçerek yeni bir Prefabrik oluşturun. Yeni Prefabrik pencilini adlandırın.

Sprite klasöründe pencilline adlı hareketli grafiği bulun ve hiyerarşi penceresinde yeni gameObject öğesine sürükleyin.

Bir kutu çarpıştırıcısı 2D ekleyin ve pencillin görüntüsüne sığması için yeniden boyutlandırın. 0, 03 ile 0, 03 çalışır.

Prefabrik klasörünüzü açın, ardından GameObject öğesini prefabrik üzerine sürükleyin. Simge yeni prefabrik ile eşleşecek şekilde değişir.

Oyun nesnesini prefabrike yerleştirdikten sonra silin. Artık orijinaline ihtiyacımız olmayacak.

Şimdi Komut Dosyaları klasörünüze yeni bir C # komut dosyası ekleyin, buna pencilline deyin. Açın ve aşağıdaki komut dosyasını girin.

 UnityEngine kullanarak; System.Collections kullanarak; genel sınıf pencilline: MonoBehaviour {// prefabrik pencilline açık GameObject objemize başvurmak için; float lastx = 0f; // Başlatma için bunu kullanın void Start () {} // Her kare void için güncelleme çağrılır Update () {// eğer yeterince hareket ettiysek, eğer yeni bir kalem yapın (transform.position.x> (lastx + 0.02f) )) {Anlık (obj, dönüşüm.pozisyon, Kuaterniyon.Kurum); lastx = dönüşüm.pozisyon.x; lastx = dönüşüm.pozisyon.x; }}} 
Komut dosyasını El'deki penciltip nesnesine sürükleyin. Daha sonra penciltip seçiliyken, prefabrik klasörünüzü açın ve pencilline prefabrik ürününüzü komut dosyası denetleyicinizdeki yeni obj parametresine sürükleyin.

Kameramızın hala kontrol komut dosyası yok, ancak oyunu çalıştırırsanız, kalemin ucunda üretilen bir pencilline nesnesi görmelisiniz. Arka planı mavi olduğu ve çizgi beyaz bir arka plan için yapıldığı için görebilirsiniz.

Adım 12: Kamerayı Rulo!

Kamerayı açalım.
Camera nesnesinin tamamı üretildi, bu yüzden gerçekten bir denetleyici komut dosyasına ihtiyacımız var.

Senaryoyu yazmadan önce sadece küçük bir değişiklik. Arka plan rengi. Beyaz olması gerekiyor, çizgi değilse kırıntılı görünecek, bunları kullanmaya karar vermeniz durumunda notları belirtmiyorum.

Hiyerarşi penceresindeki ana kamerayı seçmeniz ve Müfettiş'teki renk örneğini tıklamanız yeterlidir, bir renk seçici açılır. Beyaz seçin.

Tamam, yeni senaryo, mayın pancamını aradım. Betik klasörünüzde bir tane oluşturun ve Monodevelop'ta açın ve aşağıdakileri girin.

 UnityEngine kullanarak; System.Collections kullanarak; kamu sınıfı pancam: MonoBehaviour {float ydir = 0f; halka açık GameObject oynatıcı; // Başlatma için bunu kullanın // Her kare boşluğu için güncelleme bir kez Update () {// oynatıcının var olup olmadığını kontrol edin ve devam edin. aksi takdirde oyuncu (player) {// oyuncu -1 x konumunu geçtiyse ölürse bir hata alırız ve sonra (player.transform.position.x> -1) {float randy = 0f; randy = Rastgele Aralık (0f, 100f); eğer (randy 20 && randy 80) {ydir = 0f; } transform.position = yeni Vector3 (transform.position.x + 0, 03f, transform.position.y + ydir, -10); }}}} 
Şimdi komut dosyasını hiyerarşide Ana Kameranıza uygulamanız ve sonra Player nesnesini script parametresine sürüklemeniz gerekir.

Oyunu tekrar deneyin, sadece sonsuz bir koşucu yaptınız !!! Neredeyse. Hala birkaç şeye ihtiyacımız var, ama şimdi yaklaşıyor.

Elim istediğimden biraz daha yüksek, ancak sahne düzenleyicide biraz dürteceğim.

13. Adım: Puan Ekleme

GameObject menüsünden yeni bir GUIText nesnesi ekleyin ve puan olarak adlandırın.

Müfettiş'te Metin değerini Puan olarak ve rengi siyah olarak değiştirin.
Oyun penceresini açın, kullanılamıyorsa, üst kısımdaki Pencere açılır penceresinin altında bulabilirsiniz.

Dönüştürme konumunu ayarlayın, bir nedenden dolayı GUI nesneleri için garip çalışır, 0, 5% 50 ve 0, 0 sol alt köşede görüntülenebilir ekranın yüzdesi olarak düşünün.
X = 0, 3 ve y = 0, 97, sol köşede üste doğru koyar.

Şimdi Kamera betiğimize biraz daha kod eklememiz gerekiyor. Bu değişikliklerle betiği güncelleyin.
 UnityEngine kullanarak; System.Collections kullanarak; kamu sınıfı pancam: MonoBehaviour {float ydir = 0f; halka açık GameObject oynatıcı; // GUIText nesnesimiz ve skorumuz için genel GUIElement gui; float playerScore = 0; // bu işlev guitext nesnesini void olarak günceller. OnGUI () {gui.guiText.text = "Skor:" + ((int) (playerScore * 10)). ToString (); } // bu, skoru kamu void artırmak puanını artırmak için arayabileceğimiz genel bir işlevdir .Score (int miktar) {playerScore + = miktar; } // Güncelleme her kare void için bir kere çağrılır Güncelleme () {// oynatıcının var olup olmadığını kontrol edin ve devam edin. aksi takdirde oyuncu (player) {// oyuncu -1 x konumunu geçtiyse ölürse bir hata alırız, ardından (player.transform.position.x> -1) {/ / saat oyuncumuzun her işaretini güncelleyinScore + = Time.deltaTime; şamandıra randy = 0f; randy = Rastgele Aralık (0f, 100f); eğer (randy 20 && randy 80) {ydir = 0f; } transform.position = yeni Vector3 (transform.position.x + 0, 03f, transform.position.y + ydir, -10); }}}} 

Pancam betiğini kaydedin ve birliğe geri dönün.

Ana Kamerayı tekrar seçin, Müfettiş'in Komut Dosyası bileşeninde yeni bir parametrenin bulunduğunu göreceksiniz. Score GuiText nesnesini Gui parametresine sürükleyin.

Tekrar oynamayı deneyin, yükselen bir skorunuz olmalı.

Adım 14: Bombalar Uzakta

Kahramanımız için henüz gerçek bir tehlike yok. Bunu düzeltiriz. Çizgi film bombalarını gökyüzünden düşürüp çizgiyi kıralım.

Yeni bir boş oyun nesnesi oluşturun ve Bomba olarak adlandırın. Hareketli grafik klasöründe, hareketli hareketli grafiği bulun, açın ve ilk kareyi Bomba'ya ekleyin. Dönüştürme ölçeğini X = 0, 5, Y = 0, 5 olarak ayarlayın.

Bir daire çarpıştırıcısı 2D ekleyin ve iyi görünmesi için ölçeğini ve konumunu değiştirin. Bombaların düşmesini istiyoruz, bu yüzden katı bir cisim 2D'ye de ihtiyacımız olacak, bu bileşeni de ekleyeceğiz.

Bomba durumlarımızı kontrol etmek için bir Animatör'e de ihtiyacımız olacak, bu yüzden de ekleyin. Kök Hareketi Uygula'nın işaretini kaldırın ve Müfettiş'teki Canlı Fizik kutusunu işaretleyin.

Animasyon penceresini açın, hala Bomb_0 bombanın seçili olduğundan emin olun. Bir animasyon ekleyin ve buna bombidle deyin, bu Animatörümüzde yeni bir varsayılan durum yaratacaktır. Hareketli grafik sayfasının ilk 3 karesini kullanın (sürükleyip bırakın) ve ardından Örnek'i yaklaşık 20'ye düşürerek kare hızını azaltın.

Başka bir yeni klip oluşturun, buna bir bomb patlaması deyin ve bomba sprite sayfasının kalan karelerini kullanın. Yine, kare hızını yaklaşık 20'ye düşürün.

Animator penceresinde, bombidle'den bombalı patlamaya geçiş yapın, çıkış zamanı için koşulu bırakın ve değeri 5.00 olarak değiştirin. Bu, bombaların durumları patlamaya geçmeden önce 5 saniye boyunca boşta kalacağı (sigorta yanmış) anlamına gelir.

Animasyon penceresinde üçüncü bir animasyon oluşturun, bomba tarağı olarak adlandırın ve boş bırakın. Animator'da bomb patlayandan bombaya geçiş yapın.

Script klasörünüzde bomb adlı yeni bir script oluşturun.

 UnityEngine kullanarak; System.Collections kullanarak; genel sınıf bombası: MonoBehaviour {// Animatör Animatör animamızın sahibi; // patlama yarıçapı için halka açık halka açık halka açık halka patlayabilir Radi = 1f; // Başlatma için bunu kullanın void Start () {anim = GetComponent (); } // Kare başına bir kez güncelleme void Update () {// if patlaması yapılırsa if (anim.GetCurrentAnimatorStateInfo (0) .IsName ("bombdead")) {// olmadıkça bir yarıçaptaki tüm nesneleri yok edin etiketli Oyuncu veya el Collider2D [] çarpıştırıcılar = Physics2D.OverlapCircleAll (transform.position, explodeRadius); foreach (çarpıştırıcılarda Collider2D col) {if (col.tag! = "Oyuncu" && col.tag! = "el") {Destroy (col.collider2D.gameObject); }} Yok Et (this.gameObject); }}} 
Son olarak, bomba komut dosyasını bomb_0 nesnenize sürükleyin.

Neredeyse unuttuğum küçük bir şey, eli el olarak etiketlemektir. bunu yapmak için, hiyerarşi penceresinde el nesnenizi seçin ve ardından etiket altında etiket ekle'yi seçin. Hand adlı el ile element0'da yeni bir etiket oluşturun, ardından el nesneniz seçiliyken etiketi el ile değiştirin. Ayrıca penciltip nesne etiketini de değiştirin.

Oyunu çalıştırmayı deneyin, bomba düşmeli, patlamalı ve navbar'ı çıkarmalıdır. (tabiki nereye yerleştirdiğinize bağlı olarak)

Adım 15: Bomba Yumurtlama

Şimdi oyunu oynamak biraz zor, yapacağımız şey, bombaları yumurtlamak için bir yumurtlama nesnesi yapmak, tıpkı penciltip pencilini doğuruyor gibi.

İhtiyacımız olan ilk şey bombamızın bir Prefabrikidir. Prefabrik klasörüne gidin ve yeni bir prefabrik oluşturun, bomba olarak adlandırın. Bomba nesnesini bomba prefabresine sürükleyin. Prefabrik olduktan sonra hiyerarşideki orijinal Bomba Nesnesini silin.

BombSpawn adında yeni bir dörtlü nesne oluşturun. Ana Kamera görünümünde veya Oyun penceresinde kamera doğrulamasının üstüne yerleştirin.

Betik klasörünüzde BombSpawner adlı yeni bir komut dosyası oluşturun ve aşağıdaki kodu verin.

 UnityEngine kullanarak; System.Collections kullanarak; ortak sınıf BombSpawner: MonoBehaviour {// nesnelerin ortak GameObject [] objesi üreteceği bir ortak nesne dizisi; // başka bir spawn halka açık spawn için min ve maks kereMin = 3f; halka açık şamandıra spawnMax = 2f; void Start () {// spawn Spawn () 'yı başlat; } void Spawn () {// rasgele sayı al float rand = Random.Range (0, 1000); // rasgele sayı 700'den büyükse (rand> 700) {Instantiate (obj [Random.Range (0, obj.GetLength (0))], transform.position, Quaternion.identity); } // min. ve max arasındaki rastgele zaman aralığında spawn çağırın Invoke ("Spawn", Random.Range (spawnMin, spawnMax)); }} 
Önce BombSpawn nesnesini hiyerarşi penceresi aracılığıyla kameraya sürükleyerek Ana Kamera'nın bir alt öğesi yapın.
Şimdi komut dosyasını Hiyerarşi penceresindeki BombSpawn nesnesine sürükleyin. Şimdi Müfettiş'te BombSpawn açılmışken, Bomba prefabresini kod bileşenindeki Obj etiketli küçük üçgene sürükleyin.

Düşen bombaları oyuncunun hatta yürümeye başlamasına kadar geciktirmek için Bomba senaryomuza (son adımdan itibaren) bir if ifadesi eklemeliyiz. Sahnemdeki hızlı bir kontrol, 7. katta oturan eli gösteriyor, bu yüzden bombalar 12'yi geçene kadar damlaları geciktireceğim.
İşte değiştirilmiş Bomba komut dosyası.

 genel sınıf bombası: MonoBehaviour {// Animatör Animatör animamızın sahibi; // patlama yarıçapı için halka açık halka açık halka açık halka patlayabilir Radi = 1f; // Başlatma için bunu kullanın void Start () {anim = GetComponent (); } // Kare başına bir kez güncelleştirme çağrılır Update () {// eğer bu bomba, yumurtlayan x = 12'yi geçtikten sonra ortaya çıkarsa (transform.position.x> 12) {this.gameObject.SetActive (true) ; } // aksi takdirde bomba işe yaramaz başkası {this.gameObject.SetActive (false); } // eğer patlamayı bitirirsek if (anim.GetCurrentAnimatorStateInfo (0) .IsName ("bombdead")) {// Oyuncu veya el olarak etiketlenmedikçe yarıçaptaki tüm nesneleri yok et Collider2D [] colliders = Physics2D.OverlapCircleAll ( transform.position, explodeRadius); foreach (çarpıştırıcılarda Collider2D col) {if (col.tag! = "Oyuncu" && col.tag! = "el") {Destroy (col.collider2D.gameObject); }} Yok Et (this.gameObject); }}} 
Şimdi Robot hatta zıplayabilir ve bombalar düşmeye başlamadan önce biraz yürüyebilir ... Hala çok zor değil. BombSpawn nesnesini çoğaltalım !! Sonra biraz hareket ettirin ve iki bomba doğuşcumuz var, oynayalım.

Adım 16: Platformlar (veya Doodle'lar)

Doodle platformlarını oluşturmak için birkaç prefabrik oluşturarak başlıyoruz. Prefabrik klasöründe yeni bir klasör oluşturun ve Doodles olarak adlandırın.

Doodle1 olsa doodle1 adlı 10 yeni prefabrik oluşturun.

Yeni bir boş oyun nesnesi oluşturun, adlandırmanıza gerek yok.

Sprite klasörünü açın ve karalamalar sayfasını bulun, açın ve ilk doodle'ı seçin. Hiyerarşi penceresindeki boş oyun nesnesine sürükleyin.

Müfettişe bir kutu çarpıştırıcısı 2D ekleyin, ardından doodle üzerinde güzelce oturması için ölçek ve merkezle oynayın. Unutmayın, Robot iniş yapacak.

Prefabs / Doodles klasörünüzü içinde boş prefabrikler ile açın ve ardından yeni GameObject öğesini doodle1 prefabrikine sürükleyin.

Şimdi, tüm bu işlemi tekrarlamak yerine, sprite klasörüne geri dönün, bir sonraki doodle'ı alın ve Oyun Nesnesinin Sprite Renderer bileşenine sürükleyin, çarpıştırıcının konumunu ayarlayın ve bir sonraki doodle prefabrike koyun.

Kalan doodle prefabreleri için bunu tekrarlayın. Hepsi prefabrik olarak kaydedildikten sonra, bunları oluşturmak için yaptığımız GameObject'i silebilirsiniz.

Şimdi Ana kameramızın altında bir BombSpawn nesnesi çoğaltın ve ekranın dışına doğru hareket ettirin. Müfettişe DoodleSpawn gibi yeni bir isim verin.

Ardından, yeni prefabriklerin her birini komut dosyası bileşenimizin Obj parametresine sürükleyin. Bombayı değiştirmek için ilk öğeyi 0 öğesinin içine, diğerlerini de listeye eklemek için Obj'nin yanındaki küçük üçgene sürükleyin.

Ne sıklıkta oluşturulduklarını değiştirmek için kod bileşenindeki min / max parametresiyle oynayın. DoodleSpawn nesnesini çoğaltın ve başka bir düzey kümesi istiyorsanız yukarı taşıyın.

One thing I noticed while playing is that Robots max speed was too low, I increased it over here. Go to your Player object and adjust the maxSpeed variable in the Script component if you find the same issue.

Step 17: Bonus Point Pickups

Making the Pickups is very similar to making the doodles. A few small differences. Start by creating a new folder in the Prefabs folder called Bonus, and populate it with 6 blank prefabs.

We will need a script to handle adding the bonus points to the GUIText object, so in the scripts folder, create a new script called BonusPoints. Here is the script to enter in Monodevelop.

 using UnityEngine; using System.Collections; public class BonusPoints : MonoBehaviour { //make a container for the heads up display pancam hud; void OnTriggerEnter2D (Collider2D col) { if (col.tag == "Player") { hud = GameObject.Find ("Main Camera").GetComponent(); hud.increaseScore(10); Destroy (this.gameObject); } } } 

Now return to the scene and create a new empty GameObject. Find powerups in the sprites folder, and drag the first sprite into the new GameObject.

Transform the scale to x=2, y=2 over in the inspector, then add a box collider 2D. This time we want to check the box marked Is Trigger.

Now drag the BonusPoints script into powerups_0. Open the prefabs/bonus folder and drag the GameObject into the prefab.

As in the previous step, just replace the Sprite Renderer Sprite for each prefab and save them.

Once the six Bonus Prefabs are made, we can delete the GameObject that we used to construct them.

To spawn our bonuses, we will just duplicate the DoodleSpawn object, rename it BonusSpawn, move it up a little bit and replace the object that it spawns.

Step 18: Game Over

The home stretch!! All we need now is for the player to die rather than a break in the code. That, and we'll need a second scene, to display that the game has ended and offer the chance to play again.

Lets add this scene to the build before we start the new scene. In the File pulldown menu, select Build Settings.
In the dialog box that opens up, click the Add Current button, and verify that the scene has a scene # of zero. Close the dialog box.

Make sure you save your current scene and then select New Scene. Name the scene GameOver and put it in the Assets folder.

Add a GUIText object from the GameObject pulldown menu. In the inspector, change Anchor to upper center and alignment to center. Also change the font size to 20 and the color to black.

Back in the scene, drag the sticky note called notes_score to the scene and position it roughly center, use the Game window to see how it will look. Do the same with the Game Over sprite, just drop it where it looks good.

Create a gameOver script in the script folder, like this one.

 using UnityEngine; using System.Collections; public class GameOver : MonoBehaviour { int score = 0; public GUIElement gui; // Use this for initialization void Start () { //get our score from playerprefs score = PlayerPrefs.GetInt ("Score"); //multiply by 10 as we did on displayed score score = score * 10; } void OnGUI(){ //set our text to our score gui.guiText.text = score.ToString (); //if retry button is pressed load scene 0 the game if(GUI.Button(new Rect(Screen.width/2-50, Screen.height/2 +150, 100, 40), "Retry?")){ Application.LoadLevel(0); } //and quit button if(GUI.Button(new Rect(Screen.width/2-50, Screen.height/2 +200, 100, 40), "Quit")){ Application.Quit(); } } } 

Kaydedin ve yeni sahnemizde Ana Kameraya sürükleyin.

Neredeyse hepsi bitti, skoru ilerletmek için kamera betiğimize bir fonksiyon eklememiz gerekiyor ve bizi GameOver sahnesine göndermek için kod kopuşumuz olan destroyer betiğimizi değiştirmemiz gerekiyor.

Yeni Kamera komut dosyası.

 UnityEngine kullanarak; System.Collections kullanarak; kamu sınıfı pancam: MonoBehaviour {float ydir = 0f; halka açık GameObject oynatıcı; // GUIText nesnesimiz ve skorumuz için genel GUIElement gui; float playerScore = 0; // bu işlev guitext nesnesini void olarak günceller. OnGUI () {gui.guiText.text = "Skor:" + ((int) (playerScore * 10)). ToString (); } // bu, skoru kamu void artırmak puanını artırmak için arayabileceğimiz genel bir işlevdir .Score (int miktar) {playerScore + = miktar; } // Bir seviye yüklediğimizde kamera devre dışı bırakılacak, playerprefs void OnDisable () {PlayerPrefs.SetInt ("Score", (int) (playerScore)) skorunu ayarlayacağız; } // Güncelleme her kare void için bir kere çağrılır Güncelleme () {// oynatıcının var olup olmadığını kontrol edin ve devam edin. aksi takdirde oyuncu (player) {// oyuncu -1 x konumunu geçtiyse ölürse bir hata alırız, sonra (player.transform.position.x> -1) {/ / saat oyuncumuzun her işaretini güncelleyinScore + = Time.deltaTime; şamandıra randy = 0f; randy = Rastgele Aralık (0f, 100f); eğer (randy 20 && randy 80) {ydir = 0f; } transform.position = yeni Vector3 (transform.position.x + 0, 03f, transform.position.y + ydir, -10); }}}} 

Sabit Destroyer betiği

 UnityEngine kullanarak; System.Collections kullanarak; public class Destroyer: MonoBehaviour {void OnTriggerEnter2D (Collider2D diğer) {// olayı tetikleyen nesne oyuncu olarak etiketlenmişse (other.tag == "Oyuncu") {Application.LoadLevel (1); } if (other.gameObject.transform.parent) {Destroy (diğer.gameObject.transform.parent.gameObject); } else {Destroy (diğer.gameObject); }}} 

Bil bakalım ne oldu? Az önce bir oyun yaptın! Ben de yaptım!! bizim için woot!
Tamam, bu dünyadaki en iyi oyun değil, ama asıl mesele bu değil. En azından benim için değildi. Her şeyin ne kadar basit olduğuna şaşırdım ve paylaşmak zorunda kaldım. Yapmaya başla, yeni harika oyunlar oynamak için sabırsızlanıyorum!

Adım 19: Dosyalar, vb.

i birlikte yazdığımız komut dosyalarına erişmek biraz daha kolay hale getirmek için bu son adımı ekledim.
İşte yeni geçtiğimiz senaryolar.

Durduğunuz için çok teşekkürler, umarım yaptığım kadar zevk aldınız.
Paylaş ve Keyfini çıkar.

Ah ve ...... oy fiyort araba?

Ekler

  • bomb.zip İndir
  • BombSpawner.zip İndir
  • BonusPoints.zip İndir
  • Destroyer.zip İndir
  • GameOver.zip İndir
  • pancam.zip İndir
  • pencilline.zip İndir
  • RobotController.zip İndir

İlgi̇li̇ Makaleler