Memprogram Permainan Dengan Kesatuan: Panduan Pemula

Memprogram Permainan Dengan Kesatuan: Panduan Pemula
Panduan ini tersedia untuk dimuat turun sebagai PDF percuma. Muat turun fail ini sekarang . Jangan ragu untuk menyalin dan berkongsi ini dengan rakan dan keluarga anda.

Ciri mengejutkan ekonomi internet ialah munculnya permainan video indie. Setelah menjadi domain eksklusif studio triple-A beribu-ribu orang, berjuta-juta dolar, sejumlah alat telah dikembangkan yang membawa sumber pembangunan permainan moden ke tangan individu atau koleksi kecil pengaturcara dan pereka ad-hoc. Kami sebelum ini telah membincangkan permainan indie terbaik, jadi pastikan anda melihatnya untuk mendapatkan inspirasi mengenai apa yang boleh dicapai dengan alat seperti Unity.





Pasukan pengembangan permainan indie ini telah menunjukkan ketangkasan dan toleransi risiko yang, dalam banyak kes, memungkinkan mereka mendorong inovasi permainan lebih cepat daripada rakan mereka yang mempunyai anggaran besar. Sejumlah tajuk indie yang berjaya berjaya ditayangkan dalam beberapa tahun kebelakangan ini, termasuk Minecraft , Limbo , dan Budak Daging Super , dan walaupun anda tidak perlu membuat permainan seperti ini, anda boleh membuat permainan menggunakan Buildbox.





Dalam landskap perkembangan permainan indie yang berkembang pesat, Perpaduan telah muncul sebagai standard de-facto: kosnya yang rendah, kemudahan penggunaan, dan set fitur yang luas menjadikannya ideal untuk pengembangan permainan yang cepat. Perpaduan sangat fleksibel, sehingga anda dapat merata buat pengawal permainan tersuai anda sendiri dengan sedikit DIY tahu caranya!





Malah studio besar seperti CCP (Developers of Hawa Dalam Talian ) menggunakannya untuk konsep prototaip permainan dengan pantas. Unity menyediakan 'mesin permainan dalam kotak' - mesin fizik dan rendering dengan cangkuk untuk beberapa bahasa skrip, yang dapat disesuaikan dengan hampir semua genre permainan video.

Walaupun Unity menyediakan editor visual untuk memanipulasi persekitaran permainan, Unity bukanlah alat pencipta permainan 'pengaturcaraan sifar'. Ia memerlukan anda memprogram untuk menghasilkan hasil, tetapi juga memberi anda alat yang jauh lebih fleksibel dan hebat daripada program 'pembuat permainan'.



Perpaduan tidak akan berjaya untuk anda, tetapi halangan ini dapat mengurangkan halangan untuk masuk. Bermula sepenuhnya dari awal dengan C ++ dan OpenGL, memerlukan beberapa hari untuk sampai ke titik di mana sebenarnya ada sesuatu yang ditampilkan di skrin. Menggunakan Unity, memerlukan masa sekitar sepuluh saat. Unity meletakkan elemen asas penciptaan permainan ke tangan pengaturcara pemula dengan cara yang pantas dan intuitif.

Hari ini saya akan membimbing anda melalui semua perkara yang perlu anda ketahui untuk membuat permainan di Unity, yang dibahagikan kepada sepuluh bab utama:





§1 – Versi Perpaduan

§2 – Memasang Unity





§3 – Pengenalan Ringkas kepada Paradigma Berorientasikan Objek

§4 – Asas Perpaduan

§5 – Contoh: Elemen Asas Permainan

§6 – Skrip dalam Perpaduan

§7 – Contoh: Skrip Pong

§8 – Meneroka Dokumentasi / Mempelajari Lebih Lanjut

§9 – Membangun Permainan Anda / Menyusun Aplikasi Sendiri

§10-Nota Penutup

1. Versi Perpaduan

Unity terdapat dalam dua perisa asas: versi pro dan versi percuma. Terdapat bilangan perbezaan , tetapi, secara umum, versi pro menyokong sejumlah peningkatan visual (seperti bayangan lembut masa nyata dan pasca pemprosesan), dan sebilangan besar ciri yang agak kecil yang sangat membantu permainan yang lebih kompleks.

Walaupun begitu, untuk kebanyakan permainan yang agak sederhana yang mungkin ingin anda bina, versi percuma Unity sangat memadai. Kami akan menguraikan perbezaan utama di bawah dengan lebih terperinci bagi mereka yang berminat.

1.1 Harga

Versi percuma Unity tentunya percuma. Walau bagaimanapun, terdapat beberapa batasan: versi percuma Unity tidak boleh dilesenkan kepada mana-mana syarikat dengan pendapatan tahunan lebih daripada $ 100,000 . Walaupun organisasi seperti itu berada di luar skop panduan ini, jika anda mengesyaki anda mungkin menjadi organisasi seperti itu, mungkin bijak untuk muncul untuk versi Pro.

Versi Pro Unity adalah $ 75 sebulan, atau $ 1500 untuk lesen tetap, dan tidak mempunyai had apa yang boleh anda lakukan dengan permainan yang dibuat dengannya. Terdapat juga percubaan percuma selama 30 hari, yang akan kami gunakan untuk panduan ini, untuk memberi anda gambaran keseluruhan yang lengkap mengenai ciri-ciri yang ada. Lesen pelajar satu tahun juga boleh didapati melalui Kaji untuk $ 129 .

1.2 Ciri

Terdapat banyak ciri yang tidak terdapat dalam versi percuma Unity. Walau bagaimanapun, perbezaan yang paling penting adalah seperti berikut: versi percuma Unity tidak mempunyai sebilangan pilihan rendering yang memungkinkan untuk permainan yang lebih tampan dan berjalan lebih pantas (sokongan LOD, pemprosesan pasca-ruang layar, shader lanjutan, lembut dalam masa nyata bayang-bayang, dan rendering yang ditangguhkan). Ia juga tidak lengkap sistem animasi mekanim , dan beberapa alat AI.

Secara umum, untuk projek berskala besar, atau projek di mana prestasi grafik adalah penting, versi pro adalah bermanfaat. Saya menggunakan versi pro, kerana saya mengembangkan permainan realiti maya untuk Oculus Rift, dan sokongan pasca pemprosesan ruang skrin diperlukan untuk berinteraksi dengan alat dengar dengan betul.

2. Memasang Unity

Unity mudah dipasang. Anda boleh memuat turun yang boleh dilaksanakan dari united3d.com/get-unity/download .

Setelah dimuat turun, jalankan, dan kemudian ikuti arahan pemasang. Apabila pemasangan selesai, tetingkap bertajuk 'aktifkan lesen Unity anda' akan muncul. Tandai kotak bertanda 'aktifkan percubaan 30 hari percuma Unity Pro' dan kemudian 'OK'.

Tahniah! Anda kini mempunyai percubaan 30 hari Unity Pro. Apabila percubaan berakhir, jika anda tidak mahu membeli versi pro, anda boleh beralih ke versi percuma dan menyimpan kandungan yang ada.

menyambung ke rangkaian tetapi tiada akses internet

3. Pengenalan Ringkas kepada Paradigma Berorientasikan Objek

Sebelum memulakan Unity, penting untuk kita membahas asas-asasnya. Perpaduan menyokong kedua-duanya C # dan JavaScript untuk pengaturcaraan permainan ; kami akan bekerjasama dengan C # untuk tutorial ini.

Pertama, jika anda tidak pernah memprogram sebelumnya, sisihkan tutorial ini dan habiskan beberapa hari bekerja melalui Microsoft Bahasa Primer C # sehingga anda merasa selesa menggunakan bahasa untuk tugas-tugas mudah.

Sekiranya anda menginginkan sesuatu yang sedikit berbeza dengan C # (tetapi tidak semestinya bahasa yang boleh anda gunakan di Unity), maka lihat panduan kami untuk enam bahasa pengaturcaraan termudah untuk pemula.

Sekiranya anda telah memprogram sebelumnya dalam bahasa penting atau berorientasi objek seperti C atau Java, hilangkan buku asas dan biasakan diri anda dengan cara C # berbeza dari bahasa lain yang anda gunakan pada masa lalu. Walau apa pun, jangan teruskan tutorial sehingga anda merasa selesa menyelesaikan masalah sederhana dengan C # (contohnya, jika saya meminta anda menulis program yang mencetak ratus nombor perdana pertama, anda seharusnya dapat menulis program itu tanpa berunding dengan Google).

Konsep yang paling penting untuk difahami di sini adalah paradigma berorientasikan objek (disingkat sebagai BUKA ). Dalam bahasa berorientasikan objek, program dibahagikan kepada unit berfungsi yang disebut Objek . Setiap objek mempunyai pemboleh ubah dan fungsinya sendiri. Fungsi khusus objek dipanggil kaedah .

Ideanya di sini adalah modulariti: dengan mengasingkan setiap objek, dan memaksa objek lain untuk berinteraksi dengannya melalui kaedahnya, anda dapat mengurangkan bilangan kemungkinan interaksi yang tidak disengajakan - dan, secara lanjutan, pepijat. Anda juga boleh membuat objek yang boleh anda gunakan semula kemudian tanpa pengubahsuaian. Di Unity, anda akan membina objek ini dan memasangnya entiti permainan (tingkah laku siapa yang akan mereka atur).

Objek dibuat dari kelas : kelas hanyalah fail yang memaparkan definisi objek anda. Jadi, jika anda mahukan mook objek yang mengendalikan AI untuk musuh dalam permainan anda, anda akan menulis kelas 'Mook', dan kemudian melampirkan fail itu ke setiap entiti musuh. Semasa anda menjalankan permainan anda, setiap musuh akan dilengkapi dengan salinan objek 'Mook'.

Melampirkan skrip baru ke objek kelihatan seperti ini:

Pertama, pilih objek dan pergi ke Pemeriksa . Klik pada Tambah Komponen butang.

Pergi ke skrip baru , masukkan nama yang anda mahukan, dan klik buat dan tambah .

Sekarang anda mempunyai skrip baru yang boleh anda edit dengan mengklik dua kali padanya!

Fail kelas kelihatan seperti ini:

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 */
}
}
}

Mari pecahkan ini:

  • Menggunakan UnityEngine: Garis ini memberitahu C # bahawa kami ingin menggunakan perpustakaan Unity, yang membolehkan kami menyambung ke mesin permainan Unity.
  • Mook kelas awam: MonoBehaviour: Garis ini menyatakan kelas dan namanya - mook .
  • Kesihatan apungan persendirian: Ini menyatakan pemboleh ubah kelas swasta (yang hanya boleh diubah dari dalam kelas). Pemboleh ubah diberi nilai dalam Mulakan .
  • Permulaan Tidak Sah (): Ini menyatakan kaedah yang dipanggil Mulakan . Mula adalah kaedah khas yang hanya dijalankan sekali, ketika permainan pada mulanya dilancarkan.
  • Batal Kemas kini (): Kemas kini adalah kaedah khas lain, yang dijalankan pada setiap bingkai. Sebilangan besar logik permainan anda akan masuk ke sini.
  • // jika anda bertemu pemain di jalan raya, bunuh dia: Baris ini adalah komen (mana-mana baris yang dimulakan dengan garis miring berganda diabaikan oleh C #). Komen digunakan untuk mengingatkan diri anda tentang apa yang dilakukan oleh kod tertentu. Dalam kes ini, komen ini digunakan untuk mencari blok kod yang lebih rumit yang benar-benar melakukan apa yang dijelaskan oleh komen.

Bersama dengan Mulakan dan Kemas kini , anda boleh menunjukkan kaedah anda sendiri dengan hampir semua nama. Walau bagaimanapun, kaedah yang anda buat tidak akan berjalan kecuali jika dipanggil. Mari kita nyatakan kaedah untuk kelas hipotesis yang dipanggil addTwoNumbers yang menambah dua nombor bersama:

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

Ini menyatakan kaedah awam (dapat diakses oleh objek lain) yang mengembalikan pelampung, yang disebut addTwoNumbers , yang mengambil dua apungan sebagai input (disebut ke dan b ). Ia kemudian mengembalikan jumlah dua nilai sebagai outputnya.

Memanggil kaedah ini dari dalam kelas yang sama (katakanlah, dari dalam Kemas kini ) kelihatan seperti ini:

float result = addTwoNumbers(1, 2);

Memanggil kaedah dari kelas lain adalah serupa:

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

Sekali lagi, ini hanya mewujudkan contoh kelas kami, mengakses kaedah yang sesuai dan memberinya nombor yang ingin kami tambahkan, kemudian menyimpan hasilnya di hasil . Ringkas.

Sekiranya skrip anda dilampirkan ke objek yang mempunyai sifat khas (seperti pemancar zarah) yang tidak dapat diakses di bawah set parameter GameObject biasa, anda dapat memilih untuk memperlakukannya sebagai jenis entiti permainan yang lain dengan menggunakan DapatkanKomponen kaedah.

Sintaks untuk yang kelihatan seperti ini:

GetComponent().Play();

Sekiranya perkara ini tidak anda ketahui, kembalilah dan periksa C # primer. Ini akan menjimatkan banyak kekecewaan semasa kami meneruskan.

4. Asas Perpaduan

Dalam bahagian ini, kita akan berusaha melalui mekanik asas enjin Unity. Aliran kerja di Unity berjalan seperti ini:

  1. Buat entiti untuk berperanan dalam permainan (kosong GameObjects boleh digunakan untuk tugas logik abstrak).
  2. Tulis atau cari fail kelas, dan tambahkan ke entiti sebagai skrip (menggunakan Tambah Komponen butang di pemeriksa pandangan.
  3. Lari > ujian > nyahpepijat > ulangi sehingga berjaya dan beralih ke elemen permainan seterusnya.

Unity hadir dengan sebilangan tab paparan asas yang dapat disusun dengan pelbagai cara sesuai dengan selera pengguna. Lima besar adalah:

  1. Permainan: memaparkan contoh permainan yang sedang anda jalani dan uji.
  2. Adegan: menyediakan versi statik dan boleh diedit dunia permainan .
  3. Pemeriksa: membolehkan anda mengubah entiti individu dalam dunia permainan dengan memilihnya di penyunting tab.
  4. Projek: membolehkan anda melihat-lihat fail projek dan menyeret model, bahan, dan sumber lain ke dalam penyunting tab untuk menempatkan mereka di dunia permainan.
  5. Hierarki: tab ini menunjukkan semua objek di dunia, yang membolehkan anda mencari objek jauh di tempat kejadian, dan entiti ibu bapa antara satu sama lain dengan mengklik dan menyeret.

Lihat rajah di bawah untuk lokasi semua perkara ini:

4.1 Entiti Perpaduan

4.1.1 Mesh

Mesh adalah jalannya Geometri 3D diwakili dalam Perpaduan. Anda boleh menggunakan Unity built-in primitif objek (kubus, sfera, silinder, dll), atau mengimport model 3D anda sendiri dari pakej pemodelan seperti Pengisar atau Maya . Unity menyokong pelbagai format 3D, termasuk .fbx , dan .3ds .

Alat asas untuk memanipulasi mesh adalah butang penskalaan, putaran, dan terjemahan di sudut kiri atas antara muka. Butang ini menambah ikon kawalan ke model dalam tampilan editor, yang kemudian dapat digunakan untuk memanipulasinya di ruang angkasa. Untuk mengubah sifat tekstur atau fizik objek, pilih objek tersebut dan gunakan pemeriksa pandangan untuk menganalisis bahan dan jasad tegar unsur.

4.1.2 Elemen GUI

Sprite dan teks GUI tradisional boleh dipaparkan dengan menggunakan Teks GUI dan juga Tekstur GUI GameObjects dalam penyunting. Walau bagaimanapun, cara yang lebih mantap dan realistik untuk menangani elemen UI adalah dengan menggunakan Teks 3D dan Kuadrat GameObjects (dengan tekstur lutsinar dan shader telus yang tidak terang) untuk meletakkan elemen HUD ke dalam dunia permainan sebagai entiti.

Di dalam hierarki lihat, elemen permainan ini boleh diseret ke kamera utama untuk menjadikannya anak-anak, memastikannya bergerak dan berpusing dengan kamera.

Elemen GUI (teks dan tekstur) dapat disesuaikan ukuran dan skala menggunakan medan yang berkaitan di tab pemeriksa.

4.1.3 Bahan

Bahan adalah kombinasi tekstur dan shader, dan dapat diseret terus ke objek permainan dari tab projek. Sebilangan besar shader dilengkapi dengan Unity Pro, dan anda boleh menyesuaikan tekstur yang melekat pada mereka menggunakan tab pemeriksa untuk objek yang digunakan.

Untuk mengimport tekstur, ubah menjadi a .jpg , .png , atau .bmp , dan seret ke dalam aset folder di bawah direktori projek Unity (yang muncul di Dokumen saya secara lalai). Setelah beberapa saat, bar pemuatan akan muncul di editor. Apabila selesai, anda akan dapat melihat gambar sebagai tekstur di bawah projek tab.

4.1.5 Lampu

Lampu adalah GameObjects yang memancarkan cahaya ke dunia. Sekiranya tidak ada lampu di tempat kejadian anda, semua poligon dilukis pada tahap kecerahan yang sama, sehingga dunia kelihatan rata dan bersih.

Lampu dapat diposisikan, diputar, dan mempunyai beberapa ciri dalaman yang dapat anda sesuaikan. The intensiti slaid mengawal kecerahan cahaya, dan julat mengawal seberapa cepat ia pudar.

Garis panduan di pemandangan pemandangan tunjukkan jarak maksimum pencahayaan. Main dengan kedua tetapan untuk mencapai kesan yang diinginkan. Anda juga boleh menyesuaikan warna cahaya, corak ( kuki dipaparkan di permukaan cahaya ditunjukkan, dan suar jenis apa yang muncul di layar ketika melihat langsung cahaya. Kuki boleh digunakan untuk memalsukan corak cahaya yang lebih realistik, membuat bayangan palsu yang dramatik, dan mensimulasikan projektor.

Tiga jenis cahaya utama adalah tempat , titik , dan arah .

Lampu spot mempunyai lokasi dalam ruang 3D dan cahaya projek hanya dalam satu arah dalam kon sudut berubah. Ini bagus untuk lampu suluh, lampu carian, dan, secara umum, memberi anda kawalan pencahayaan yang lebih tepat. Lampu spot boleh menghasilkan bayangan.

Lampu titik mempunyai lokasi dalam ruang 3D, dan menyalurkan cahaya secara merata ke semua arah. Lampu titik tidak membuang bayangan.

Lampu arah akhirnya digunakan untuk mensimulasikan sinar matahari: mereka memproyeksikan cahaya ke arah seolah-olah dari jarak jauh. Lampu arah mempengaruhi setiap objek di tempat kejadian, dan dapat menghasilkan bayangan.

4.1.6 Sistem Zarah

KE Sistem zarah ialah GameObject yang menghasilkan dan mengawal beratus-ratus atau ribuan zarah secara serentak. Zarah adalah objek 2D kecil dan dioptimumkan yang dipaparkan di ruang 3D. Sistem zarah menggunakan rendering dan fizik yang dipermudahkan, tetapi dapat memaparkan ribuan entiti dalam masa nyata tanpa tergagap, menjadikannya ideal untuk asap, api, hujan, percikan api, kesan sihir, dan banyak lagi.

Terdapat banyak parameter yang boleh anda ubah untuk mencapai kesan ini, dan anda boleh mengaksesnya dengan memunculkan sistem zarah di bawah penyusun komponen > memilih sistem zarah > membuka tab pemeriksa . Anda boleh mengubah ukuran, kelajuan, arah, putaran, warna, dan tekstur setiap zarah, dan menetapkan sebahagian besar parameter untuk berubah dari masa ke masa juga.

Di bawah perlanggaran jika anda mengaktifkannya dan menetapkan ruang simulasi ke dunia anda akan mendapat zarah yang akan bertembung dengan objek di dunia, yang boleh digunakan untuk sejumlah kesan zarah yang realistik, termasuk hujan, air bergerak, dan percikan api.

5. Contoh: Elemen Asas Permainan

Untuk tutorial ini, kita akan membuat permainan sederhana Pong - sesuatu yang telah kita bahas beberapa kali dalam DIY sebelum ini:

  • Arduino Classic Pong
  • Arduino OLED Pong

Di bahagian ini, kita akan menguruskan elemen inti - tutorial skrip akan datang kemudian.

Pertama, mari kita pecahkan permainan Pong menjadi komponen asasnya. Pertama, kita memerlukan dua dayung, dan sebiji bola. Bola terbang di luar layar, jadi kami menginginkan mekanisme untuk mengaturnya semula. Kami juga mahu teks memaparkan skor semasa, dan, demi menunjukkan kepada anda semua elemen inti Unity, kami akan mahukan kesan partikel yang menarik ketika anda memukul bola. Keseluruhan permainan perlu dinyalakan secara dramatik.

Yang berpecah menjadi a objek bola (sfera), a spawner , dua alat peraga dayung dengan pemancar zarah dilampirkan, a Entiti teks 3D , dan a lampu spot . Untuk tutorial ini, kami akan menggunakan bahan fizik lalai melantun , dengan bouncing bergabung ditetapkan untuk membiak . Inilah rupa penyediaan, dalam sepuluh tangkapan skrin:

Pertama, buat a prop kiub untuk mendayung.

Timbang dengan tepat, gandakannya , dan meletakkan a sfera antara dayung untuk bola.

Kemudian, buat a Objek 3DText dan skala dan kedudukan dengan betul, mengubah Saiz huruf atribut untuk mendapatkan gambar yang kurang piksel.

Seterusnya, buat dua sistem zarah , pilih ciri yang anda mahukan, dan pasangkannya ke dayung.

Seterusnya, anda mahu kedudukan dan putar kamera sehingga membingkai pemandangan dengan betul. Semasa kamera dipilih, anda dapat melihat pratonton kecil pandangan kamera di sudut kanan bawah.

Sebelum selesai, kita perlu membuat dua kubus tambahan untuk menjadi bumper, untuk mengelakkan bola melambung keluar dari kawasan permainan. Kita boleh menjadikannya tidak kelihatan dengan tidak mencentang penyaji mesh di dalam tab pemeriksa .

Sekiranya anda berjaya bermain, anda kini dapat melihat elemen asas permainan kami. Mereka belum membuat apa-apa, tetapi kita akan berjaya!

Sekarang setelah kita mendapat persediaan itu, kita akan membincangkan apa yang terlibat dalam membuat skrip elemen ini untuk membuat permainan.

6. Skrip dalam Perpaduan

Sebaik sahaja anda mempunyai skrip yang dilekatkan pada objek, Anda dapat menyemaknya dengan mengklik dua kali pada pemeriksa . Ini terbuka Pembangunan Mono , persekitaran pembangunan lalai untuk Perpaduan. Pada dasarnya, Monodevelop adalah penyunting teks dengan ciri yang dioptimumkan secara khusus untuk pengaturcaraan.

Kata kunci dan komen diserlahkan dalam biru dan hijau , dan nilai dan rentetan berangka muncul di bersih . Sekiranya anda telah menggunakan Gerhana atau IDE lain, MonoDevelop sangat serupa. Awak boleh membina skrip anda dari dalam editor, untuk memeriksa kesilapan sintaks, seperti:

Secara umum, untuk mendapatkan skrip anda berinteraksi dengan Unity, anda perlu merujuk elemen yang dimiliki oleh objek yang memegang skrip (anda dapat melihat senarai elemen ini di bawah pemeriksa tab apabila objek yang berkaitan dipilih). Anda kemudian boleh memanggil kaedah atau menetapkan pemboleh ubah untuk setiap elemen ini untuk melaksanakan perubahan yang anda mahukan.

Sekiranya anda mahu skrip pada objek mempengaruhi sifat objek yang berbeza, anda boleh membuat kosong GameObject pemboleh ubah dalam skrip anda, dan gunakan pemeriksa untuk memberikannya ke objek lain di tempat kejadian.

Senarai elemen yang mungkin dimiliki objek adalah seperti berikut (diambil dari pandangan pemeriksa salah satu dayung kami dalam contoh di atas):

  1. Transformasi
  2. Cube (Mesh Filter)
  3. Kotak Penutup
  4. Mesh Renderer

Setiap aspek objek ini dapat dipengaruhi dari dalam skrip. Seterusnya, kita akan melihat bagaimana sebenarnya.

6.1 Transformasi

Fungsi transformasi untuk GameObject in Unity mengawal parameter fizikal objek: itu skala , ia kedudukan , dan itu orientasi . Anda boleh mengaksesnya dari dalam skrip seperti ini:

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

Dalam contoh di atas, pemboleh ubah bernama adalah jenis yang ditentukan dalam nama. Terdapat beberapa butiran penting di sini: kedudukan dan skala, seperti yang anda harapkan, disimpan sebagai Vektor3s . Anda boleh mengakses X , DAN , dan DENGAN komponen masing-masing (sebagai contoh, transform.position.y memberi anda jarak objek di atas satah sifar).

Walau bagaimanapun, untuk mengelakkan kunci gimbal , putaran dikendalikan sebagai Kuarterion (vektor empat komponen). Oleh kerana kuaternion manipulasi tangan tidak disengajakan, anda boleh memanipulasi putaran menggunakan sudut Eulerian dengan menggunakan Quaternion.Euler kaedah seperti:

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

Sekiranya anda ingin memindahkan objek dengan lancar dari satu tempat ke tempat lain, anda akan menjumpainya Slerp kaedah untuk quaternions dan vector3s membantu. Slerp mengambil tiga argumen - keadaan semasa, keadaan akhir, dan kelajuan perubahan, dan interpolasi antara mereka dengan lancar pada kelajuan yang diberikan. Sintaksnya seperti ini:

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

6.2 Penyampai

Fungsi penyaji di Unity membolehkan anda mengawal cara permukaan alat peraga ditampilkan di skrin. Anda boleh menetapkan semula tekstur, mengubah warna, dan mengubah shader dan keterlihatan objek. Sintaksnya seperti ini:

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

Sebilangan besar ini mempunyai fungsi yang cukup jelas. Contoh pertama menjadikan objek yang dimaksudkan tidak dapat dilihat: helah yang berguna dalam beberapa keadaan. Contoh kedua memberikan yang baru Warna RGB (iaitu, hijau) ke objek yang dimaksudkan. Yang ketiga memberikan tekstur penyebaran utama kepada pemboleh ubah Tekstur baru. Contoh terakhir mengubah shader bahan objek ke pemboleh ubah shader yang baru ditakrifkan.

6.3 Fizik

Unity dilengkapi dengan mesin fizik bersepadu - sesuatu yang digunakan oleh permainan kotak pasir fizik. Ini membolehkan anda menetapkan sifat fizikal objek dan membiarkan perincian simulasi mereka dikendalikan untuk anda. Secara amnya, daripada berusaha menerapkan fizik anda sendiri menggunakan buku teks dan sistem transformasi, lebih mudah dan lebih mantap untuk menggunakan mesin fizik Unity sejauh mungkin.

Semua alat peraga fizik memerlukan pelanggar . Walau bagaimanapun, simulasi sebenar itu sendiri dikendalikan oleh a jasad tegar , yang boleh ditambah dalam pemeriksa pandangan. Rigidbodies boleh kinematik atau bukan kulit .

Alat peraga fizik kinematik bertabrakan dengan (dan kesan) alat peraga fizik nonkimia di sekitarnya, tetapi tidak terjejas oleh perlanggaran itu sendiri. Alat peraga kinetik statik adalah objek peribahasa yang tidak dapat digerakkan, dan objek kinematik bergerak adalah kekuatan peribahasa yang tidak dapat dihentikan (untuk rekod, apabila mereka bertembung, mereka saling melintas satu sama lain).

Di luar itu, anda boleh menyesuaikan seretan sudut objek (berapa banyak tenaga yang diperlukan untuk memutarnya), mengubah jisimnya, menentukan sama ada benda itu dipengaruhi oleh graviti atau tidak, dan menerapkan kekuatan padanya.

Contoh:

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

Ini semua cukup jelas. Satu-satunya perkara yang perlu diperhatikan di sini adalah penggunaan transform.forward . Vector3 semuanya mempunyai tiga komponen ( .teruskan , .up , dan betul ) berkaitan dengan mereka, yang boleh diakses dan berputar dengan mereka ( ke hadapan adalah arah anak panah biru di editor). The transform.forward kata kunci hanyalah vektor ke hadapan untuk objek semasa dengan magnitud 1. Ia boleh didarabkan dengan apungan untuk membuat lebih banyak daya pada objek. Anda juga boleh merujuk transform.up dan ubah.benar , dan menolaknya untuk mendapatkan pembalikannya.

6.4 Perlanggaran

Selalunya, semasa membina permainan, anda mahu perlanggaran mengakibatkan perubahan keadaan dalam kod anda, di luar simulasi fizik. Untuk ini, anda memerlukan kaedah pengesanan perlanggaran .

Terdapat sejumlah kerja persiapan yang diperlukan untuk mengesan perlanggaran di Unity. Pertama, sekurang-kurangnya satu objek dalam perlanggaran memerlukan a badan tegar bukan kinematik melekat padanya. Kedua-dua objek mesti mempunyai collider yang betul, diset agar tidak menjadi pencetus. Kelajuan keseluruhan kedua-dua objek mestilah cukup rendah sehingga mereka benar-benar bertabrakan, dan bukannya melangkau satu sama lain.

Sekiranya anda telah mengurus semua perkara, anda boleh memeriksa perlanggaran dengan meletakkan kaedah pengesanan perlanggaran khas dalam skrip yang dilampirkan pada objek yang ingin anda periksa perlanggarannya. Kaedahnya akan kelihatan seperti ini:

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

Kaedah ini akan berjalan secara automatik semasa bingkai pertama objek lain menyentuh objek anda. Entiti perlanggaran yang lain adalah rujukan ke objek yang anda tekan. Anda boleh, sebagai contoh, merujuknya permainan permainan , jasad tegar , dan mengubah ciri untuk memanipulasinya dengan pelbagai cara. Semasa OnCollisionEnter mungkin fungsi yang paling biasa anda gunakan, anda juga boleh menggunakan OnCollisionExit dan OnCollisionStay (dengan sintaks dan penggunaan yang sama), yang mengaktifkan pada bingkai pertama sehingga anda berhenti bertabrakan dengan objek dan setiap bingkai yang anda bertabrakan dengan objek, masing-masing.

Kadang-kadang, ia juga berguna untuk melakukan apa yang dipanggil siaran sinar . Dalam siaran sinar, garis tipis yang tidak terhingga (a sinar ) dilancarkan ke seluruh dunia dari beberapa asal, di sepanjang beberapa vektor, dan, apabila menyentuh sesuatu, kedudukan dan perincian lain mengenai perlanggaran pertama dikembalikan. Kod untuk siaran sinar kelihatan seperti ini:

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

Ini membuang sinar dari kedudukan objek semasa di sepanjang -Vector3.up (lurus ke bawah), dan menghubungkan pemboleh ubah memukul ke objek pertama yang dilanggarnya. Setelah sinar anda terkena sesuatu, anda boleh mengakses hit.distance untuk menentukan sejauh mana jaraknya, atau tekan.GameObject untuk memanipulasi objek yang anda tekan.

Raycast seperti ini dapat digunakan untuk penembak untuk menentukan apa yang diarahkan pistol, atau untuk memilih objek ketika kamera melihatnya, atau untuk gaya mekanik pergerakan tertentu.

6.5 Pembetulan Masa

Satu faktor penting yang perlu diingat semasa anda memanipulasi objek dengan cara ini ada kaitannya dengan kadar bingkai . Tidak kira seberapa berhati-hati anda mengoptimumkan, framerate akan selalu berbeza, dan anda tidak mahu kelajuan permainan anda berbeza-beza. Sekiranya orang lain menjalankan permainan anda di komputer yang lebih pantas daripada yang anda kembangkan, anda tidak mahu permainan berjalan dengan kelajuan dua kali ganda.

Cara anda membetulkannya adalah dengan mengalikan nilai yang anda gunakan dengan masa yang diperlukan untuk membuat bingkai terakhir. Ini dilakukan dengan menggunakan Time.deltaTime . Ini berkesan mengubah kelajuan mana-mana pemboleh ubah yang anda tambah dari setiap bingkai perubahan setiap bingkai ke perubahan sesaat , dan anda mungkin harus membuat perubahan ini ke nilai apa pun yang anda tambah atau turunkan setiap bingkai.

6.6 Sumber Audio dan Pendengar

Sekarang setelah kita membahas bagaimana membuat, membuat, dan mengawal objek, mari kita bincangkan pengertian lain yang dapat dilayan oleh permainan komputer: iaitu, suara . Unity menyokong dua jenis bunyi: 2D dan 3D bunyi. Bunyi 3D mengubah kelantangannya berdasarkan jarak, dan memutarbelitkan ketika bergerak relatif dengan kamera; Bunyi 2D tidak.

Suara 2D sesuai untuk suara suara dan muzik latar, dan bunyi 3D berlaku untuk bunyi yang dihasilkan oleh peristiwa di dunia. Untuk mengubah sama ada bunyi 3D atau tidak, pilih di dalam projek lihat, beralih ke pemeriksa lihat dan pilih pilihan yang sesuai dari menu dropdown, kemudian tekan mengimport semula butang.

Untuk memainkan suaranya, anda perlu melampirkan sumber audios ke prop (prop yang anda mahukan suara berasal, sekiranya bunyi 3D). Maka anda perlu membuka klip audio medan dan pilih fail suara anda.

u break saya betulkan dekat saya

Anda boleh menggunakan myAudioSource.Pause () dan myAudioSource.Play () untuk mengawal fail suara tersebut. Anda boleh menyesuaikan perilaku, kelantangan, dan pergeseran suara doppler di bawah pemeriksa tab untuk sumber audios.

6.7 Input

Permainan yang tidak mengambil input daripada pengguna bukanlah permainan. Terdapat banyak jenis input yang dapat anda baca, dan hampir semuanya dapat diakses melalui Masukan dan Kod kunci benda. Beberapa pernyataan input input (yang mempunyai nilai dinilai setiap bingkai) ada di bawah.

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

Fungsi garis-garis ini kebanyakannya jelas. Dengan menggunakan tiga jenis rujukan input ini, anda dapat menyusun semula skema kawalan pada kebanyakan permainan komputer 3D moden.

6.8 Menyahpepijat Skrip

Katakan skrip tidak berfungsi. Seperti kata doktor yang baik, gangguan dan gangguan boleh berlaku kepada anda. Sekiranya terdapat ralat sintaks dengan C # anda, permainan pada amnya akan menolak untuk berjalan ketika anda bermain, dan beberapa mesej ralat yang cukup berguna diberikan jika anda membina skrip dari dalam editor. Lihat di bawah:

Kesalahan ini biasanya bukan yang paling sukar untuk dibetulkan. Yang boleh menjadi lebih bermasalah adalah kesalahan semantik yang halus, di mana anda telah berjaya menulis fail yang penuh dengan C # yang sah - tidak hanya yang melakukan apa yang anda fikirkan. Sekiranya anda mempunyai salah satu kesalahan ini, dan anda menghadapi masalah untuk mengesannya, ada beberapa perkara yang boleh anda cuba memperbaiki keadaannya.

Yang pertama adalah menjeda pelaksanaan permainan, dan periksa konsol. Anda boleh menghentikan permainan dengan mengklik pada berhenti seketika ikon di bahagian tengah atas editor, dan kemudian memilih konsol dari bawah tingkap menu (atau menekan Ctrl > Pergeseran > C ). Walaupun tidak ada kesalahan, peringatan tetap dapat membantu memberikan petunjuk mengenai apa yang mungkin salah.

Sekiranya ini tidak berjaya, anda juga boleh mendapatkan idea mengenai keadaan skrip anda dengan mencetak keadaan pemboleh ubah dalaman untuk mengesahkan bahawa program ini melakukan apa yang anda rasa sedang lakukan. Anda boleh menggunakan Debug.Log (Rentetan) untuk mencetak kandungan rentetan ke konsol ketika pelaksanaan program mencapai baris itu. Secara amnya, jika anda berusaha ke belakang dari apa yang anda fikirkan seharusnya berlaku melalui perkara-perkara yang seharusnya menjadikannya berlaku, akhirnya anda akan mencapai titik di mana cetakan debug anda tidak melakukan apa yang anda harapkan. Di situlah kesilapan anda.

7. Contoh: Skrip Pong

Untuk membina Pong, mari kita memecahkan permainan menjadi elemen utamanya: kita memerlukan bola yang berputar bolak-balik antara dayung dengan kecepatan yang semakin meningkat, kita memerlukan papan skor yang tahu kapan bola melewati dayung, dan kita memerlukan mekanisme untuk memulakan semula bola ketika itu berlaku. Langkah pertama yang baik adalah dengan menambahkan badan tegar bukan kinematik ke bola, dua tegar kinematik ke dayung, mematikan graviti untuk mereka semua, dan memberikan bahan fizikal yang sesuai dari aset standard ( melantun dengan bouncing bergabung ditetapkan untuk membiak ).

Di bawah ini, anda dapat melihat skrip bola dengan komen yang jelas. Bola perlu mencapai beberapa gol asas: ia harus melambung dengan corak yang rumit, selalu menjaga pergerakan pada kedua paksi, dan harus melaju pada kecepatan yang mencabar tetapi tidak mustahil dalam arah mendatar.

BallHandler.cs

Seterusnya, kita perlu membuat skrip dayung kita, yang dapat anda lihat di bawah. Dayung perlu bergerak naik dan turun sebagai tindak balas terhadap penekanan kekunci (tetapi tidak di luar batas tertentu). Ia juga perlu mencetuskan sistem zarah ketika bertembung dengan sesuatu.

PaddleHandler.cs

Seterusnya, kita memerlukan AI musuh: sesuatu yang akan menyebabkan dayung musuh mengejar bola dengan kadar yang tetap. Untuk itu, kami akan menggunakan Vector3.Slerp untuk kesederhanaan maksimum. Kita juga mahu tingkah laku zarah yang sama seperti yang kita lihat di dayung kita sendiri.

EnemyAI.cs

Akhirnya, kita memerlukan skrip untuk mengemas kini papan skor dan menetapkan semula bola ketika keluar tanpa batas.

Papan SkorUpdater.cs

Dengan skrip yang dilampirkan dan rujukan diisi, ketika kami menjalankan permainan Pong, kami mengalami permainan!

Awak boleh muat turun demo Pong saya , jika anda ingin melihat semua perkara yang telah saya gariskan dalam tindakan. Ia berjalan pada sistem Windows, Mac dan Linux.

8. Meneroka Dokumentasi / Mempelajari Lebih Lanjut

Unity adalah mesin yang kompleks dengan lebih banyak ciri daripada yang mungkin dapat diliputi dalam panduan gaya ini, dan sebelum anda menyertakan pelbagai sambungan Unity (percuma dan komersial) yang terdapat di internet. Panduan ini akan memberi anda tempat permulaan yang kuat untuk mengembangkan permainan, tetapi pendidikan diri adalah kemahiran penting dalam usaha apa pun, dan dua kali ganda di sini.

Sumber penting di sini ialah Rujukan Rujukan Unity . ScriptReference adalah pangkalan data yang dapat dicari, tersedia untuk C # dan Javascript, yang mempunyai senarai setiap perintah dan fitur Unity, dengan keterangan fungsi mereka dan contoh sintaksis ringkas.

Sekiranya anda menghadapi masalah dengan editor dan antara muka Unity, atau seperti tutorial video sebagai pilihan, terdapat senarai panjang berkualiti tinggi Tutorial video perpaduan ada. Lebih luas (tetapi kurang luas) tutorial teks untuk Perpaduan juga boleh didapati dari CatLikeCoding.

Akhirnya, jika anda mempunyai soalan di luar ruang lingkup dokumentasi atau tutorial, anda boleh mengemukakan soalan khusus di jawapan.Unity3d.com . Ingat bahawa jawapan diberikan oleh sukarelawan, jadi hormati waktunya dan cari pangkalan data terlebih dahulu untuk memastikan soalan anda belum dijawab.

9. Membangun Permainan Anda / Menyusun ke Aplikasi Berdiri

Apabila anda membina sesuatu yang anda banggakan (atau anda sudah selesai mengklonkan contoh Pong kami yang agak cerdik), sudah tiba masanya untuk memindahkan permainan anda dari editor dan mengubahnya menjadi sesuatu yang boleh anda siarkan di internet dan paksa rakan dan keluarga anda untuk bermain. Untuk melakukannya, anda perlu membuat aplikasi yang berdiri sendiri. Berita baiknya adalah bahawa di Unity, ini sangat mudah. Terdapat, bagaimanapun, beberapa masalah yang mungkin anda perlu berhati-hati.

Sebagai permulaan, ketahui bahawa anda hanya boleh membina projek tanpa ralat. Untuk itu, pastikan anda membuka konsol semasa anda membina: terdapat beberapa keadaan ralat yang akan diabaikan oleh permainan di editor, tetapi masih akan membatalkan percubaan binaan. Ini hanya membuang mesej ralat ke konsol, tanpa hasil yang dapat dilihat di skrin, yang boleh membuat anda kecewa jika anda lupa untuk memeriksa. Setelah permainan anda disusun tanpa ralat, anda boleh memilih Tetapan Binaan di bawah Fail menu, atau tekan Ctrl > Pergeseran

> B . Ini akan memunculkan dialog mudah yang membolehkan anda membina permainan anda untuk beberapa platform.

Proses dari sana cukup jelas: pilih pilihan anda, dan tekan membina ; permainan akan meminta anda untuk memasang direktori, dan akan meletakkan direktori yang boleh dilaksanakan dan data di sana. Kedua-dua fail ini dapat disatukan dan diedarkan (pastikan anda tidak mengenakan bayaran untuk permainan yang dibina dalam demo Unity, kerana ini melanggar syarat perkhidmatan).

10. Catatan Penutup

Seperti mana-mana alat pengembangan permainan, kunci kejayaan dengan Unity adalah pengembangan berulang. Anda harus membina kenaikan yang dapat dikendalikan - bersikap ambisius, dengan segala cara, tetapi bercita-cita tinggi dalam potongan kecil, dan mengatur potongan sedemikian rupa sehingga, walaupun anda gagal mencapai cita-cita utama anda, anda sekurang-kurangnya akan berakhir dengan koheren produk.

Dapatkan elemen paling penting terlebih dahulu: ingatlah idea anda produk minimum yang berdaya maju , perkara paling sederhana dan paling telanjang yang mungkin anda dapat buat dan masih merasa seolah-olah anda mencapai sesuatu yang berharga. Dapatkan projek minimum yang layak sebelum beralih ke cita-cita yang lebih besar.

Tutorial ini memberi anda tempat permulaan yang kuat, tetapi kaedah terbaik untuk belajar Unity adalah dengan membina permainan. Mula membina permainan, mengisi jurang pengetahuan anda ketika mereka muncul, dan aliran pengetahuan secara beransur-ansur akan menghapuskan perkara yang tidak anda ketahui dengan cepat.

Sekiranya anda membaca semua ini dan agak terharu dengan pengekodan yang diperlukan dengan Unity, pastikan anda melihat caranya belajar pengembangan permainan dengan Unity Learn dan juga baca panduan kami tentang cara membuat permainan video tanpa pengaturcaraan.

Unity adalah alat yang hebat, dan dengan sedikit penerokaan, anda dapat membina projek yang mengagumkan dengan lebih cepat daripada yang anda jangkakan. Beritahu kami apa yang anda buat dalam komen di bawah - kami ingin melihatnya!

Berkongsi Berkongsi Tweet E-mel 3 Cara Memeriksa sama ada E-mel Betul atau Palsu

Sekiranya anda menerima e-mel yang kelihatan agak meragukan, sebaiknya periksa kesahihannya. Berikut adalah tiga cara untuk mengetahui sama ada e-mel itu nyata.

Baca Seterusnya
Topik-topik yang berkaitan
  • Pengaturcaraan
  • Pengaturcaraan
  • Bentuk panjang
  • Panduan Longform
Mengenai Pengarang Andre Infante(131 Artikel Diterbitkan)

Seorang penulis dan wartawan yang berpusat di Barat Daya, Andre dijamin tetap berfungsi hingga 50 darjah Celcius, dan tahan air hingga kedalaman dua belas kaki.

Lagi Dari Andre Infante

Langgan buletin kami

Sertailah buletin kami untuk mendapatkan petua, ulasan, ebook percuma, dan tawaran eksklusif!

Klik di sini untuk melanggan