Saya merencanakan pengembangan game di Unity3D, dan mencoba memahami apa yang sudah disediakan mesin, dan apa yang harus saya kode sendiri.
Gim itu sendiri akan menjadi gim ritme, yang berarti menyinkronkan peristiwa audio dan grafis sehingga mereka selalu bermain ketika seharusnya. Yang ingin saya hindari adalah skenario potensial dari lag di mana audio atau grafik mulai berkembang lebih cepat daripada yang lain.
Ketika kami membahas jenis sistem koordinasi ini di kelas desain game saya di universitas, profesor saya menyebut jenis desain ini kelas "Garis Waktu". Gagasannya adalah Anda dapat membuat satu atau lebih dari ini untuk berkembang pada tingkat yang berbeda, jadwalkan hal-hal yang akan terjadi di masa depan, dan selaraskan peristiwa berkala. Namun, menyebut ini sebagai "Timeline" sepertinya terbatas pada profesor saya sendiri, karena googling untuk apakah API tertentu memiliki fungsionalitas "Timeline" telah menjadi usaha yang sia-sia.
Apakah ada nama yang lebih umum untuk fungsi semacam ini? Apakah Unity memiliki metode yang sudah ada sebelumnya untuk mengoordinasikan penjadwalan acara seperti ini, atau apakah ini jenis hal yang perlu dibangun ke mesin? Dan jika itu terjadi, saya akan menghargai beberapa tutorial yang diarahkan!
sumber
Jawaban:
Meskipun fungsi ini tidak tersedia di Unity, implementasi dasar dari timeline seperti itu seharusnya tidak terlalu sulit untuk dilakukan.
Begini cara saya melakukannya:
timeline.AddEvent(0.25f, MyCallback)
.Dengan setiap
Update
, kelas waktu akan:float
) pada waktu yang telah berlaluJika Anda memerlukan semacam fungsi rewind atau replay , tentu bodoh jika menghapus semua acara dari antrian (artinya Anda harus menambahkannya lagi ketika rewound). Alih-alih, Anda juga bisa menggunakan larik yang menampung acara Anda . Suatu acara akan terdiri dari a
Time
danCallback
. Anda harus menjaga array Anda diurutkan berdasarkanTime
.Kemudian alih-alih menghapus item dari array, Anda akan melacak indeks-array saat ini , dan dengan setiap pembaruan mencari di depan dari indeks itu dan menjalankan semua panggilan balik dengan
Playhead >= Time
sementara juga meningkatkan indeks sesuai.Menerapkan kecepatan pemutaran yang lebih cepat berfungsi dengan kedua implementasi dan akan sesederhana:
sumber
Tidak, Unity3D tidak memiliki API seperti itu di luar kotak.
Itu memang mendukung coroutine, dan saya sarankan Anda melihatnya. Coroutine umumnya membuat penjadwalan dan sinkronisasi acara sangat mudah.
sumber
Saya tidak yakin apakah ini baru sejak jawaban pada 2012, tetapi Unity sebenarnya memiliki dukungan untuk kontrol waktu melalui Editor Animasi (Legacy) .
Meskipun fitur ini dimaksudkan terutama untuk menganimasi parameter objek dengan kurva, ini mencakup kemampuan untuk memicu skrip pada Acara Animasi . Script ini dapat mengarahkan grafis dan audio Anda.
sumber