BUAT DUNIAMU
Berinteraksi dengan Benda-bend...

Menerapkan Kendaraan ke Karakter ZEPETO

20mnt
dengan menerapkan panduan tentang melampirkan objek ke karakter zepeto, anda dapat menerapkan kendaraan seperti mobil, pesawat, hewan peliharaan, dll , seolah olah karakter tersebut sedang mengendarainya 📘 silakan merujuk ke panduan berikut \[ melampirkan objek ke karakter zepeto docid\ jcej5motg0awtsqx cyax ] mengatur animator 1\) buat animator controller dengan pergi ke project > create > animator controller dan ubah namanya menjadi vehiclezepetoanimator 2\) di tab animator, buat state kosong dengan memilih create state > empty 3\) ubah namanya dengan tepat di inspector dan tetapkan klip animasi ke motion untuk menggunakan file klip animasi yang diinginkan, rujuk ke panduan animasi kustom 📘 silakan rujuk ke panduan berikut \[ cara menerapkan animasi kustom docid\ zffqrbohetydztiovulku ] 4\) seret dan jatuhkan vehiclezepetoanimator ke zepetoplayers untuk mengaturnya 👍 tips jika tinggi kamera perlu berubah tergantung pada ukuran kendaraan, anda dapat mengatur nilai camera lookoffset di zepetoplayers contoh kode 1\) buat typescript dengan pergi ke project > create > zepeto > typescript dan ganti namanya menjadi ridevehicle 2\) tulis skrip contoh seperti yang ditunjukkan di bawah ini perhatikan bahwa nilai transform kendaraan dalam contoh ini harus disesuaikan agar sesuai dengan prefab kendaraan saat diterapkan import { zepetoscriptbehaviour } from 'zepeto script'; import { zepetocharacter, zepetoplayers } from 'zepeto character controller'; import { transform, animator, gameobject, humanbodybones, object, vector3, quaternion } from 'unityengine'; export default class ridevehicle extends zepetoscriptbehaviour { public vehicleprefab gameobject; public bodybone humanbodybones; private localcharacter zepetocharacter; private vehicle gameobject; start() { zepetoplayers instance onaddedlocalplayer addlistener(() => { // temukan pemain lokal dan atur ke localcharacter this localcharacter = zepetoplayers instance localplayer zepetoplayer character; // dapatkan komponen animator localcharacter const animator animator = this localcharacter zepetoanimator; // dapatkan posisi tulang untuk melampirkan objek const bone transform = animator getbonetransform(this bodybone); // buat prefab kendaraan this vehicle = object instantiate(this vehicleprefab, bone) as gameobject; // atur transform kendaraan this vehicle transform localposition = new vector3(0 5, 0,0); this vehicle transform localrotation = quaternion euler(0, 0,90); }); } } 3\) setelah menyelesaikan penulisan skrip, tambahkan skrip ke gameobject di scene 4\) di inspector, tetapkan sumber prefab kendaraan dan body bone yang akan dilampirkan 5\) klik tombol play, dan anda akan melihat karakter zepeto mengendarai kendaraan 👍 tips anda dapat membuat berbagai kendaraan hanya dengan mengubah prefab kendaraan dan klip animasi karakter contoh perubahan ukuran saat mengonsumsi item berikut adalah contoh aplikasi yang menyenangkan menerapkan konten di mana ukuran karakter berubah saat mengonsumsi item sambil mengendarai kendaraan 1\) dalam contoh ini, kami menyiapkan dua jenis prefab dan menetapkan tag item yang meningkat ukurannya saat dikonsumsi sebagai "increase" dan item yang menurun ukurannya sebagai "decrease " 2\) tambahkan collider ke setiap item dan pastikan untuk mencentang istrigger 3\) buat typescript dengan pergi ke project > create > zepeto > typescript dan ganti namanya menjadi changeobjectsize 4\) tulis skrip contoh seperti yang ditunjukkan di bawah ini import { collider, gameobject, vector3 } from 'unityengine'; import { zepetoscriptbehaviour } from 'zepeto script'; export default class changeobjectsize extends zepetoscriptbehaviour { public vehicle gameobject; start() { } ontriggerenter(collider collider) { if (collider tag === "increase") { this gameobject transform localscale += new vector3(0 1, 0 1, 0 1); gameobject destroy(collider gameobject); } if (collider tag === "decrease") { const decreaseamount = new vector3(0 1, 0 1, 0 1); const newscale = this gameobject transform localscale decreaseamount; gameobject destroy(collider gameobject); // penanganan pengecualian pastikan bahwa skala tidak menjadi lebih kecil dari (1, 1, 1) if (newscale x >= 1 && newscale y >= 1 && newscale z >= 1) { this gameobject transform localscale = newscale; } } } } bagian kunci dari kode adalah memodifikasi localscale untuk mengubah ukuran karakter zepeto saat menyentuh setiap item silakan sesuaikan angka untuk perubahan ukuran tetapi pastikan untuk menangani pengecualian agar skala tidak menjadi lebih kecil dari (1,1,1) 5\) skrip ini harus ditambahkan ke karakter zepeto yang dibuat saat runtime oleh karena itu, modifikasi skrip ridevehicle yang melampirkan kendaraan sebagai berikut import { zepetoscriptbehaviour } from 'zepeto script'; import { zepetocharacter, zepetoplayers } from 'zepeto character controller'; import { transform, animator, gameobject, humanbodybones, object, vector3, quaternion } from 'unityengine'; import changeobjectsize from ' /changeobjectsize'; export default class ridevehicle extends zepetoscriptbehaviour { public vehicleprefab gameobject; public bodybone humanbodybones; private localcharacter zepetocharacter; private vehicle gameobject; start() { zepetoplayers instance onaddedlocalplayer addlistener(() => { // temukan pemain lokal dan atur ke localcharacter this localcharacter = zepetoplayers instance localplayer zepetoplayer character; // dapatkan komponen animator dari localcharacter const animator animator = this localcharacter zepetoanimator; // dapatkan posisi tulang untuk melampirkan objek const bone transform = animator getbonetransform(this bodybone); // buat prefab kendaraan this vehicle = object instantiate(this vehicleprefab, bone) as gameobject; // atur transform kendaraan this vehicle transform localposition = new vector3(0 5, 0,0); this vehicle transform localrotation = quaternion euler(0, 0,90); // tambahkan skrip ke charactercontroller const sizescript = this localcharacter gameobject addcomponent\<changeobjectsize>(); // tambahkan kendaraan ke inspector skrip sizescript vehicle = this vehicle; }); } } kode untuk menambahkan skrip changeobjectsize saat runtime telah ditambahkan 6\) klik tombol putar, dan anda akan melihat ukuran karakter berubah setiap kali ia mengonsumsi item berinteraksi dengan kendaraan dengan menerapkan panduan interaksi, dimungkinkan untuk melakukan boarding kendaraan di lokasi yang diinginkan setelah berinteraksi dengannya 📘 silakan merujuk ke panduan berikut \[ berinteraksi dengan sebuah objek docid\ mrew1lvi5nj1am gtp3ri ] pengaturan 1\) siapkan objek dockpoint dan prefab ui pada prefab kendaraan anda dengan cara yang sama seperti panduan interaksi 2\) di editor unity, pastikan tombol toggle gizmo transform di bagian atas diatur ke lokal, dan putar sehingga sumbu z (panah biru) mengarah keluar dari objek 3\) tambahkan komponen collider dan centang opsi istrigger 4\) sesuaikan ukuran collider ke jangkauan di mana pemain dapat berinteraksi dengan objek 5\) buat objek kosong sebagai anak dari dockpoint dengan pergi ke hierarchy > buat objek kosong, dan ganti namanya menjadi iconpos 6\) siapkan preficoncanvas dengan cara yang sama seperti panduan interaksi objek, dan kemudian jadikan itu prefab 7\) langkah tambahan buat tombol dismount buat tombol sebagai anak dari objek kendaraan dengan pergi ke hierarchy > ui > button, dan ganti namanya menjadi tombol turun menambahkan animasi naik ke kendaraan ketika karakter naik atau turun dari kendaraan, mereka memerlukan pengaturan animator yang alami untuk disesuaikan panduan di bawah ini akan membantu anda melalui pengaturan animator yang diperlukan untuk naik atau turun rujuk ke panduan tentang menerapkan animasi kustom untuk menambahkan status animasi duduk ke animator kustom anda 📘 silakan rujuk ke panduan berikut \[ cara menerapkan animasi kustom docid\ zffqrbohetydztiovulku ] 1\) klik kanan pada status animasi yang ditambahkan, klik buat transisi untuk membuat transisi dari idle ke sitting dan kembali dari sitting ke idle pilih transisi yang dibuat dan hapus centang opsi has exit time 2\) di animator kustom → parameter → \[ + ], tambahkan kondisi bool dan ganti namanya menjadi isriding 3\) untuk transisi dari status sitting ke idle, klik kondisi → \[ + ] dan tambahkan kondisi isriding dengan opsi diatur ke false 4\) untuk transisi dari status idle ke sitting, klik kondisi → \[ + ] dan tambahkan kondisi isriding dengan opsi diatur ke true skrip tulis skrip interactionicon ts, sama seperti yang ada di panduan interaksi, yang menampilkan ui interaksi saat memasuki area pemicu dari prefab kendaraan tambahkan interactionicon zepetoscript yang ditulis ke objek dockpoint, dan tetapkan pref icon canvas dan posisi ikon di inspector rujuk ke ridevehicleexample di bawah untuk contoh kode tentang cara naik kendaraan setelah berinteraksi dengan ui import { animator, gameobject, humanbodybones, physics, transform, vector3, waitforendofframe } from 'unityengine'; import { zepetoscriptbehaviour } from 'zepeto script'; import { zepetoplayers, zepetocharacter, characterstatemachine } from "zepeto character controller"; import { button } from 'unityengine ui'; import interactionicon from ' /interactionicon'; export default class ridevehicleexample extends zepetoscriptbehaviour { @serializefield() private bodybone humanbodybones; public isriding bool; public getoffbtn button; public vehicleobj gameobject; private interactionicon interactionicon; private localcharacter zepetocharacter; private playersittingposition vector3; private animator animator; private start() { zepetoplayers instance onaddedlocalplayer addlistener(() => { this localcharacter = zepetoplayers instance localplayer zepetoplayer character; this animator = this localcharacter zepetoanimator; }); this interactionicon = this transform getcomponent\<interactionicon>(); this interactionicon onclickevent addlistener(() => { // ketika ikon interaksi diklik, sembunyikan ikon dan lakukan interaksi this interactionicon hideicon(); this dointeraction(); }); // siapkan acara klik untuk getoffbtn (tombol untuk keluar dari kendaraan) this getoffbtn onclick addlistener(() => { if(this isriding) { this stopinteraction(); this interactionicon showicon(); } }); this getoffbtn gameobject setactive(false); } //metode untuk melakukan logika berkendara private dointeraction() { // atur nilai transisi animator untuk mengganti status animasi saat ini ke status duduk this animator setbool("isriding", true); this startcoroutine(this snapbone()); // untuk memperbaiki animasi saat ini, nonaktifkan animator this localcharacter statemachine constraintstateanimation = true; // atur objek kendaraan sebagai induk karakter lokal this vehicleobj transform parent = this localcharacter transform; // aktifkan getoffbutton this getoffbtn gameobject setactive(true); this isriding = true; } private stopinteraction() { // atur nilai transisi animator untuk mengganti status animasi ke idle this animator setbool("isriding", false); // aktifkan animator lagi this localcharacter statemachine constraintstateanimation = false; this isriding = false; // atur objek kendaraan sebagai induk null this vehicleobj transform parent = null; // nonaktifkan getoffbutton this getoffbtn gameobject setactive(false); } // coroutine untuk menjepit tulang ke kendaraan private snapbone() { const animator animator = this localcharacter zepetoanimator; const bone transform = animator getbonetransform(this bodybone); let idx = 0; while (true) { // hitung jarak antara tulang dan posisi karakter const distance = vector3 op subtraction(bone position, this localcharacter transform position); const newpos vector3 = vector3 op subtraction(this transform position, distance); // perbarui posisi duduk pemain dan atur posisi serta rotasi karakter this playersittingposition = newpos; this localcharacter transform position = this playersittingposition; this localcharacter transform rotation = this transform rotation; yield new waitforendofframe(); idx++; // kalibrasi posisi selama 5 frame animasi if (idx > 5) { return; } } } } alur skrip adalah sebagai berikut mulai() ketika ikon diklik, this interactionicon dinonaktifkan, dan fungsi dointeraction() dipanggil dointeraction() atur nilai transisi animator untuk memainkan animasi duduk mulai coroutine snap bone() untuk mengaitkan bodybone karakter zepeto ke targettransform gunakan fungsi this localcharacter statemachine constraintstateanimation = true; untuk menonaktifkan transisi animator saat ini, mengunci animasi yang sedang diputar induk objek kendaraan berubah menjadi karakter zepeto tombol get off di kanan atas diaktifkan stopinteraction() atur nilai transisi animator untuk memainkan animasi idle aktifkan kembali transisi animator sehingga animasi yang sesuai diputar sesuai situasi atur induk objek kendaraan menjadi null nonaktifkan tombol get off this getoffbtn onclick fungsi stopinteraction() dipanggil this interactionicon diaktifkan tambahkan skrip ridevehicleexample yang ditulis ke dockpoint, dan tetapkan tombol get off dan prefab kendaraan di inspector \[▶︎(putar)] tekan tombol putar untuk mencoba menaiki kendaraan layar hasil 👍 tips contoh di atas adalah contoh konten yang tidak dianggap untuk sinkronisasi multiplayer untuk menerapkan sinkronisasi multiplayer, anda perlu menyinkronkan informasi seperti kendaraan mana yang dinaiki setiap pemain, serta ukuran dan lokasi kendaraan, seperti status ruangan