Unity İle Oyun Programlama: Başlangıç ​​Kılavuzu

Unity İle Oyun Programlama: Başlangıç ​​Kılavuzu
Bu kılavuz ücretsiz PDF olarak indirilebilir. Bu dosyayı şimdi indirin . Bunu kopyalayıp arkadaşlarınızla ve ailenizle paylaşmaktan çekinmeyin.

İnternet ekonomisinin şaşırtıcı bir özelliği, bağımsız video oyunlarının yükselişidir. Bir zamanlar bin kişilik, multi-milyon dolarlık üçlü-A stüdyolarının özel alanı, modern oyun geliştirme kaynaklarını bireylerin veya programcıların ve tasarımcıların küçük, geçici koleksiyonlarının eline geçiren bir dizi araç seti geliştirildi. Daha önce en iyi bağımsız oyunlardan bahsetmiştik, bu yüzden Unity gibi araçlarla neler başarılabileceği konusunda ilham almak için bunlara göz atmayı unutmayın.





Bu bağımsız oyun geliştirme ekipleri, çoğu durumda oyun inovasyonunu büyük bütçeli meslektaşlarından daha hızlı ilerletmelerine olanak tanıyan bir çeviklik ve risk toleransı sergilediler. Şok edici derecede başarılı bir dizi indie oyunu son yıllarda prömiyer yaptı. Minecraft , araf , ve süper et çocuğu ve bunun gibi oyunlar yapmak için becerilere sahip olmasanız bile, Buildbox kullanarak bir oyun yapabilirsiniz.





Bağımsız oyun geliştirmenin hızla gelişen ortamında, Birlik fiili bir standart olarak ortaya çıkmıştır: düşük maliyeti, kullanım kolaylığı ve geniş özellik seti onu hızlı oyun geliştirme için ideal kılmaktadır. Unity o kadar esnektir ki, kendi özel oyun denetleyicilerinizi yapın biraz DIY ile nasıl olduğunu biliyorum!





ÇKP (Geliştiriciler) gibi büyük stüdyolar bile Eve Çevrimiçi ) oyun konseptlerini hızlı bir şekilde prototiplemek için kullanın. Unity, bir 'kutu içinde oyun motoru' sağlar - neredeyse her tür video oyununa uyarlanabilen, birkaç komut dosyası dili için kancalara sahip bir fizik ve işleme motoru.

Unity, oyun ortamını manipüle etmek için görsel bir düzenleyici sağlarken, Unity bir 'sıfır programlama' oyun yaratıcısı aracı değildir. Sonuç üretmek için programlama yapmanızı gerektirir, ancak aynı zamanda size herhangi bir 'oyun yapımcısı' programından muhtemelen çok daha esnek ve güçlü bir araç sunar.



Unity sizin için işi yapmayacak, ancak giriş engelini önemli ölçüde azaltıyor. C++ ve OpenGL ile tamamen sıfırdan başlayarak, ekranda gerçekten işlenen bir şeyin olduğu noktaya gelmek günler alabilir. Unity kullanarak, yaklaşık on saniye sürer. Unity, oyun yaratmanın temel unsurlarını acemi programcıların ellerine hızlı ve sezgisel bir şekilde verir.

Bugün, on ana bölüme ayrılmış Unity'de bir oyun yapmak için bilmeniz gereken her şeyde size rehberlik edeceğim:





§1–Unity Sürümleri

§2–Unity'yi Yükleme





§3–Nesne Yönelimli Paradigmaya Kısa Bir Giriş

§4–Birlik Temelleri

§5–Örnek: Bir Oyunun Temel Öğeleri

§6–Unity'de Komut Dosyası Oluşturma

§7–Örnek: Komut Dosyası Pong

§8–Belgeleri Keşfetme / Daha Fazlasını Öğrenme

§9–Oyununuzu Oluşturma / Bağımsız Bir Uygulamaya Derleme

§10-Kapanış Notları

1. Unity Sürümleri

Unity iki temel çeşide sahiptir: profesyonel sürüm ve ücretsiz sürüm. bir fark sayısı , ancak genel olarak konuşursak, profesyonel sürüm bir dizi görsel iyileştirmeyi (gerçek zamanlı yumuşak gölgeler ve son işleme gibi) ve daha karmaşık oyunlar için son derece yararlı olan çok sayıda nispeten küçük özelliği destekler.

Bununla birlikte, oluşturmak isteyebileceğiniz nispeten basit oyunların çoğu için Unity'nin ücretsiz sürümü tamamen yeterlidir. İlgilenenler için aşağıdaki temel farklılıkları daha ayrıntılı olarak inceleyeceğiz.

1.1 Fiyatlandırma

Unity'nin ücretsiz sürümü elbette ücretsizdir. Bununla birlikte, birkaç sınırlama vardır: Unity'nin ücretsiz sürümü, yıllık geliri şundan fazla olan hiçbir şirkete lisanslanamaz. 100.000 dolar . Bu tür kuruluşlar bu kılavuzun kapsamı dışında olsa da, böyle bir kuruluş olabileceğinizden şüpheleniyorsanız, muhtemelen Pro sürümüne geçmeniz akıllıca olacaktır.

Unity'nin Pro sürümü 75 $ bir ay veya 1500 $ kalıcı bir lisans için ve onunla oluşturulan oyunlarla yapabileceklerinizin sınırı yok. Ayrıca, size mevcut özelliklere mümkün olduğunca eksiksiz bir genel bakış sunmak için bu kılavuzda kullanacağımız 30 günlük ücretsiz deneme sürümü de mevcuttur. Bir yıllık öğrenci lisansı da şuradan edinilebilir: Ders çalışma için 129 $ .

1.2 Özellikler

Unity'nin ücretsiz sürümünde bulunmayan birçok özellik vardır. Bununla birlikte, en önemli farklar şunlardır: Unity'nin ücretsiz sürümü, daha iyi görünen, daha hızlı çalışan oyunlara (LOD desteği, ekran alanı son işleme, gelişmiş gölgelendiriciler, gerçek zamanlı yazılım) izin veren bir dizi oluşturma seçeneğinden yoksundur. gölgeler ve ertelenmiş oluşturma). Ayrıca tam yoksun mekanik animasyon sistemi , ve bazı AI araçları.

Genel olarak, karmaşık, büyük ölçekli projeler veya grafik performansının önemli olduğu projeler için profesyonel sürüm faydalıdır. Oculus Rift için sanal gerçeklik oyunları geliştirdiğim için pro sürümünü kullanıyorum ve kulaklıkla doğru bir şekilde etkileşim kurmak için ekran alanı son işleme desteği gerekli.

2. Unity'yi Kurma

Unity'nin kurulumu kolaydır. Yürütülebilir dosyayı şuradan indirebilirsiniz: Unity3d.com/get-unity/download .

İndirdikten sonra çalıştırın ve ardından yükleyici talimatlarını izleyin. Kurulum tamamlandığında, 'Unity lisansınızı etkinleştirin' başlıklı bir pencere görünecektir. 'Unity Pro'nun 30 günlük ücretsiz deneme sürümünü etkinleştir' ve ardından 'Tamam' olarak işaretlenmiş kutuyu işaretleyin.

Tebrikler! Artık Unity Pro'nun 30 günlük deneme sürümüne sahipsiniz. Deneme süresi sona erdiğinde pro sürümü satın almak istemiyorsanız ücretsiz sürüme geçebilir ve mevcut içeriğinizi koruyabilirsiniz.

android'de görsel arama nasıl tersine çevrilir

3. Nesne Yönelimli Paradigmaya Kısa Bir Giriş

Unity'ye başlamadan önce, temelleri biraz gözden geçirmemiz önemlidir. Unity her ikisini de destekler C # ve JavaScript için oyun programlama ; Bu eğitim için C# ile çalışacağız.

Öncelikle, daha önce hiç programlamadıysanız, bu öğreticiyi bir kenara koyun ve birkaç gününüzü Microsoft'ta çalışarak geçirin. C# Dil Astarı basit görevler için dili kullanmakta kendinizi rahat hissedene kadar.

C#'tan biraz farklı bir şey istiyorsanız (ancak mutlaka Unity'de kullanabileceğiniz bir dil değil), yeni başlayanlar için en kolay altı programlama dili kılavuzumuza bir göz atın.

Daha önce C veya Java gibi zorunlu veya nesne yönelimli bir dilde programlama yaptıysanız, temel bilgileri gözden geçirin ve C#'ın geçmişte kullandığınız diğer dillerden nasıl farklı olduğunu öğrenin. Her iki durumda da, C# ile ilgili basit sorunları çözerken kendinizi rahat hissedene kadar öğreticiye devam etmeyin (örneğin, sizden ilk yüz asal sayıyı yazdıran bir program yazmanızı isteseydim, o programı Google'a danışmak).

Burada anlaşılması gereken en önemli kavram, nesne yönelimli paradigmadır (kısaltması şu şekildedir: AÇIK ). Nesne yönelimli dillerde, programlar işlevsel birimlere ayrılır. nesneler . Her nesnenin kendi özel değişkenleri ve işlevleri vardır. Nesneye özgü işlevler denir yöntemler .

Buradaki fikir modülerliktir: Her bir nesneyi izole ederek ve diğer nesneleri kendi yöntemleriyle onunla etkileşime girmeye zorlayarak, olası kasıtsız etkileşimlerin ve buna bağlı olarak hataların sayısını azaltabilirsiniz. Ayrıca daha sonra hiçbir değişiklik yapmadan yeniden kullanabileceğiniz nesneler de oluşturabilirsiniz. Unity'de bu nesneleri oluşturacak ve bunları oyun varlıkları (kimin davranışlarını yönetecekler).

Nesneler şuradan başlatılır: sınıflar : bir sınıf, yalnızca nesnenizin tanımını ortaya koyan bir dosyadır. Yani, eğer istersen ahmak Oyununuzda bir düşman için yapay zekayı işleyen bir nesne varsa, bir 'Mook' sınıfı yazar ve ardından bu dosyayı her düşman varlığına eklersiniz. Oyununuzu çalıştırdığınızda, her düşman 'Mook' nesnesinin bir kopyasıyla donatılacaktır.

Bir nesneye yeni bir komut dosyası eklemek şöyle görünür:

Öncelikle, nesneyi seç ve şuraya git Müfettiş . Tıkla Bileşen Ekle buton.

git yeni komut dosyası , istediğiniz adı girin ve oluştur ve ekle .

Artık üzerine çift tıklayarak düzenleyebileceğiniz yeni bir betiğiniz var!

Bir sınıf dosyası şuna benzer:

using UnityEngine;
public class Mook : MonoBehaviour {
private float health;
void Start () {
health = 100;
}
void Update(){
if (health > 0) {
/* Search for player
if you encounter the player on the road, kill him
if you get shot, remove a random amount of health */
}
}
}

Bunu parçalayalım:

  • UnityEngine'i kullanma: Bu satır, C#'a Unity oyun motoruna bağlanmamıza izin veren Unity'nin kitaplıklarını kullanmak istediğimizi söyler.
  • Genel sınıf Mook: MonoBehaviour: Bu satır, sınıfı ve adını bildirir -- ahmak .
  • Özel şamandıra sağlığı: Bu, özel bir sınıf değişkeni bildirir (yalnızca sınıfın içinden değiştirilebilir). Değişkene bir değer verilir Başlangıç .
  • Boş Başlat(): Bu, adında bir yöntem bildirir Başlangıç . Start, oyun ilk başladığında yalnızca bir kez çalışan özel bir yöntemdir.
  • Geçersiz Güncelleme(): Güncelleme, her karede çalışan başka bir özel yöntemdir. Oyun mantığınızın çoğu buraya gidecek.
  • // yolda oyuncuyla karşılaşırsan onu öldür: Bu satır bir yorumdur (çift eğik çizgi ile başlayan herhangi bir satır C# tarafından yok sayılır). Yorumlar, belirli kod parçalarının ne yaptığını kendinize hatırlatmak için kullanılır. Bu durumda, bu yorum, aslında yorumun tanımladığı şeyi yapan daha karmaşık bir kod bloğunu temsil etmek için kullanılıyor.

İle birlikte Başlangıç ve Güncelleme , hemen hemen her adla kendi yöntemlerinizi somutlaştırabilirsiniz. Ancak, oluşturduğunuz yöntemler çağrılmadıkça çalışmayacaktır. adlı varsayımsal bir sınıf için bir yöntem bildirelim. addTwoNumbers bu iki sayıyı birbirine ekler:

public float addTwoNumbers(float a, float b) {
return a+b;
}

Bu, bir şamandıra döndüren genel (diğer nesnelere erişilebilir) bir yöntem bildirir. addTwoNumbers girdi olarak iki kayan nokta alan ( ile ve B ). Daha sonra çıktı olarak iki değerin toplamını döndürür.

Bu yöntemi aynı sınıf içinden çağırmak (örneğin, içeriden) Güncelleme ) buna benzer:

float result = addTwoNumbers(1, 2);

Yöntemi başka bir sınıftan çağırmak benzerdir:

addTwoNumbers instance;
float result = instance.addTwoNumbers(1, 2);

Yine, bu sadece sınıfımızın bir örneğini oluşturur, uygun yönteme erişir ve eklemek istediğimiz sayıları besler, ardından sonucu depolar. sonuç . Basit.

Komut dosyanız, normal GameObject parametreleri kümesi altında erişilemeyen özel özelliklere (parçacık yayıcı gibi) sahip bir nesneye eklenmişse, onu farklı türde bir oyun varlığı olarak ele almayı seçebilirsiniz. GetComponent yöntem.

Bunun sözdizimi şöyle görünür:

GetComponent().Play();

Bunlardan herhangi biri size yabancıysa, geri dönün ve C# primerinden geçin. Devam ederken sizi çok fazla hayal kırıklığından kurtaracak.

4. Birlik Temelleri

Bu bölümde, Unity motorunun temel mekaniğini inceleyeceğiz. Unity'deki iş akışı şuna benzer:

  1. Oyunda bir role hizmet edecek bir varlık oluşturun (boş Oyun Nesneleri soyut mantıksal görevler için kullanılabilir).
  2. Bir sınıf dosyası yazın veya bulun ve onu bir komut dosyası olarak varlığa ekleyin ( Bileşen Ekle düğmesindeki müfettiş görüş.
  3. Çalıştırmak > Ölçek > hata ayıklama > tekrarlamak çalışana kadar ve oyunun bir sonraki öğesine geçin.

Unity, kullanıcının zevkine göre çeşitli şekillerde düzenlenebilen bir dizi temel görünüm sekmesi ile birlikte gelir. Büyük beş şunlardır:

  1. Oyun: etkileşim kurabileceğiniz ve test edebileceğiniz oyunun çalışan bir örneğini görüntüler.
  2. Faliyet alani, sahne: statik, düzenlenebilir bir sürümünü sağlar. oyun Dünyası .
  3. Müfettiş: bölümünden seçerek oyun dünyasındaki varlıkları tek tek değiştirmenize olanak tanır. editör sekme.
  4. Proje: projenin dosyalarına göz atmanıza ve modelleri, malzemeleri ve diğer kaynakları editör onları oyun dünyasına yerleştirmek için sekme.
  5. hiyerarşi: bu sekme dünyadaki tüm nesneleri göstererek, sahnedeki uzaktaki nesneleri ve üst varlıkları tıklayarak ve sürükleyerek birbirine bulmanızı sağlar.

Tüm bu şeylerin yerleri için aşağıdaki şemaya bakın:

4.1 Birlik Varlıkları

4.1.1 Ağlar

Ağlar yoldur 3B geometri Unity'de temsil edilir. Unity'nin yerleşik sürümünü kullanabilirsiniz. ilkel nesneler (küpler, küreler, silindirler vb.) veya kendi 3B modellerinizi aşağıdaki gibi bir modelleme paketinden içe aktarın. blender veya Maya . Unity, aşağıdakiler de dahil olmak üzere çeşitli 3D formatlarını destekler: .fbx , ve .3ds .

Ağları işlemek için temel araçlar, arayüzün sol üst köşesindeki ölçekleme, döndürme ve çevirme düğmeleridir. Bu düğmeler, düzenleyici görünümündeki modellere kontrol simgeleri ekler ve bunlar daha sonra onları uzayda işlemek için kullanılabilir. Bir nesnenin dokusunu veya fizik özelliklerini değiştirmek için bunları seçin ve müfettiş analiz etmek için görmek malzeme ve sağlam vücut elementler.

4.1.2 GUI Öğeleri

Geleneksel GUI hareketli grafikleri ve metni, aşağıdakiler kullanılarak görüntülenebilir: GUI Metni ve GUI Dokusu Editördeki GameObjects. Ancak, UI öğelerini işlemenin daha sağlam ve gerçekçi bir yolu, 3B metin ve dörtlü HUD öğelerini varlık olarak oyun dünyasına yerleştirmek için GameObjects (saydam dokular ve aydınlatılmamış şeffaf gölgelendirici ile).

İçinde hiyerarşi Bu oyun öğeleri, onları çocuk yapmak için ana kameraya sürüklenebilir ve kamera ile birlikte hareket etmelerini ve dönmelerini sağlar.

GUI öğelerinin (metin ve dokular) boyutu ve ölçeği, denetçi sekmesindeki ilgili alanlar kullanılarak ayarlanabilir.

4.1.3 Malzemeler

Malzemeler, doku ve gölgelendirici kombinasyonlarıdır ve proje sekmesinden doğrudan oyun nesnelerine sürüklenebilir. Unity Pro ile birlikte çok sayıda gölgelendirici gelir ve uygulandıkları bir nesne için denetçi sekmesini kullanarak bunlara eklenen dokuyu ayarlayabilirsiniz.

Bir dokuyu içe aktarmak için onu bir .jpg , .png , veya .bmp içine sürükleyin ve varlıklar Unity proje dizini altındaki klasör (ki Benim dökümanlarım varsayılan olarak). Birkaç saniye sonra düzenleyicide bir yükleme çubuğu belirecektir. Bittiğinde, resmin altında bir doku olarak görseli bulabileceksiniz. proje sekme.

4.1.5 Işıklar

Işıklar Oyun Nesneleri dünyaya ışık saçan. Sahnenizde ışık yoksa, tüm çokgenler aynı parlaklık seviyesinde çizilir ve dünyaya düz, soluk bir görünüm verir.

Işıklar konumlandırılabilir, döndürülebilir ve özelleştirebileceğiniz çeşitli dahili özelliklere sahip olabilir. NS yoğunluk kaydırıcı ışığın parlaklığını kontrol eder ve Aralık ne kadar çabuk söneceğini kontrol eder.

Kılavuzda yer alan yönergeler sahne görünümü Size aydınlatmanın maksimum aralığını gösterir. İstenilen efekti elde etmek için her iki ayarla oynayın. Ayrıca ışığın rengini, desenini de ayarlayabilirsiniz ( kurabiye Işığın yönlendirildiği yüzeyde görüntülenen ve doğrudan ışığa bakıldığında ekranda ne tür bir parlama göründüğü. Tanımlama bilgisi, daha gerçekçi ışık desenlerini taklit etmek, dramatik sahte gölgeler oluşturmak ve projektörleri simüle etmek için kullanılabilir.

Üç ana ışık türü yer , puan , ve yönlü .

Spot ışıklar 3B uzayda bir konuma sahip olun ve ışığı değişken açılı bir koni içinde yalnızca bir yönde yansıtın. Bunlar el fenerleri, ışıldaklar için iyidir ve genel olarak size aydınlatma üzerinde daha hassas kontrol sağlar. Spot ışıklar gölge yapabilir.

Nokta ışıkları 3B uzayda bir konuma sahip olun ve her yöne eşit şekilde ışık verin. Noktasal ışıklar gölge oluşturmaz.

Yönlü ışıklar Son olarak, güneş ışığını simüle etmek için kullanılırlar: ışığı sanki sonsuz uzaklardan bir yöne yansıtırlar. Yönlü ışıklar sahnedeki her nesneyi etkiler ve gölgeler oluşturabilir.

4.1.6 Parçacık Sistemleri

İLE Parçacık sistemi bir OyunNesnesi yüzlerce veya binlerce parçacığı aynı anda üreten ve kontrol eden. Parçacıklar, 3B alanda görüntülenen küçük, optimize edilmiş 2B nesnelerdir. Parçacık sistemleri basitleştirilmiş işleme ve fizik kullanır, ancak binlerce varlığı kekemelik olmadan gerçek zamanlı olarak görüntüleyebilir, bu da onları duman, yangın, yağmur, kıvılcım, sihirli efektler ve daha fazlası için ideal hale getirir.

Bu efektleri elde etmek için ince ayar yapabileceğiniz birçok parametre vardır ve bunlara, altında bir parçacık sistemi oluşturarak erişebilirsiniz. bileşen düzenleyici > parçacık sisteminin seçilmesi > denetçi sekmesini açma . Her parçacığın boyutunu, hızını, yönünü, dönüşünü, rengini ve dokusunu değiştirebilir ve bu parametrelerin çoğunu zamanla değişecek şekilde ayarlayabilirsiniz.

Altında çarpışma öznitelik, etkinleştirirseniz ve simülasyon alanını Dünya yağmur, hareketli su ve kıvılcım gibi bir dizi gerçekçi parçacık efekti için kullanılabilecek, dünyadaki nesnelerle çarpışan parçacıklar elde edeceksiniz.

5. Örnek: Bir Oyunun Temel Öğeleri

Bu eğitim için basit bir oyun yapacağız. ponpon -- daha önce DIY'de birkaç kez ele aldığımız bir şey:

  • Arduino Klasik Pong
  • Arduino OLED Pong

Bu bölümde, temel öğeleri düzenlemeyi gözden geçireceğiz -- komut dosyası oluşturma eğitimi daha sonra gelecek.

İlk olarak, Pong oyununu temel bileşenlerine ayıralım. İlk olarak, iki kürek ve bir topa ihtiyacımız var. Top ekranın dışına uçar, bu yüzden onu sıfırlamak için bir mekanizma isteyeceğiz. Ayrıca metnin mevcut skoru göstermesini istiyoruz ve size Unity'nin tüm temel unsurlarını göstermek adına, topa vurduğunuzda süslü bir parçacık efekti isteyeceğiz. Tüm oyunun dramatik bir şekilde aydınlatılması gerekecek.

Bu bir parçalanır top nesnesi (bir küre), bir yumurtlayan balık , iki kürek sahne parçacık yayıcılar ekli, bir 3B metin varlığı ve bir spot ışık . Bu eğitim için varsayılan fizik materyalini kullanacağız sıçrama , ile birlikte sıçrama birleştirme ayarlanır çarpmak . On ekran görüntüsünde kurulumun nasıl göründüğü:

İlk olarak, bir küp pervane kürek için.

Uygun şekilde ölçeklendirin, çoğalt , ve bir küre top için kürekler arasında.

Ardından, bir 3DText nesnesi ve ölçek ve konum doğru şekilde değiştirerek yazı Boyutu daha az pikselli bir görüntü elde etmek için öznitelik.

Ardından, iki tane oluşturun parçacık sistemleri , istediğiniz özellikleri seçin ve küreklere takın.

Sonra, isteyeceksiniz kamerayı konumlandırın ve döndürün böylece sahneyi doğru bir şekilde çerçeveler. Kamera seçiliyken, sağ alt köşede kamera görüntüsünün küçük bir önizlemesini görebilirsiniz.

Bitirmeden önce, topun oyun alanından dışarı sıçramasını önlemek için tampon olacak iki ek küp oluşturmamız gerekiyor. işaretini kaldırarak onları görünmez yapabiliriz. ağ oluşturucu içinde müfettiş sekmesi .

Oynat'a basarsanız, artık oyunumuzun temel öğelerini görebilirsiniz. Henüz bir şey yapmayacaklar, ama buna geleceğiz!

Şimdi bu kuruluma sahip olduğumuza göre, bir oyun yapmak için bu öğeleri komut dosyası haline getirmenin neleri içerdiği hakkında konuşacağız.

6. Unity'de Komut Dosyası Oluşturma

Bir nesneye eklenmiş bir komut dosyasına sahip olduğunuzda, onu çift tıklayarak revize edebilirsiniz. müfettiş . Bu açılır MonoDevelop , Unity için varsayılan geliştirme ortamı. Özünde, Monodevelop, özellikle programlama için optimize edilmiş özelliklere sahip bir metin editörüdür.

Anahtar kelimeler ve yorumlar şurada vurgulanır: Mavi ve Yeşil , ve sayısal değerler ve dizeler görünür . Eğer kullandıysanız tutulma veya diğer IDE'ler, MonoDevelop çok benzer. Yapabilirsiniz yapı komut dosyalarınızı düzenleyicinin içinden, aşağıdaki gibi sözdizimi hatalarını kontrol etmek için:

Genel olarak, komut dosyanızın Unity ile etkileşime girmesini sağlamak için, komut dosyasını tutan nesnenin sahip olduğu öğelere başvurmanız gerekir (bu öğelerin listesini müfettiş sekmesi ilgili nesne seçildiğinde). Ardından, istediğiniz değişiklikleri uygulamak için bu öğelerin her biri için yöntemleri çağırabilir veya değişkenler ayarlayabilirsiniz.

Bir nesne üzerindeki komut dosyasının farklı bir nesnenin özelliklerini etkilemesini istiyorsanız, boş bir komut dosyası oluşturabilirsiniz. OyunNesnesi komut dosyanızdaki değişkeni kullanın ve müfettiş sahnedeki başka bir nesneye atamak için.

Bir nesnenin sahip olabileceği öğelerin listesi aşağıdaki gibidir (yukarıdaki örnekte küreklerimizden birinin denetçi görünümünden alınmıştır):

  1. dönüştürmek
  2. Küp (Ağ Filtre)
  3. Kutu Çarpıştırıcısı
  4. Mesh Oluşturucu

Nesnenin bu yönlerinin her biri bir komut dosyasından etkilenebilir. Ardından, tam olarak nasıl olduğuna bakacağız.

6.1 Dönüşüm

Unity'deki bir GameObject için dönüştürme işlevleri, o nesnenin fiziksel parametrelerini kontrol eder: ölçek , onun konum , ve Onun oryantasyon . Bunlara aşağıdaki gibi bir komut dosyasından erişebilirsiniz:

transform.position = newPositionVector3;
transform.rotation = newRotationQuaternion;
transform.localScale = newScaleVector3;

Yukarıdaki örneklerde, adlandırılmış değişkenler, isimlerde belirtilen türlerdedir. Burada birkaç önemli ayrıntı vardır: konum ve ölçek, beklediğiniz gibi, şu şekilde depolanır: Vektör3'ler . Şuna erişebilirsiniz: x , VE , ve İLE BİRLİKTE her birinin bileşenleri (örneğin, transform.position.y sıfır düzlemin üzerindeki bir nesnenin mesafesini verir).

Ancak kaçınmak için gimbal kilidi , rotasyonlar şu şekilde işlenir: kuaterniyonlar (dört bileşenli vektörler). Kuaterniyonları elle işlemek sezgisel olmadığından, Euler açılarını kullanarak döndürmeleri manipüle edebilirsiniz. Kuaternion.Euler şöyle bir yöntem:

transform.rotation = Quaternion.Euler(pitch, yaw, roll);

Nesneleri bir yerden başka bir yere sorunsuzca taşımak istiyorsanız, slerp kuaterniyonlar ve vektör3'ler için yöntem yararlıdır. Slerp, mevcut durum, son durum ve değişimin hızı olmak üzere üç argümanı alır ve verilen hızda bunlar arasında düzgün bir şekilde enterpolasyon yapar. Sözdizimi şöyle görünür:

transform.position = Vector3.Slerp(startPositionVector3, newDestinationVector3, 1);

6.2 Oluşturucu

Unity'deki oluşturucu işlevleri, sahne yüzeylerinin ekranda oluşturulma şeklini kontrol etmenize olanak tanır. Dokuyu yeniden atayabilir, rengi değiştirebilir ve nesnenin gölgelendiricisini ve görünürlüğünü değiştirebilirsiniz. Sözdizimi şöyle görünür:

renderer.enabled = false;
renderer.material.color = new Color(0, 255, 0);
renderer.material.mainTexture = myTexture;
renderer.material.shader = newShader;

Bunların çoğu oldukça net işlevlere sahiptir. İlk örnek, söz konusu nesneyi görünmez kılar: birçok durumda faydalı bir numara. İkinci örnek, yeni bir RGB rengi (yani yeşil) söz konusu nesneye. Üçüncüsü, ana yayılma dokusunu yeni bir Doku değişkenine atar. Son örnek, nesnenin malzemesinin gölgelendiricisini yeni tanımlanmış bir gölgelendirici değişkenine değiştirir.

6.3 Fizik

Unity, tümleşik bir fizik motoruyla birlikte gelir; bu, fizik korumalı alan oyunlarının tümünün kullandığı bir şeydir. Bu, nesnelerin fiziksel özelliklerini atamanıza ve simülasyonlarının ayrıntılarının sizin için işlenmesine izin vermenize olanak tanır. Genel olarak, bir ders kitabı ve dönüştürme sistemi kullanarak kendi fiziğinizi uygulamaya çalışmak yerine, Unity'nin fizik motorunu mümkün olan en geniş ölçüde kullanmak daha basit ve daha sağlamdır.

Tüm fizik sahne gerektirir çarpıştırıcılar . Ancak, gerçek simülasyonun kendisi bir sağlam vücut , içine eklenebilecek müfettiş görüş. Sert cisimler olabilir kinematik veya kinematik olmayan .

Kinematik fizik destekleri, etraflarındaki kinematik olmayan fizik destekleriyle çarpışır (ve etki eder), ancak çarpışmadan etkilenmezler. Statik kinematik destekler, atasözü hareketsiz nesnelerdir ve hareketli kinematik nesneler, atasözü durdurulamaz kuvvettir (kayıt için, çarpıştıklarında, basitçe birbirlerinin içinden geçerler).

Bunun ötesinde, nesnenin açısal sürüklenmesini (onu döndürmek için ne kadar enerji gerektiğini) ayarlayabilir, kütlesini değiştirebilir, yerçekiminden etkilenip etkilenmediğini belirleyebilir ve ona kuvvet uygulayabilirsiniz.

Örnekler:

rigidbody.angularDrag = 0.1f;
rigidbody.mass = 100;
rigidbody.isKinematic = false;
rigidbody.useGravity = true;
rigidbody.AddForce(transform.forward * 100);

Bunların hepsi oldukça açıklayıcı. Burada dikkat edilmesi gereken tek şey, transform.forward . Vector3'lerin hepsinin üç bileşeni vardır ( .ileri , .yukarı , ve .sağ ) onlarla ilişkili, erişilebilen ve onlarla birlikte dönen ( ileri düzenleyicideki mavi okun yönüdür). NS transform.forward anahtar kelime, büyüklüğü 1 olan geçerli nesne için basitçe ileri vektördür. Nesne üzerinde daha fazla kuvvet oluşturmak için bir kayan nokta ile çarpılabilir. Ayrıca referans gösterebilirsiniz transform.up ve transform.right ve geri dönüşlerini almak için onları olumsuzlayın.

6.4 Çarpışma

Çoğu zaman, bir oyun oluştururken, sadece fizik simülasyonunun ötesinde, kodunuzda bir miktar durum değişikliği ile sonuçlanacak bir çarpışma istersiniz. Bunun için bir ihtiyacınız olacak çarpışma algılama yöntemi .

Unity'de çarpışmaları tespit etmek için belirli miktarda hazırlık çalışması gerekiyor. İlk olarak, çarpışmadaki nesnelerden en az birinin bir kinematik olmayan katı cisim ona bağlı. Her iki nesnenin de tetikleyici olmayacak şekilde ayarlanmış doğru çarpıştırıcıları olmalıdır. Her iki nesnenin toplam hızı, birbirlerinin üzerinden atlamak yerine gerçekten çarpışacak kadar düşük olmalıdır.

Bunların hepsini hallettiyseniz, çarpışmayı kontrol etmek istediğiniz nesneye eklenmiş bir komut dosyasına özel bir çarpışma algılama yöntemi yerleştirerek çarpışmayı kontrol edebilirsiniz. Yöntem şöyle görünecektir:

void OnCollisionEnter(Collision other) {
//do things here
}

Bu yöntem, başka bir nesnenin nesnenize dokunduğu ilk kare sırasında otomatik olarak çalışacaktır. çarpışma varlığı başka vurduğunuz nesneye bir referanstır. Örneğin, referans gösterebilirsiniz. oyun nesnesi , sağlam vücut , ve dönüştürmek çeşitli şekillerde manipüle etmek için özellikler. Süre OnCollisionEnter muhtemelen kullanacağınız en yaygın işlevdir, ayrıca kullanabilirsiniz ÇarpışmadaÇıkışta ve ÇarpışmadaStay (aynı sözdizimi ve kullanımla), sırasıyla bir nesneyle çarpışmayı durdurduğunuz ilk kare sırasında ve bir nesneyle çarpıştığınız her kare sırasında etkinleşir.

Bazen, denilen şeyi yapmak da yararlı olabilir. Ray dökümü . Raycasting'de, sonsuz ince bir çizgi (a ışın ) bir kökenden, bir vektör boyunca dünyaya gönderilir ve bir şeye çarptığında, ilk çarpışmanın konumu ve diğer ayrıntıları döndürülür. Bir raycast'in kodu şöyle görünür:

RaycastHit hit;
if (Physics.Raycast(transform.position, -Vector3.up, out hit)) {
float distanceToGround = hit.distance;
}

Bu, geçerli nesnenin konumundan -Vector3.up (doğrudan aşağı) boyunca bir ışın gönderir ve değişkeni bağlar vurmak çarpıştığı ilk nesneye. Işınınız bir şeye çarptığında, erişebilirsiniz hit.mesafe ne kadar uzakta olduğunu belirlemek için veya hit.GameObject vurduğunuz nesneyi manipüle etmek için.

Bunun gibi Raycast'ler, atıcılar için silahın neye işaret ettiğini belirlemek veya kamera onlara baktığında nesneleri seçmek veya belirli hareket mekaniği stilleri için kullanılabilir.

6.5 Zaman Düzeltme

Nesneleri bu şekilde manipüle ederken akılda tutulması gereken önemli bir faktör, kare hızı . Ne kadar dikkatli optimize ederseniz edin, kare hızları her zaman değişecektir ve oyun hızınızın buna göre değişmesini istemezsiniz. Oyununuzu geliştirdiğinizden daha hızlı bir bilgisayarda başka biri çalıştırıyorsa, oyunun iki kat hızda çalışmasını istemezsiniz.

Bunu düzeltmenin yolu, kullandığınız değerleri son kareyi oluşturmak için geçen süre ile çarpmaktır. Bu kullanılarak yapılır Zaman.deltaZaman . Bu, her kareden artırdığınız herhangi bir değişkenin hızını etkili bir şekilde değiştirir. çerçeve başına değişiklik ile saniyede değişim ve muhtemelen bu değişikliği her karede artırdığınız veya azalttığınız herhangi bir değerde yapmalısınız.

6.6 Ses Kaynakları ve Dinleyiciler

Artık nesnelerin nasıl oluşturulacağını, oluşturulacağını ve kontrol edileceğini ele aldığımıza göre, bilgisayar oyunlarının hizmet edebileceği diğer anlam hakkında konuşalım: yani, ses . Unity iki tür sesi destekler: 2B ve 3 boyutlu sesler. 3D sesler mesafeye göre ses düzeylerini değiştirir ve kameraya göre hareket ettikçe bozulur; 2D sesler yok.

2D sesler dış ses ve arka plan müziği için uygundur ve 3D sesler dünyadaki olaylar tarafından üretilen sesler için geçerlidir. Bir sesin 3B olup olmadığını değiştirmek için proje görüntüleyin, geçiş yapın müfettiş açılır menüden uygun seçeneği görüntüleyin ve seçin, ardından yeniden ithal etmek buton.

Sesi gerçekten çalmak için bir ses kaynağı bir pervaneye (3D ses durumunda, sesin çıkmasını istediğiniz pervane). O zaman açmanız gerekecek Ses klibi alanına gidin ve ses dosyanızı seçin.

iphone'umda virüs olup olmadığını nasıl kontrol edebilirim

Kullanabilirsiniz myAudioSource.Pause () ve myAudioSource.Play () Bu ses dosyalarını kontrol etmek için. Seslerin düşme davranışlarını, ses seviyesini ve doppler kaymasını ayarlayabilirsiniz. müfettiş ses kaynağı için sekme.

6.7 Giriş

Kullanıcıdan herhangi bir girdi almayan bir oyun pek oyun sayılmaz. Okuyabileceğiniz pek çok farklı türde girdi vardır ve bunların neredeyse tamamına şuradan erişilebilir: Giriş ve Anahtar kod nesneler. (Her karede bir değere sahip olan) bazı örnek girdi ifadeleri aşağıdadır.

Vector3 mousePos = Input.mousePosition;
bool isLeftClicking = Input.GetMouseButton(0);
bool isPressingSpace = Input.GetKey(KeyCode.Space);

Bu hatların işlevleri çoğunlukla açıklayıcıdır. Bu üç tür girdi referansını kullanarak, çoğu modern 3B bilgisayar oyununun kontrol şemalarını yeniden oluşturabilirsiniz.

6.8 Bir Komut Dosyasında Hata Ayıklama

Diyelim ki bir komut dosyası çalışmıyor. İyi doktorun dediği gibi, patlamalar ve takılmalar başınıza gelebilir. C#'nızda doğrudan sözdizimi hataları varsa, oyun genellikle play'e bastığınızda çalışmayı reddeder ve yapı komut dosyaları editörün içinden. Aşağıya bakınız:

Bu hatalar genellikle düzeltilmesi en zor olan hatalar değildir. Daha sorunlu olabilecek şey, içinde geçerli C# ile dolu bir dosyayı başarıyla yazdığınız ince anlamsal hatalardır - sadece düşündüğünüzü yapmayan bir dosya değil. Bu hatalardan birine sahipseniz ve onu takip etmekte sorun yaşıyorsanız, durumu iyileştirmek için deneyebileceğiniz birkaç şey vardır.

Birincisi, oyunun yürütülmesini duraklatmak ve konsolu kontrol etmektir. Tıklayarak oyunu duraklatabilirsiniz. Duraklat düzenleyicinin üst orta kısmındaki simgesini seçin ve ardından konsol alt kısmından pencere menü (veya Ctrl > Vardiya > C ). Hata olmasa bile, uyarılar neyin yanlış gittiğine dair bazı ipuçları vermeye yardımcı olabilir.

Bu işe yaramazsa, programın sizin düşündüğünüzü yaptığını doğrulamak için dahili değişkenlerin durumunu yazdırarak betiğinizin durumu hakkında bir fikir edinmeyi de deneyebilirsiniz. Kullanabilirsiniz Hata Ayıklama Günlüğü(Dize) program yürütme bu satıra ulaştığında bir dizenin içeriğini konsola yazdırmak için. Genel olarak, olması gerektiğini düşündüğünüz şeylerden geriye doğru, gerçekleşmesi gereken şeyler üzerinden çalışırsanız, sonunda hata ayıklama baskılarınızın onlardan beklediğinizi yapmadığı bir noktaya ulaşırsınız. İşte hatanız burada.

7. Örnek: Komut Dosyası Pong

Pong'u inşa etmek için, oyunu temel unsurlarına ayıralım: kürekler arasında artan bir hızla ileri geri seken bir topa ihtiyacımız var, topların kürekleri ne zaman geçtiğini bilen bir skorboard'a ihtiyacımız var ve bir mekanizmaya ihtiyacımız var. bu olduğunda topu yeniden başlatmak. İyi bir ilk adım, topa kinematik olmayan bir rijit cisim, paletlere iki kinematik rijit cisim eklemek, hepsi için yerçekimini devre dışı bırakmak ve standart varlıklardan uygun bir fizik materyali atamak olacaktır ( sıçrama ile birlikte sıçrama birleştirme ayarlanır çarpmak ).

Aşağıda açıklayıcı yorumlarla topun senaryosunu inceleyebilirsiniz. Topun bazı temel hedefleri gerçekleştirmesi gerekir: Karmaşık bir düzende zıplamalı, her iki eksende de hareketini sürdürmeli ve yatay yönde zorlu ama imkansız olmayan bir hızda hızlanmalıdır.

BallHandler.cs

Ardından, aşağıda görebileceğiniz raketimizi yazmamız gerekiyor. Raket, tuşlara basıldığında (ancak belirli sınırların dışında değil) yukarı ve aşağı hareket etmelidir. Ayrıca bir şeyle çarpıştığında parçacık sistemini de tetiklemesi gerekiyor.

PaddleHandler.cs

Ardından, düşman AI'ya ihtiyacımız var: düşmanın raketinin sabit bir hızda topa doğru ilerlemesini sağlayacak bir şey. Bunun için, maksimum basitlik için Vector3.Slerp'i kullanacağız. Ayrıca kendi küreğimizde gördüğümüz aynı parçacık davranışını da isteriz.

DüşmanAI.cs

Son olarak, puan tablosunu güncellemek ve sınır dışına çıktığında topu sıfırlamak için bir komut dosyasına ihtiyacımız var.

ScoreboardUpdater.cs

Eklenen bu komut dosyaları ve doldurulmuş referanslar ile, Pong oyunumuzu çalıştırdığımızda, oyun deneyimini yaşıyoruz!

Yapabilirsiniz Pong demomu indir , ana hatlarıyla belirttiğim her şeyi çalışırken görmek isterseniz. Windows, Mac ve Linux sistemlerinde çalışır.

8. Belgeleri Keşfetmek / Daha Fazlasını Öğrenmek

Unity, bu tarz bir kılavuzda uygulanabilir bir şekilde ele alınabilecek çok daha fazla özelliğe sahip karmaşık bir motordur ve bu, internette bulunan geniş (ücretsiz ve ticari) Unity uzantılarını eklemeden önce. Bu kılavuz size bir oyun geliştirmek için güçlü bir başlangıç ​​noktası sağlayacaktır, ancak kendi kendine eğitim herhangi bir çabada önemli bir beceridir ve burada iki kat daha fazladır.

Burada önemli bir kaynak, Unity ScriptReferans . ScriptReference, hem C# hem de Javascript için kullanılabilen, her Unity komutunun ve özelliğinin bir listesini, işlevlerinin açıklamalarını ve kısa sözdizimi örneklerini içeren aranabilir bir veritabanıdır.

Unity'nin düzenleyicisi ve arayüzü ile ilgili sorun yaşıyorsanız veya tercihe bağlı olarak video eğitimlerini seviyorsanız, yüksek kaliteli uzun bir liste var. Unity video eğitimleri mevcut. Daha kapsamlı (ancak daha az geniş) Unity için metin öğreticileri CatLikeCoding'den de edinilebilir.

Son olarak, belgelerin veya eğitimlerin kapsamı dışında sorularınız varsa, belirli soruları şu adresten sorabilirsiniz: cevaplar.Unity3d.com . Cevapların gönüllüler tarafından verildiğini unutmayın, bu yüzden zamanlarına saygı gösterin ve sorunuzun henüz cevaplanmadığından emin olmak için önce veritabanını araştırın.

9. Oyununuzu Oluşturma / Bağımsız Bir Uygulamaya Derleme

Gurur duyacağınız bir şey inşa ettiğinizde (veya pratik için biraz tehlikeli Pong örneğimizi klonlamayı bitirdiğinizde), oyununuzu editörden alıp internette yayınlayabileceğiniz ve zorlayabileceğiniz bir şeye dönüştürmenin zamanı geldi. oynamak için arkadaşlarınız ve aileniz. Bunu yapmak için bağımsız bir uygulama oluşturmanız gerekir. İyi haber şu ki, Unity'de bu çok, çok kolay. Bununla birlikte, dikkatli olmak isteyeceğiniz birkaç olası hıçkırık vardır.

Yeni başlayanlar için, yalnızca hatasız bir proje oluşturabileceğinizi bilin. Bu amaçla, oluştururken konsolun açık olduğundan emin olun: Oyunun editörde görmezden geleceği, ancak yine de denemeyi iptal edeceği bazı hata koşulları vardır. Bu, yalnızca hata mesajlarını konsola gönderir ve ekranda hiçbir görünür sonuç olmadan kontrol etmeyi unutursanız sinir bozucu olabilir. Oyununuzu hatasız olarak derledikten sonra, Yapı Ayarları altında Dosya menüsüne basın veya Ctrl > Vardiya

> B . Bu, oyununuzu birkaç platform için oluşturmanıza izin veren basit bir iletişim kutusu açacaktır.

Oradan süreç kendi kendini açıklayıcıdır: seçeneklerinizi seçin ve yapı ; Oyun sizden kurulacak bir dizini isteyecek ve hem yürütülebilir hem de veri dizinini oraya yerleştirecektir. Bu iki dosya sıkıştırılabilir ve dağıtılabilir (yalnızca Unity demosunda yerleşik bir oyun için ücret almadığınızdan emin olun, çünkü bu hizmet şartlarını ihlal eder).

10. Kapanış Notları

Herhangi bir oyun geliştirme aracında olduğu gibi, Unity ile başarının anahtarı yinelemeli geliştirmedir. Yönetilebilir artışlar oluşturmalısınız -- elbette hırslı olun, ancak küçük parçalar halinde hırslı olun ve bu parçaları öyle düzenleyin ki, nihai hırsınızın gerisinde kalsanız bile, en azından tutarlı bir sonuç elde edeceksiniz. ürün.

İlk önce en önemli unsurları edinin: aklınıza bir fikir getirin. Minimum olarak uygulanabilir bir ürün , yaratabileceğiniz ve hala değerli bir şey başarmış gibi hissedebileceğiniz en basit, en yalın şey. Daha büyük hedeflere geçmeden önce bu minimum uygulanabilir projeye ulaşın.

Bu eğitim size güçlü bir başlangıç ​​noktası sağlar, ancak Unity'yi öğrenmenin en iyi yolu bir oyun oluşturmaktır. Bir oyun oluşturmaya başlayın, bilginizdeki boşlukları ortaya çıktıkça doldurun ve kademeli bilgi akışı bilmediğiniz şeyleri şaşırtıcı bir şekilde hızlı bir şekilde aşındıracaktır.

Tüm bunları okuduysanız ve Unity için gereken kodlamadan biraz bunaldıysanız, nasıl yapılacağını kontrol ettiğinizden emin olun. Unity Learn ile oyun geliştirmeyi öğrenin ve ayrıca herhangi bir programlama olmadan video oyunlarının nasıl yapılacağına dair kılavuzumuzu okuyun.

Unity güçlü bir araçtır ve biraz keşifle beklediğinizden daha hızlı etkileyici projeler inşa edebilirsiniz. Aşağıdaki yorumlarda neler oluşturduğunuzu bize bildirin - görmeyi çok isteriz!

Paylaş Paylaş Cıvıldamak E-posta Bir E-postanın Gerçek mi Sahte mi Olduğunu Kontrol Etmenin 3 Yolu

Biraz şüpheli görünen bir e-posta aldıysanız, orijinalliğini kontrol etmek her zaman en iyisidir. İşte bir e-postanın gerçek olup olmadığını anlamanın üç yolu.

Sonrakini Oku
İlgili konular
  • Programlama
  • Programlama
  • uzun biçim
  • Uzun Biçimli Kılavuz
Yazar hakkında André İnfante(131 Makale Yayınlandı)

Güneybatı merkezli bir yazar ve gazeteci olan Andre'nin 50 dereceye kadar işlevsel kalması garanti edilir ve on iki fit derinliğe kadar su geçirmezdir.

Andre Infante'dan Daha Fazla

Haber bültenimize abone ol

Teknik ipuçları, incelemeler, ücretsiz e-kitaplar ve özel fırsatlar için bültenimize katılın!

Abone olmak için buraya tıklayın