Unity 5 menggambar sprite 2D secara terprogram

8

Bagaimana saya bisa menggambar sprite di Unity 5 secara terprogram? Saya mencari sesuatu yang mirip spriteBatch.Draw()di XNA. Hasil yang saya dapatkan ketika saya mencari tentang itu adalah usang http://wiki.unity3d.com/index.php?title=SpriteManager (ini ditulis pada 2012), atau mereka selesai menggunakan antarmuka unity. Yang bisa saya temukan adalah Spritekelas di UnityEngine.dll. Apakah ini yang saya butuhkan? Bagaimana cara menggambarnya? Saya benar-benar tidak mengerti.

dimitris93
sumber
Apa yang Anda maksud dengan menggambar sprite? Maksud Anda merendernya ke layar atau secara dinamis membuat gambar yang diwakili oleh sprite?
MichaelHouse
@ Byte56 menampilkan gambar 2D di layar, sama seperti setiap mesin game 2D yang pernah saya lihat. Saya tidak tahu mengapa ini tampaknya sangat sulit ditemukan ketika Anda mencari di google. Saya memerlukan sesuatu seperti spriteBatch.Draw (SpriteSheetName, posisi, Rectangle, asal, skala, rotasi) di mana rectangle mendefinisikan bagian dari sprite-sheet yang saya coba gambar. Saya sekarang mencoba melakukan ini dengan membuat Spritedan kemudian SpriteRenderertetapi saya tidak tahu cara mengatur gambar ke sprite.
dimitris93
@ Byte56 Spriteobjek tampaknya bahkan tidak memiliki properti untuk mengatur gambar. hal terdekat yang saya lihat adalah sprite.texture yang hanya bisa dibaca ... sebenarnya setiap properti dari sprite hanya baca
dimitris93

Jawaban:

16

Unity tidak memiliki rendering "direct mode" seperti ini, Anda tidak akan memanggil Drawloop pembaruan apa pun untuk Unity.

Di Unity Anda perlu membuat objek game, lalu lampirkan skrip ke objek game itu. Skrip-skrip tersebut akan mengontrol bagaimana objek berperilaku, jika dan bagaimana itu ditampilkan di layar, jika itu bagian dari sistem fisika dll.

Untuk membuat sprite baru untuk menggambar di layar Anda harus membuat objek game baru, lalu lampirkan skrip SpriteRenderer ke sana dan atur sprite-nya.

GameObject go = new GameObject();
SpriteRenderer renderer = go.AddComponent<SpriteRenderer>();

renderer.sprite = Resources.Load("Sprites/Player", typeof(Sprite)) as Sprite;

Ini mengasumsikan struktur direktori

-Assets
--Resources
---Sprites
----<Your 2D assets, set with their texture type to Sprite (2D and UI)>

Sebagai contoh:

masukkan deskripsi gambar di sini

Maka Anda akan memiliki skrip yang berbeda untuk mengubah posisi, rotasi dll, tergantung bagaimana Anda ingin itu berperilaku.

Cara termudah untuk menyelesaikan semua ini tanpa harus menulis kode sebanyak mungkin? Buat objek game di editor Unity terlebih dahulu. Setelah objek permainan dilengkapi dengan sprite yang Anda inginkan dan skrip perilaku dan semua itu. Seret dan jatuhkan ke direktori sumber daya. Ini menciptakan cetakan. Cetakan rumah persis seperti apa itu, pra-fabrikasi. Mereka adalah objek yang lengkap yang dapat Anda referensi dan buat dengan cepat.

Anda akan membuat yang seperti:

public void CreateObject(string prefabName) {
   GameObject newObject = 
      GameObject.Instantiate(Resources.Load(prefabName)) as GameObject;
}

Ini akan menghasilkan klon dari cetakan yang Anda buat sebelumnya. Jadi, jika misalnya, Anda memberi prefab Anda perilaku bergerak ke arah pemain dan menyerang, setiap kali Anda menelurkan prefab baru dari jenis itu, mereka akan mulai bergerak ke arah pemain dan menyerang. Skrip yang Anda hanya perlu menulis sekali mengontrol semua objek game itu.

Saya pikir perbedaan utama yang Anda lihat di sini adalah penggunaan komponen yang berat. Yang kemungkinan besar belum Anda lihat di mesin game lain seperti XNA. Unity benar-benar adalah mesin yang kuat, tetapi frustrasi Anda berasal dari mencoba menggunakannya seperti mesin lain, ketika itu tidak seperti mesin lainnya. Lihat profil saya untuk beberapa pelatihan, saya menambahkan tautan untuk uji coba gratis sehingga Anda tidak perlu membayar.

MichaelHouse
sumber
Wow. pengetahuan saya tentang persatuan hanya meningkat satu ton :) ini benar-benar masuk akal. Saya tidak pernah mendengar cetakan sebelumnya. terima kasih banyak atas bantuannya :)
dimitris93
Saya juga baru mulai menonton tutorial Anda: D
dimitris93
@Shiro Anda mungkin ingin menelusuri yang dasar terlebih dahulu, untuk memperkuat pemahaman Anda tentang objek Unity, komponen, cetakan, dll. Juga, jangan pedulikan bab GUI dari kursus saya :( ini kedaluwarsa.
MichaelHouse
1
Kedengarannya seperti pertanyaan baru untuk situs, bukan komentar.
MichaelHouse
1
Jawaban ini harus dicetak pada halaman pertama dokumen Unity.
easwee