BUAT DUNIAMU
Obrolan
Menggunakan Fungsi Obrolan Suara
25 mnt
paket versi prapengguna zepeto voice chat memungkinkan obrolan suara di dunia instal zepeto voice chat dan atur mode 1\) instal window → package manager → zepeto voice chat fitur ini tersedia di dunia di mana elemen multiplayer diterapkan pengujian hanya tersedia di pengujian seluler, bukan pengujian editor karena kebijakan ios, volume perangkat tidak turun menjadi nol ketika mikrofon dihidupkan di dunia dengan obrolan suara yang diaktifkan volume perangkat akan turun menjadi nol ketika mikrofon dimatikan 2\) klik tombol \[▼] di menu tengah layar proyek unity yang sedang dikembangkan klik tombol \[buka pengaturan dunia] di menu pop up yang muncul 3\) jika paket zepeto voice chat terinstal dengan benar, anda akan melihat opsi mode obrolan suara ditambahkan 4\) dalam mode obrolan suara, silakan atur mode yang diinginkan dasar gunakan fitur obrolan suara yang disediakan secara default skrip gunakan fitur obrolan suara dengan menerapkan api obrolan suara anda dapat memproses akses masuk/keluar ruangan untuk obrolan suara saat runtime terapkan obrolan suara untuk tim yang berbeda (misalnya, obrolan suara tim merah dan obrolan suara tim biru) mendeteksi pengguna yang sedang berbicara saat ini mode dasar menggunakan fitur obrolan suara sebuah dunia dengan obrolan suara mode dasar terlihat seperti ini anda juga dapat membuat obrolan suara yang lebih menghibur menggunakan fitur modifikasi suara obrolan suara secara otomatis diaktifkan saat memasuki dunia dengan fungsi obrolan suara 👍 saat pertama kali anda menggunakan fitur obrolan suara di zepeto, pop up mengenai akses mikrofon akan muncul anda harus mengizinkan akses untuk menggunakan fungsi obrolan suara anda dapat menggunakannya dengan menyentuh tombol obrolan suara di aplikasi zepeto 3 26 000 dan yang lebih baru, ikon pembicara obrolan suara tidak muncul jika anda ingin membuat ikon pidato muncul, silakan ganti ke mode skrip dan ikuti panduan untuk menulis kode anda sendiri mode skrip menggunakan api voicechat mode skrip memungkinkan obrolan suara di saluran yang dipisahkan oleh tim silakan merujuk ke deskripsi fungsi dan contoh di bawah ini untuk mengimplementasikan fitur tersebut api deskripsi oninitializedevent api obrolan suara tersedia setelah peristiwa true terjadi dalam peristiwa inisialisasi jika peristiwa ini true, obrolan suara tersedia, dan jika false, obrolan suara tidak tersedia enterroom(roomproperty roomproperty) fungsi untuk masuk ke ruang obrolan suara \ setelah berhasil masuk ke ruang obrolan suara, tombol obrolan suara akan muncul exitroom() fungsi untuk meninggalkan ruang obrolan suara onroomconnectedevent sebuah peristiwa untuk memeriksa status masuk ke ruang obrolan suara jika peristiwa ini benar, pengguna telah masuk ke ruang obrolan suara; jika salah, pengguna telah meninggalkan ruang obrolan suara onspeechdetectedevent\<string, boolean> peristiwa untuk mendeteksi pengguna yang sedang berbicara dalam obrolan suara \ string adalah userid dari pengguna yang berbicara \ boolean adalah true ketika ucapan dimulai, false ketika ucapan berakhir changeteamid(number teamid) fungsi untuk mengubah teamid yang digunakan dalam ruang obrolan suara \ hanya dapat diatur ke nilai int 1 atau lebih kelas roomproperty api deskripsi setaudiomode mode audio yang digunakan dalam obrolan suara \ audiomode omnidirectional mode obrolan suara tanpa pengurangan suara berdasarkan jarak (anda dapat menggunakannya dengan atau tanpa karakter zepeto) \ audiomode directional mode obrolan suara dengan pengurangan suara berdasarkan jarak (karakter zepeto harus ada di scene, karena mode ini bekerja berdasarkan lokasi karakter zepeto) setteamid teamid yang digunakan dalam obrolan suara untuk mengaktifkan obrolan suara antara pengguna dengan teamid yang sama \ hanya dapat diatur ke nilai int 1 atau lebih contoh implementasi obrolan suara spesifik tim berikut adalah beberapa contoh kode untuk mencoba api obrolan suara 1\) tambahkan tombol dan catat teks ke kanvas seperti yang ditunjukkan pada gambar di bawah untuk masuk ke saluran tim voice chat dan menampilkan log status tombol button blueteam tombol masuk voice chat tim biru button redteam tombol masuk voice chat tim merah button exit tombol keluar dari voice chat teks text log teks untuk menampilkan log chat text team teks untuk menampilkan daftar anggota saluran tim voice chat yang sama text currentspeaking teks untuk menampilkan userid yang sedang berbicara di voice chat 2\) buat proyek > buat > zepeto > typescript dan ganti namanya menjadi voicechattest 3\) tulis skrip contoh seperti yang ditunjukkan di bawah ini voicechattest import { button, inputfield, text } from 'unityengine ui'; import { zepetoscriptbehaviour } from 'zepeto script' import { audiomode, roomproperty, voicechatcontroller } from 'zepeto voice chat' export default class voicechattest extends zepetoscriptbehaviour { // deklarasikan komponen ui sebagai anggota publik public blueteambutton button; public redteambutton button; public exitroombutton button; public logtext text; public currentteamidtext text; public currentspeakinguseridstext text; // deklarasikan anggota privat untuk menyimpan id pengguna yang berbicara dan kolom input id tim private currentspeakinguserids string\[]; private teamidinputfield inputfield; start() { this currentspeakinguserids = new array(); // tambahkan pendengar acara untuk klik tombol this blueteambutton onclick addlistener(()=>{ this enterblueteam(); }); this redteambutton onclick addlistener(()=>{ this enterredteam(); }); this exitroombutton onclick addlistener(()=>{ this exitvoicechatroom(); }); // tambahkan pendengar acara untuk pengontrol suara chat voicechatcontroller oninitializedevent addlistener(init => this oninitialized(init)); voicechatcontroller onroomconnectedevent addlistener(connected => this onroomconnected(connected)); voicechatcontroller onspeechdetectedevent addlistener((userid, speechdetected) => this onspeechdetected(userid, speechdetected)); this logtext text = "\[voicechat] voicechattest mulai"; } // metode ondestroy dipanggil saat skrip dihancurkan ondestroy() { voicechatcontroller oninitializedevent removealllisteners(); voicechatcontroller onroomconnectedevent removealllisteners(); voicechatcontroller onspeechdetectedevent removealllisteners(); } // metode yang dipanggil saat sistem suara chat diinisialisasi private oninitialized(initialized boolean) { this logtext text = "\[voicechat] oninitialized " + initialized; } // metode yang dipanggil saat ruang suara chat terhubung private onroomconnected(connected boolean) { this logtext text = "\[voicechat] onroomconnected " + connected; } // metode yang dipanggil saat ucapan pengguna terdeteksi atau tidak terdeteksi private onspeechdetected(userid string, speechdetected boolean) { this logtext text = "\[voicechat] onspeechdetected " + userid + ", " + speechdetected; if (speechdetected) { this currentspeakinguserids push(userid); } else { let index = this currentspeakinguserids indexof(userid); this currentspeakinguserids splice(index, 1); } let userids = "\[currentspeakinguserids]\n"; for (let i = 0; i < this currentspeakinguserids length; i++) { userids += this currentspeakinguserids\[i]; userids += "\n"; } this currentspeakinguseridstext text = userids; } // metode untuk masuk ke ruang suara chat tim biru public enterblueteam(){ this entervoicechatroom(2); } // metode untuk masuk ke ruang suara chat tim merah public enterredteam(){ this entervoicechatroom(3); } // metode untuk masuk ke ruang suara chat berdasarkan indeks tim yang diberikan private entervoicechatroom(teamindex number) { console log("\[voicechat] entervoicechatroom"); // buat objek roomproperty baru dan atur propertinya let roomproperty = new roomproperty(); roomproperty setaudiomode(audiomode omnidirectional); roomproperty setteamid(teamindex); voicechatcontroller enterroom(roomproperty); this currentteamidtext text = "teamid " + roomproperty teamid tostring(); } // metode untuk keluar dari ruang suara chat public exitvoicechatroom() { this logtext text = "\[voicechat] exitvoicechatroom"; voicechatcontroller exitroom(); } // metode untuk mengubah id tim untuk pengguna saat ini public changeteamid() { // dapatkan id tim baru dari kolom input dan parse sebagai integer let teamid = parseint(this teamidinputfield text); this logtext text = "\[voicechat] changeteamid " + teamid; this currentteamidtext text = "teamid " + teamid tostring(); // ubah id tim dalam sistem suara chat voicechatcontroller changeteamid(teamid); } } deskripsi kode ketika skrip dijalankan, itu akan mendaftarkan sebuah acara pada setiap tombol di fungsi start() dan mendaftarkan acara oninitialized, onroomconnected, dan onspeechdetected pada voicechatcontroller ketika tombol tim biru atau tombol tim merah diklik, fungsi entervoicechatroom() dieksekusi dan pengguna masuk ke ruang obrolan suara dengan memasukkan roomproperty yang ditentukan properti ruangan dalam contoh adalah sebagai berikut roomproperty setaudiomode audiomode omnidirectional mode audio omnidirectional adalah mode di mana volume terdengar sama terlepas dari posisi pemain sebaliknya, mode directional adalah mode suara 3d, yang berarti bahwa volume akan terdengar berbeda tergantung pada posisi karakter, jadi semakin jauh karakter, semakin rendah volumenya roomproperty setteamid saluran 2 untuk tim biru, saluran 3 untuk tim merah setteamid berfungsi seperti saluran dalam obrolan suara sebuah tim yang masuk ke saluran 2 hanya dapat obrolan suara dengan pemain di saluran 2, dan sebuah tim yang masuk ke saluran 3 hanya dapat obrolan suara dengan pemain di saluran 3 exitvoicechatroom() akan keluar dari saluran tim obrolan suara saat ini onspeechdetected() akan mengeluarkan id pemain yang saat ini menggunakan obrolan suara di saluran tim ke teks log 4\) setelah menyelesaikan skrip, tetapkan tombol dan teks yang dibuat di langkah 1 di inspector 5\) jalankan tes di ponsel melalui kode qr atau tautan tes, dan anda dapat melihat bahwa tombol aktivasi obrolan suara dibuat ketika tombol masuk tim ditekan, dan setiap kali seorang pemain berbicara, log menunjukkan pemain mana yang sedang dalam obrolan suara, seperti yang ditunjukkan di layar berikut contoh menampilkan gambar gelembung ucapan obrolan suara di aplikasi zepeto versi 3 26 000 dan yang lebih baru, ikon ucapan obrolan suara tidak muncul jika anda ingin menangani ikon ucapan agar muncul, silakan ikuti panduan dan tulis kode anda sendiri 1\) untuk menampilkan gelembung ucapan di atas kepala karakter ketika pemain berada dalam obrolan suara, anda perlu membuat prefab yang menggunakan gambar gelembung ucapan impor gambar png gelembung ucapan yang ingin anda gunakan seperti yang ditunjukkan di bawah ini dan ubah tipe teksturnya menjadi sprite 2\) proyek > buat > prefab dan ganti namanya menjadi chatbubble 3\) klik dua kali prefab chatbubble untuk masuk ke mode pengeditan prefab pilih prefab chatbubble dan pilih transform > posisi > ubah nilai y menjadi 0 35 4\) buat canvas di dalam objek prefab klik dua kali pada prefab chatbubble untuk masuk ke mode edit prefab, dan kemudian tambahkan hierarchy > ui > canvas ubah nilai komponen recttransform dari canvas menjadi sebagai berikut posx 0 , posy 0 lebar 100, tinggi 100 skalax 0 005, skalay 0 005, skalaz 0 005 ubah rendermove dari komponen canvas menjadi world space 5\) buat gambar gelembung ucapan di dalam canvas tambahkan hierarchy > ui > image sebagai anak dari canvas, dan ganti namanya menjadi chatbubbleimage ubah nilai komponen recttransform dari chatbubbleimage menjadi sebagai berikut lebar 42, tinggi 42 daftarkan sprite gambar yang anda impor di langkah 1 sebagai gambar sumber di komponen gambar 👍 tip anda juga dapat menganimasi sprite gambar gelembung bicara anda juga dapat menggunakan gambar gelembung terpisah untuk tim yang berbeda 6\) proyek > buat > zepeto > buat typescript dan ganti namanya menjadi voicechatbubblecontroller 7\) tulis skrip contoh seperti yang ditunjukkan di bawah ini voicechatbubblecontroller import { gameobject, object } from 'unityengine'; import { knowsockets, zepetoplayers } from 'zepeto character controller' import { zepetoscriptbehaviour } from 'zepeto script' import { audiomode, roomproperty, voicechatcontroller } from 'zepeto voice chat'; export default class voicechatbubblecontroller extends zepetoscriptbehaviour { // variabel gameobject publik untuk menyimpan prefab gelembung obrolan suara public voicechatprefab gameobject; // peta privat untuk menyimpan gameobjects yang terkait dengan id pengguna private voicebubblemap map\<string, gameobject> = new map\<string, gameobject>(); start() { // tambahkan pendengar acara untuk kontrol obrolan suara voicechatcontroller oninitializedevent addlistener(init => this oninitialized(init)); voicechatcontroller onroomconnectedevent addlistener(connected => this onroomconnected(connected)); voicechatcontroller onspeechdetectedevent addlistener((userid, speechdetected) => this onspeechdetected(userid, speechdetected)); } // metode yang dipanggil ketika sistem obrolan suara diinisialisasi private oninitialized(initialized boolean) { console log("\[voicechat] oninitialized "); this entervoicechatroom(1); } // metode yang dipanggil ketika ruang obrolan suara terhubung private onroomconnected(connected boolean) { console log("\[voicechat] onroomconnected "); } // metode untuk masuk ke ruang obrolan suara berdasarkan indeks tim yang diberikan private entervoicechatroom(teamindex number) { console log("\[voicechat] entervoicechatroom"); // buat objek roomproperty baru dan atur propertinya let roomproperty = new roomproperty(); roomproperty setaudiomode(audiomode omnidirectional); voicechatcontroller enterroom(roomproperty); } // metode yang dipanggil ketika ucapan pengguna terdeteksi atau tidak terdeteksi private onspeechdetected(userid string, speechdetected boolean) { console log("\[voicechat] onspeechdetected " + userid + ", " + speechdetected); // periksa apakah id pengguna tidak ada dalam peta gelembung suara dan buat gelembung suara jika tidak ada if (!this voicebubblemap has(userid)) { this createvoicebubble(userid); } this setvoicebubble(userid, speechdetected); } // metode untuk mengatur status aktif gelembung suara untuk id pengguna tertentu private setvoicebubble(userid string, speechdetected boolean) { const chatbubble = this voicebubblemap get(userid); chatbubble setactive(speechdetected); } // metode untuk membuat gelembung suara untuk id pengguna tertentu private createvoicebubble(userid string) { // dapatkan soket kepala karakter pengguna const headsocket = zepetoplayers instance getplayerwithuserid(userid) character getsocket(knowsockets head upper); // instansiasi prefab gelembung obrolan suara di posisi soket kepala const instancebubble = object instantiate(this voicechatprefab, headsocket) as gameobject; // tambahkan gelembung yang diinstansiasi ke peta gelembung suara this voicebubblemap set(userid, instancebubble); instancebubble setactive(false); } lateupdate() { // periksa apakah peta gelembung suara kosong dan kembali jika kosong if (this voicebubblemap size === 0) { return; } // iterasi melalui peta gelembung suara dan perbarui rotasi setiap objek gelembung gameobject this voicebubblemap foreach((bubbleobject gameobject) => { // atur rotasi objek gelembung agar sesuai dengan rotasi transformasi induk kamera bubbleobject transform rotation = zepetoplayers instance zepetocamera cameraparent transform rotation; }); } } deskripsi kode ketika skrip dijalankan, itu akan mendaftarkan peristiwa pada setiap tombol di fungsi start() dan peristiwa oninitialized, onroomconnected, dan onspeechdetected di voicechatcontroller setelah oninitialized(), tombol voice chat akan ditampilkan di layar pemain ketika mereka memasuki dunia, dan ketika mereka menekan tombol, entervoicechatroom() akan dijalankan untuk masuk ke ruang voice chat setiap kali pemain mengaktifkan voicechat dan berbicara, onspeechdetected() dijalankan, dan jika speechdetected adalah true, objek bubblechat diaktifkan, dan jika false, dinonaktifkan pertama kali fungsi onspeechdetected() diaktifkan, createvoicebubble() akan menginstansiasi gameobject voicechatprefab untuk mengapung di atas kepala pemain dan mendaftarkannya sebagai data peta di voicebubblemap kami menggunakan lateupdate() untuk memperbarui rotasi gelembung obrolan suara setiap frame agar sesuai dengan cameraparent dari dunia zepeto ini memastikan bahwa gambar gelembung ucapan selalu menghadap kamera pertama, memeriksa apakah voicebubblemap kosong, jika tidak, memperbarui rotasi gambar gelembung ucapan prefab 8\) setelah selesai menulis skrip, tetapkan entri voicechatprefab di inspector sebagai prefab gelembung ucapan yang anda buat di langkah 1 9\) jalankan di perangkat mobile melalui kode qr atau tautan uji dan anda harus melihat gambar gelembung ucapan muncul di atas kepala karakter setiap kali pemain menggunakan obrolan suara modulasi suara mulai dengan versi voice chat 0 2 1 preview, anda dapat memodulasi suara voice chat dalam mode skrip https //www youtube com/watch?v=yxfpuqypbqk https //www youtube com/watch?v=yxfpuqypbqk cobalah modifikasi suara menggunakan panduan api dan kode contoh tipesuara (enum) nilai deskripsi tipe00 0 asli tipe01 1 chipmunk tipe02 2 paman tipe03 3 echo tipe04 4 suara dalam tipe05 5 robot tipe06 6 dialek tipe07 7 megafon tipe08 8 binatang tipe09 9 mesin tipe10 10 arus kuat tipe11 11 anak tipe12 12 landak berikut adalah contoh skrip modifikasi suara import { button } from 'unityengine ui'; import { zepetoscriptbehaviour } from 'zepeto script'; import { roomproperty, voicechatcontroller, voicetype } from 'zepeto voice chat'; export default class voicemodulationmanager extends zepetoscriptbehaviour { // tombol untuk mengatur berbagai jenis suara public buttons button\[]; start() { const voicetypes = \[ voicetype type00, voicetype type01, voicetype type05, voicetype type03, ]; for (const \[index, button] of this buttons entries()) { button onclick addlistener(() => { // atur jenis suara yang sesuai dengan indeks tombol yang diklik voicechatcontroller setvoicetype(voicetypes\[index]); }); }; // metode yang dipanggil ketika sistem voice chat diinisialisasi voicechatcontroller oninitializedevent addlistener( init => { voicechatcontroller enterroom(new roomproperty());; } ); // metode yang dipanggil ketika ruang voice chat terhubung voicechatcontroller onroomconnectedevent addlistener( connected => { // atur jenis suara awal dan aktifkan loopback voicechatcontroller setvoicetype(voicetypes\[0]); voicechatcontroller enableloopback(true); } ); } // metode untuk keluar dari ruang voice chat ondestroy() { voicechatcontroller oninitializedevent removealllisteners(); voicechatcontroller onroomconnectedevent removealllisteners(); } } deskripsi kode menambahkan pendengar onclick untuk setiap tombol untuk mengatur jenis modifikasi suara yang berbeda elemen dengan indeks yang sama di dalam tombol array dan jenissuara array dicocokkan setelah memasuki dunia, voicechatcontroller diinisialisasi, dan koneksi ruangan dibuat secara otomatis jenis modifikasi suara awal diatur ke tipe00 , dan loopback diaktifkan untuk mendengar suara anda sendiri perhatikan bahwa untuk pemanggilan setvoicetype dan enableloopback , koneksi ruangan diperlukan oleh karena itu, pengaturan awal ditangani dalam pendengar dari onroomconnectedevent ubah lokasi pemutaran audio pemain lokal anda dapat mengubah lokasi obrolan suara pemain lokal menggunakan voicechatcontroller setlocalplayertransform() menggunakan ini, anda dapat membuat berbagai skenario dengan mengatur lokasi anda ke lokasi ruang atau objek tertentu saat berbicara di obrolan suara 📘 tips transform obrolan suara terhubung dengan transform karakter zepeto pemain lokal oleh karena itu, jika karakter zepeto pemain lokal belum dibuat di dunia, suara anda mungkin tidak ditransmisikan dalam hal ini, anda dapat menggunakan obrolan suara dengan mengatur lokasi pemutaran suara di dalam adegan saat ini menggunakan setlocalplayertransform() api deskripsi public static setlocalplayertransform($transform unityengine transform)\ void fungsi untuk mengubah posisi pemutaran audio pemain lokal ❗️ peringatan setlocalplayertransform() harus dipanggil setelah voicechatcontroller oninitializedevent(true) saat obrolan suara diinisialisasi 1\) di bawah ini adalah contoh skrip untuk fungsi perubahan posisi suara voicetransformsample import { gameobject, transform, vector3 } from 'unityengine'; import { button } from 'unityengine ui'; import { zepetoscriptbehaviour } from 'zepeto script'; import { audiomode, roomproperty, voicechatcontroller } from 'zepeto voice chat'; export default class voicetransformsample extends zepetoscriptbehaviour { // tombol untuk mengatur transformasi suara dekat public buttonclosertransform button; // tombol untuk mengatur transformasi suara jauh public buttonfarthertransform button; // transformasi untuk posisi suara private voicetransform transform; start() { // buat gameobject baru dan tetapkan transformasi untuk menyimpan objek transformasi suara const voicetransformobject = new gameobject; this voicetransform = voicetransformobject transform; // metode yang dipanggil ketika sistem voice chat diinisialisasi voicechatcontroller oninitializedevent addlistener( init => { let roomproperty = new roomproperty(); // atur mode audio ke audio ruang 3d arah roomproperty setaudiomode(audiomode directional); voicechatcontroller enterroom(roomproperty); // atur transformasi suara untuk suara pemain lokal voicechatcontroller setlocalplayertransform(this voicetransform); } ); // atur posisi transformasi suara ke (0,0,0) ketika 'buttonclosetransform' diklik this buttonclosertransform onclick addlistener(()=>{ this voicetransform position = vector3 zero; }) // atur posisi transformasi suara ke titik jauh ketika 'buttonfartransform' diklik this buttonfarthertransform onclick addlistener(()=>{ this voicetransform position = new vector3(0,0, 10); }) } // metode untuk keluar dari ruang voice chat ondestroy() { voicechatcontroller oninitializedevent removealllisteners(); voicechatcontroller onroomconnectedevent removealllisteners(); } } deskripsi kode ketika adegan dimulai, buat objek permainan bernama voicetransformobject di dalam start() fungsi dan daftarkan transform di voicetransform ketika pendengar voice chat oninitialized dipanggil, silakan terapkan pengaturan berikut atur voice chat ke mode audio spasial 3d melalui setaudiomode(audiomode directional) atur posisi voice chat pemain lokal ke voicetransform melalui voicechatcontroller setlocalplayertransform() buttonclosertransform mengatur posisi voicetransform ke asal (0, 0, 0) ketika tombol diklik buttonfarthertransform mengatur posisi voicetransform ke (10, 0, 0) ketika tombol diklik 2\) daftarkan tombol di canvas dalam adegan ke buttonclosertransform dan buttonfarthertransform dari komponen voicetransformsample 3\) jika anda menjalankannya di ponsel anda menggunakan kode qr atau tautan uji, anda dapat memeriksa hal hal berikut ketika anda menekan tombol closer, suara anda akan terdengar lebih dekat dengan orang lain ketika anda menekan tombol farther, suara anda akan terdengar jauh dari orang lain https //www youtube com/watch?v=y pj4rcshts https //www youtube com/watch?v=y pj4rcshts