BUAT DUNIAMU
Pemain & Karakter: Dasar

ZEPETO Players

21min
Document image

  • ZepetoPlayers adalah kelas Manajer (Singleton) yang dirancang untuk mengontrol baik Pemain ZEPETO maupun Karakter ZEPETO.
    • Dengan menambahkan ZepetoPlayers ke dalam sebuah Adegan, Anda dapat membuat, menghapus, dan memanipulasi Pemain ZEPETO.
  • ZepetoPlayer mewakili sebuah instance individu dari karakter ZEPETO yang digunakan untuk mengelola baik pemain yang Anda kendalikan secara langsung di dunia multiplayer maupun pemain lainnya.
    • Setiap ZepetoPlayer yang dibuat di dunia multiplayer diberikan ID sesi unik dan dikelola menggunakan ID sesi ini.
    • Karena ZepetoPlayer memiliki atribut ZepetoCharacter, ia dapat dikendalikan menggunakan fungsi yang terkait dengan ZepetoCharacter.
    • Ada tiga jenis ZepetoPlayer:

ZepetoPlayer

Deskripsi

Pemain Lokal

Mewakili instansi karakter ZEPETO yang dikendalikan langsung oleh pengguna lokal. - Dilengkapi dengan komponen Pengendali Karakter/Kamera Zepeto.

Pemain Jaringan (Pemain Jarak Jauh)

Instansi karakter ZEPETO yang dapat dimuat dan digunakan dalam konten multiplay. - Tidak memiliki komponen Pengendali Karakter/Kamera Zepeto yang terpasang.

Pemain Bot

Instansi karakter ZEPETO untuk konten multiplay, tetapi dikendalikan oleh bot alih-alih pengguna nyata. Digunakan sebagai pengganti saat memulai dunia multiplayer dengan pemain yang tidak mencukupi atau jika seorang pemain meninggalkan permainan selama bermain. - Tidak memiliki komponen Pengendali Karakter/Kamera Zepeto yang terpasang.

  • ZepetoCharacter adalah unit instance dasar dari karakter ZEPETO yang dapat dimuat dan dikendalikan di World Scene.
    • ZepetoCharacter memiliki penampilan avatar yang dibuat melalui aplikasi ZEPETO.

Menambahkan ZepetoPlayers

Di jendela Hierarchy, pilih ZEPETO → tab ZepetoPlayers.

Document image


Anda sekarang dapat menambahkannya ke Adegan Anda.

Document image


Perhatikan bahwa hanya menambahkan ZepetoPlayers tidak membawa Pemain Zepeto ke dalam Adegan. Anda perlu menerapkan skrip menggunakan API pembuatan karakter dari ZepetoPlayers.

Jika Anda ingin dengan cepat membuat dan mencoba hanya Pemain Lokal dalam sebuah Adegan, silakan merujuk ke panduan:



Untuk contoh tentang cara menampilkan nama dan foto profil pemain Zepeto, lihat panduan berikut:



API Pemain ZEPETO

Jika Anda tertarik dengan API ZepetoPlayers, silakan merujuk ke dokumentasi:



Panduan ini terutama mencakup contoh penggunaan Pemain ZEPETO dalam skenario multipemain.



Mengimplementasikan Sinkronisasi Posisi Multiplay menggunakan Pemain ZEPETO

Dalam dunia pemain tunggal, hanya Pemain Lokal yang perlu dibuat dan karena hanya Pemain Lokal yang muncul di layar, sinkronisasi tidak diperlukan.

Namun, dalam dunia multiplay, tidak hanya Pemain Lokal yang Anda kendalikan secara langsung tetapi juga Pemain lain, yang disebut Pemain Jaringan, perlu ditampilkan di layar.

Setiap tindakan Pemain Jaringan - bergerak, melompat, dan melakukan gerakan tertentu - harus muncul identik di layar Anda.

Proses ini disebut sinkronisasi.

Tanpa menerapkan skrip sinkronisasi, Anda tidak akan dapat melihat penampilan atau gerakan Pemain Jaringan.

Dalam dunia multiplay tanpa sinkronisasi, satu-satunya cara untuk mengetahui apakah klien lain telah masuk ke Ruangan adalah melalui tombol beranda.

Penampilan ketika hanya pengaturan multiplay diterapkan tanpa pembuatan karakter dan skrip sinkronisasi
Penampilan ketika hanya pengaturan multiplay diterapkan tanpa pembuatan karakter dan skrip sinkronisasi




LANGKAH 1 : Menyiapkan Lingkungan Multiplay

Disarankan untuk memulai dengan memahami pengaturan dasar dan konsep multiplay melalui video tutorial multiplay.



LANGKAH 2 : Menampilkan Pemain Lain di Layar Anda

Pemain Lokal Anda diperlakukan sebagai Pemain Jaringan di perangkat orang lain.

Ini berarti bahwa bahkan Pemain Lokal Anda harus mengirim informasi ke server untuk sinkronisasi.

Semua Pemain yang terhubung ke dunia multiplay harus berbagi informasi mereka.

Semua Klien yang terhubung ke Ruangan Multiplay berbagi data Status Ruangan Multiplay.

Data Status Ruangan ini mengikuti Skema yang ditentukan dalam Schemas.json.

(Silakan anggap Skema sebagai struktur data)

Dalam panduan ini, Anda akan menyinkronkan posisi pemain melalui data Status Ruangan. Oleh karena itu, definisikan Skema dalam Schemas.json yang dapat mewakili data posisi untuk setiap pemain.

schema.json




👍 Tips

  • Simpan semua informasi yang harus dibagikan oleh server dan semua klien di Status Ruangan Multiplay.
  • Simpan data individu untuk setiap Pemain, seperti level, poin pengalaman, skor, dll., menggunakan DataStorage.



Skrip server dapat mengenali ketika Pemain lain telah memasuki Ruangan dan dapat mengirimkan informasi itu ke klien untuk memuat Pemain tersebut ke dalam Adegan.



LANGKAH 2-1 : Skrip Server Dasar

Ketika seorang Pemain memasuki Ruangan dunia multiplay, onJoin() dipanggil.

Dalam skrip server, tambahkan informasi tentang pemain yang terhubung ke Pemain Ruang Status.



Juga, ketika seorang Pemain keluar dari Ruangan, onLeave() dipanggil.

Skrip server akan menghapus informasi pemain yang keluar dari Pemain Ruang Status.

TypeScript




LANGKAH 2-2 : Skrip Klien Dasar

Saat membuat dunia multiplay, skrip klien diperlukan untuk berkomunikasi dengan server.

Di bawah ini adalah contoh skrip klien dasar untuk permainan multiplayer.

Di sisi klien, kami mengelola data pemain yang akan ditampilkan di klien kami menggunakan currentPlayers struktur data peta.



Baris kode yang penting diilustrasikan di bawah ini:

ZepetoPlayers.instance.CreatePlayerWithUserId(sessionId, player.zepetoUserId, spawnInfo, isLocal);

Ketika klien menerima informasi pemain dari Status Ruang server dan seorang pemain baru bergabung ke Ruang, sebuah ID sesi diberikan. Jika ID sesi dari pemain yang sedang dibuat cocok dengan ID sesi kita sendiri, pemain tersebut dianggap lokal. Dalam hal ini, pemain akan diinstansiasi dengan isLocal = true, yang menunjukkan bahwa itu adalah pemain lokal.

Selanjutnya, pemain yang bukan lokal dibuat dengan isLocal = false. Ini memastikan bahwa penampilan semua pemain, baik lokal maupun non-lokal, ditampilkan di layar.

TypeScript




Sekarang, ketika seorang Pemain masuk, Anda dapat mengonfirmasi bahwa karakter ZEPETO dibuat di layar Anda.

Tetapi, gerakan Pemain belum tercermin di layar.

Di layar saya, hanya pemain lokal saya yang bergerak, dan pemain lain tampak statis meskipun mereka sebenarnya bergerak.
Di layar saya, hanya pemain lokal saya yang bergerak, dan pemain lain tampak statis meskipun mereka sebenarnya bergerak.




Mari kita lanjutkan ke penyelarasan posisi berikutnya.



LANGKAH 3 : Menyelaraskan dengan Mengambil Informasi Pemain Lain

Untuk penyelarasan, setiap kali seorang Pemain bergerak atau melakukan tindakan, mereka harus mengirimkan perubahan status mereka ke server.

Mengirim pesan yang berisi perubahan status mereka ke server dilakukan melalui komunikasi Pesan Ruangan.

Ketika server menerima pesan tentang perubahan status Pemain, server memperbarui Status Ruangan.

  • Silakan merujuk ke panduan berikut. [[err] ]



Misalnya, mari kita anggap bahwa pemain lokal Anda bernama B.

Ketika Pemain Jaringan A bergabung dengan Ruangan, mereka diinstansiasi pada koordinat x:0, y:0, z:0.

Jika Pemain A bergerak ke posisi x: -10, y: 0, z: 0, B tidak memiliki cara nyata untuk mengetahui bahwa A sedang bergerak.

Ini karena keduanya dioperasikan secara lokal di perangkat terpisah, sehingga di klien yang terpisah.

Dengan demikian, orang yang mengendalikan A perlu mengkomunikasikan gerakannya ke server melalui Pesan Ruangan.

Setelah server menerima informasi ini, ia memberitahu semua orang yang hadir di Ruangan tentang posisi A secara real-time. Dengan cara ini, B akhirnya menyadari bahwa A sedang bergerak.

Agar server dapat memberi tahu pemain lain, ada dua metode:

  • Menggunakan siaran Pesan Ruangan.
  • Memperbarui Status Ruangan, kemudian meminta klien untuk mengambil dan menerapkan Status Ruangan.

Panduan ini menggunakan metode kedua untuk memperbarui Status Ruangan.

Document image




Mengingat bahwa Pemain Zepeto yang dimuat ke dalam Adegan memiliki atribut karakter Zepeto, Anda dapat menggunakan fungsi karakter Zepeto untuk memerintahkan gerakan ke lokasi tertentu atau memulai lompatan.

Agar klien B dapat memvisualisasikan gerakan A ke x:-10, y:0, z:0, pendekatan yang paling intuitif adalah menggunakan MoveToPosition(). Fungsi ini akan memindahkan pemain ke posisi terbaru A yang diterima dari server.

Tidak hanya perubahan posisi, tetapi juga gerakan, penggunaan keterampilan, pengumpulan item, dan semua perubahan status memerlukan komunikasi server-klien untuk sinkronisasi.

Anda perlu menerapkan sinkronisasi untuk menjaga setiap tindakan tetap harmonis di seluruh jaringan.

👍 Ringkasan Konsep Sinkronisasi

  • Ketika Pemain Lokal mengalami perubahan status, mereka mengirimkannya ke server menggunakan Pesan Ruangan.
  • Server memberi tahu semua pemain lain kecuali pemain lokal tentang perubahan status.
  • Setelah menerima pesan perubahan status, kode klien memperbarui status Pemain yang mengirim pesan tersebut.



LANGKAH 3-1 : Skrip Server dengan Sinkronisasi Posisi yang Selesai

Dalam skrip server dasar, implementasi tambahan diperlukan untuk memperbarui Status Ruangan setiap kali pesan tentang perubahan status dari klien Pemain Lokal diterima.

TypeScript




LANGKAH 3-2 : Skrip Klien dengan Sinkronisasi Posisi yang Selesai

Implementasi kunci dalam skrip klien dasar adalah:

  • Secara otomatis panggil OnStateChange ketika Status Ruangan server berubah.
  • Menggunakan SendMessageLoop(0.04) fungsi, kirim posisi pemain lokal dan informasi status lompatan karakter ke server setiap 0,04 detik.
TypeScript




Dengan kode sinkronisasi posisi diterapkan, tidak hanya pemain lokal saya tetapi juga gerakan pemain lain ditampilkan.
Dengan kode sinkronisasi posisi diterapkan, tidak hanya pemain lokal saya tetapi juga gerakan pemain lain ditampilkan.




👍 Tips

  • Panduan ini hanya menerapkan sinkronisasi posisi. Sinkronisasi gerakan, sinkronisasi objek, dll., belum diterapkan.
  • Prinsipnya sama untuk semua, tetapi proses mengirim dan menerima Pesan Ruang pada setiap momen yang diperlukan adalah hal yang penting.
  • Jika Anda ingin menerapkan sinkronisasi dengan lebih nyaman, pertimbangkan untuk menggunakan modul sinkronisasi multiplay.



Diperbarui 11 Oct 2024
Doc contributor
Doc contributor
Doc contributor
Apakah halaman ini membantu Anda?