Rabu, 24 April 2024

PROGRAME-visual scripting

 

Panduan Programmer Mesh Visual Scripting

Buka artikel Gambaran umum Visual Scripting

Batasan

  • Hanya subset fungsionalitas Unity yang diekspos ke skrip visual.
  • Variabel dan properti dengan jenis yang tidak sederhana (termasuk referensi objek) tidak dibagikan secara otomatis. Lihat Berbagi dan jaringan di bawah ini untuk mempelajari selengkapnya tentang hal ini.

Hello World

Skrip visual paling sederhana yang dapat Anda buat adalah skrip yang hanya membuka kotak pesan:

Cuplikan layar grafik skrip visual dari sampel Halo Dunia

Ini adalah tampilannya di Mesh:

Jendela browser jala dengan dialog popup yang menampilkan Halo Dunia dan tombol OK

Cuplikan layar Unity Editor dengan Mesh Visual Scripting Halo Dunia adegan terbuka.

Menguji skrip Anda

Sebelum mengunggah adegan ke Mesh, Anda dapat mengembangkan dan menguji skrip visual, bahkan dengan beberapa klien dalam mode layar terpisah, menggunakan Mode Emulasi Jala.

Diagnostik skrip visual di Editor

Saat GameObject dengan Mesin Skrip dipilih dalam hierarki transformasi, Mesh menampilkan panel Diagnostik Skrip Visual Mesh di bagian bawah panel Inspektur:

Cuplikan layar panel diagnostik Mesh Visual Scripting

Panel diagnostik memberikan umpan balik langsung tentang peringatan atau kesalahan apa pun yang mungkin mencegah skrip Anda bekerja dengan baik di Mesh.

Batasan saat ini: Versi panel diagnostik di masa mendatang juga dapat memberikan wawasan tentang penggunaan variabel dan properti bersama skrip visual dan menampilkan diagnostik dan peringatan tambahan.

Mengunggah ke Mesh

Gunakan Pengunggah Mesh untuk mengunggah adegan yang berisi skrip visual. Untuk membuka Pengunggah, pada menu Toolkit Mesh , pilih Lingkungan.

Catatan: Mesh Uploader memvalidasi skrip visual sebelum mengunggah dan menolak untuk mengunggah ketika ada kesalahan validasi dalam skrip visual apa pun. Diagnostik terperinci adalah output ke Konsol.

Berbagi dan jaringan

Status skrip bersama dan lokal

Mesh menggunakan Unity Visual Scripting, yang dirancang untuk bekerja tanpa jaringan. Skrip visual berjalan pada setiap klien secara independen. Namun, pengalaman Mesh pengguna dibagikan; semua pengguna mengalami satu adegan bersama yang terlihat sama di semua klien.

Efek eksekusi skrip visual adalah bagaimana hal itu mengubah status adegan.

Secara default, Mesh secara otomatis mereplikasi perubahan adegan yang dilakukan oleh skrip visual pada satu klien ke semua klien lain. Selain dari semua yang dibagikan dalam adegan, beberapa status tetap independen pada setiap klien (dengan kata lain, lokal).

Perubahan lokal untuk sementara lebih diutamakan daripada perubahan yang masuk dari klien. Contoh: Jika Anda terus menjiwai objek secara lokal, animasi lokal Anda tidak disusupi oleh perubahan yang masuk dari klien lain.

Ada beberapa pembatasan laju pembaruan otomatis. Klien tidak mengirim pembaruan tambahan saat masih dalam penerbangan; ada satu pembaruan yang dikirim per pulang-pergi melalui server. Ini berjumlah sekitar lima hingga enam pembaruan per detik dalam situasi praktis. Ini berarti bahwa animasi halus yang digerakkan oleh satu klien tidak akan terlihat mulus pada klien lain. Praktik terbaik adalah melakukan animasi halus secara lokal, idealnya tidak melalui skrip visual tetapi melalui sistem animasi Unity normal.

Konsistensi akhir status bersama dijamin (bahkan jika status klien untuk sementara dapat berbeda).

Status lokal:

  • Status lokal alami – suara, UI, penyajian.
  • Status lokal yang dikontrol pengguna – sub-adegan yang ditandai dengan komponen Cakupan Skrip Lokal .
  • Status lokal teknis – objek yang bukan bagian dari hierarki adegan (misalnya, materi perender, aset).

Status bersama:

  • Terbatas pada variabel skrip visual dan properti GameObjects dan komponen adegan yang merupakan bagian dari hierarki adegan.
  • Hanya variabel dan properti jenis sederhana yang dapat direplikasi: bilangan bulat, angka floating-point, boolean, string, Color, ,//Vector24Quaternion3 , , Matrix4x4dan .Rect

Setiap perubahan pada status berbagi dikirim melalui jaringan. Ini meningkatkan lalu lintas jaringan dan, jika digunakan sembarangan, dapat mengonsumsi bandwidth yang signifikan.

Pemicu skrip bersama dan lokal

Semua alur skrip visual dimulai sebagai respons terhadap suatu peristiwa.

  • Jika peristiwa berasal dari satu klien (misalnya, pengguna mengklik tombol), skrip visual hanya dijalankan pada klien tersebut.
  • Jika peristiwa terjadi pada semua klien, skrip visual dijalankan pada semua klien (misalnya, peristiwa timer, perubahan properti bersama, pembaruan variabel bersama, avatar memasuki pemicu, tubuh fisika menyentuh collider).

Saat menambahkan simpul untuk mendeteksi apakah objek dipilih, penting untuk memilih yang benar. Anda memiliki dua pilihan: Isi Yang Dapat Berinteraksi Jala: Dipilih Secara Lokal, dan Isi Yang Dapat Berinteraksi Jala: Dipilih. Katakanlah, misalnya, Anda ingin memiliki tombol yang dapat diklik untuk memicu teleportasi. Agar peserta mengklik tombol dan hanya mengangkut sendiri, gunakan Isi Yang Dapat Berinteraksi Mesh: Dipilih Simpul Lokal .

Cuplikan layar Mesh Interactable Body Dipilih secara lokal.

Agar peserta mengklik tombol dan teleportasi semua orang dalam pengalaman, gunakan Isi Yang Dapat Berinteraksi Mesh: Adalah Simpul yang Dipilih . Dalam setiap kasus, teks di atas simpul memberi tahu Anda perilaku yang diharapkan:

Cuplikan layar simpul Mesh Interactable Body Is Selected, yang akan memengaruhi semua klien.

Jika skrip lokal menetapkan variabel bersama dan skrip kedua mendengarkan perubahan pada variabel ini (menggunakan pemicu On State Changed ; lihat di bawah), skrip kedua akan dijalankan pada semua klien.

Mesh menawarkan beberapa simpul skrip khusus:

  • Pada pemicu Interval secara berkala secara sinkron pada semua klien.
  • Pada Status Diubah memicu ketika inputnya berubah (misalnya, properti bersama, variabel bersama, lokal).
  • Perlihatkan Dialog menampilkan dialog pesan dengan teks kustom yang mungkin secara opsional menyediakan tombol sebagai opsi respons.

Jala membuat trade-off tertentu demi kesederhanaan:

  • Jika lebih dari satu klien mencoba mengubah data yang sama, klien terakhir menang (alih-alih menggunakan model pembaruan data berbasis transaksi).
  • Untuk memastikan konsistensi data, skrip visual yang berjalan di semua klien tidak boleh membaca lalu menulis properti atau variabel bersama. Jika ini terjadi, ini memicu kesalahan runtime dan membatalkan eksekusi alur skrip.

Praktik terbaik

Skrip visual secara signifikan lebih lambat daripada kode C# asli. Selain itu, Mesh menambah skrip visual dengan jaringan dan fitur integrasi lainnya, dan tindakan skrip visual overhead yang tampaknya rendah dapat mengakibatkan lalu lintas jaringan.

Masalah performa dalam skrip visual hampir selalu disebabkan oleh skrip yang melakukan pembaruan frekuensi tinggi variabel atau properti komponen yang dibagikan secara default.

  • Gunakan komponen Cakupan Skrip Lokal secara liberal untuk memastikan hanya variabel dan properti komponen yang perlu disinkronkan di seluruh klien yang menimbulkan overhead jaringan. Apa pun yang dianimasikan secara lokal dengan skrip visual tidak boleh dibagikan.

  • Gunakan pemicu skrip On State Changed untuk memulai alur skrip sebagai respons terhadap perubahan variabel atau properti komponen. Ini berfungsi baik untuk status lokal maupun bersama. Ini juga cara yang disarankan untuk menyinkronkan animasi lokal.

  • Gunakan pemicu skrip On Interval alih-alih pemicu frekuensi tinggi seperti Saat Pembaruan untuk memulai alur skrip dalam interval reguler yang dapat dikontrol.

Hal-hal yang perlu diperhatikan:

  • Jika memungkinkan, hindari memicu skrip visual setiap bingkai. Alih-alih menggunakan Saat Pembaruan, gunakan On State Changed atau On Interval.

  • Jika Anda harus memicu skrip visual setiap bingkai, lakukan pada objek sesetempat mungkin.

  • Jangan perbarui properti bersama pada frekuensi tinggi. Sebagai gantinya, pertimbangkan untuk membuat properti yang diperbarui frekuensi tinggi secara lokal dengan menggunakan komponen Cakupan Skrip Lokal . Ingat bahwa variabel skrip visual juga dibagikan secara default!

  • Jangan gunakan variabel objek jika variabel aliran akan berfungsi.

  • Hindari memperbarui properti atau variabel bersama dalam skrip visual yang dipicu secara bersamaan pada semua klien.

  • Hindari mengatur properti fisika (transformasi dan kecepatan) pada tubuh fisika yang sama pada beberapa klien secara bersamaan. Ini dapat dengan mudah terjadi secara tidak sengaja dalam skrip visual yang merespons pemicu perubahan adegan bersama.

  • Jangan mencoba memperbaiki masalah performa dengan mengonsolidasikan beberapa alur skrip yang bekerja pada objek individual ke dalam satu alur skrip yang berfungsi pada banyak objek. Overhead memulai alur skrip dapat diabaikan, dan kompleksitas tambahan yang harus Anda tambahkan untuk mengonsolidasikan skrip Anda mungkin sangat baik meniadakan sedikit manfaat performa yang mungkin Anda dapatkan dari mengurangi jumlah ScriptMachines.

Tips

  • Properti komponen dan variabel skrip visual yang memiliki jenis sederhana secara otomatis dibagikan di seluruh klien dalam sesi. Untuk mengurangi overhead dengan membatasi jumlah berbagi, tambahkan komponen Cakupan Skrip Lokal ke GameObject yang relevan, lalu lakukan salah satu hal berikut:

    Untuk berbagi variabel skrip visual tetapi bukan properti komponen atau variabel skrip atau properti komponen objek anak:
    Di komponen Cakupan Skrip Lokal , pilih Bagikan variabel skrip visual pada Objek Game ini.

    Cuplikan layar komponen cakupan skrip lokal dengan properti bernama

    Untuk menjaga semua variabel skrip visual dan properti komponen untuk objek saat ini dan objek turunannya tetap lokal:
    Hal ini dicapai hanya dengan menambahkan komponen Cakupan Skrip Lokal dan menjaga variabel Berbagi skrip visual pada Objek Game ini tidak dipilih.

    Cuplikan layar komponen cakupan skrip lokal dengan properti bernama

    Anda dapat melihat beberapa contoh bagaimana komponen Cakupan Skrip Lokal digunakan dalam Bab 3 tutorial Mesh 101 kami yang berfokus pada pembuatan skrip visual.

  • Untuk melakukan sesuatu dalam interval waktu reguler yang disinkronkan di seluruh klien, gunakan simpul pemicu On Interval .

  • Untuk melakukan sesuatu sebagai respons terhadap properti komponen tertentu atau variabel skrip visual yang berubah (misalnya, karena ini atau beberapa klien lain mengaturnya dalam skrip visual), gunakan pemicu On State Changed

  • Ada fungsi Skrip Visual tambahan yang disediakan oleh Mesh—lihat bagian Microsoft>Mesh dan Microsoft>Events>Mesh di Fuzzy Finder.

Keamanan

Mesh melindungi pengguna dari skenario ancaman seperti ini:

  • Konten adegan yang disusupi—misalnya, upaya berbahaya untuk mengakses data lokal yang sensitif.
  • Klien atau saluran transportasi yang disusupi—misalnya, upaya berbahaya untuk membaca atau menulis data jarak jauh yang tidak dapat diakses pada klien lain.

Untuk mencapai hal ini, Mesh menjalankan skrip visual di kotak pasir (seperti JavaScript di browser web).

Saat memulai adegan, Mesh menggunakan daftar izin yang dikumpulkan untuk memvalidasi skrip visual untuk membatasi akses ke jenis komponen Unity tertentu dan subset yang aman dari propertinya.

Pada runtime adegan, Mesh membatasi akses ke bagian tertentu dari adegan:

  • Secara lokal: dengan mencegah akses ke internal Mesh dan data sensitif lainnya.
  • Dari jarak jauh: dengan memeriksa apakah pembuat adegan bermakna bagian adegan ini untuk dimodifikasi. Ini dilakukan dengan menganalisis skrip visual secara statis di sisi penerima untuk penulisan adegan potensial mereka.

Contoh:

  • Skrip visual lokal berbahaya ingin memberikan semua kepala bobble avatar. Untuk itu, ia mencoba memindai seluruh adegan untuk GameObjects yang mewakili kepala avatar. Mesh secara otomatis memfilter hasil pemindaian untuk mengecualikan sistem avatar.
  • Klien jarak jauh berbahaya ingin merusak adegan dengan membalik semua GameObjects terbalik. Untuk mencapainya, ia mengirimkan pembaruan properti yang mengatur skala vertikal setiap GameObject di adegan. Namun, karena tidak ada skrip visual pada klien penerima yang dirancang untuk melakukan hal seperti itu, klien lokal mengabaikan input jarak jauh.

Integrasi jala

Batasan saat ini: Bagian ini menjelaskan pratinjau fitur yang masih berfungsi sedang berlangsung.

Umumnya, integrasi dengan komponen lain sering dilakukan dengan mengubah dan mendengarkan perubahan properti komponen. Contohnya:

  • Dapat berinteraksi: amati properti "Diarahkan" dan "Dipilih".

  • Interaksi fisika: amati tubuh dalam volume pemicu atau bersentuhan dengan collider.

  • Avatar: membaca posisi avatar, rotasi tampilan, dan pelat nama. (Belum tersedia.)

  • Status sesi: mencantumkan peserta dan membaca info peserta. (Belum tersedia.)

  • Cloud Scripting: beroperasi bersama dengan skrip cloud yang dapat membaca dan menulis variabel dan properti komponen. (Belum tersedia.)

Beberapa komponen menyediakan tindakan lokal:

  • Pengelola Audio
  • Garis waktu
  • Animator
  • Penyajian: properti bahan baca dan tulis dan shader

Fisika ditangani secara khusus karena simulasi untuk objek fisika tertentu selalu dilakukan secara otoritatif oleh satu klien saja: pemiliknya. Untuk membuat ini berfungsi, mengatur properti fisika memicu transfer kepemilikan otomatis ke klien yang menerapkan perubahan.

Langkah berikutnya

Tidak ada komentar:

Posting Komentar