BUAT DUNIAMU
Pemain & Karakter: Lanjutan
Membuat sebuah NPC
36 mnt
pelajari cara membuat npc dari karakter zepeto terapkan skrip contoh yang disediakan untuk setiap fitur untuk menambahkan npc pilihan anda ke dunia anda buat npc menggunakan id zepeto penampilan npc dan barang yang dikenakan akan sama dengan id zepeto yang dimasukkan disarankan untuk menyiapkan karakter zepeto dengan penampilan tertentu sebelum membuat npc mengatur objek lokasi di mana npc akan dibuat terapkan kode pembuatan karakter zepeto di scene anda secara default 📘 silakan merujuk ke panduan berikut \[ membuat karakter zepeto docid 6xbdpw8hvdwop3dxh17ww ] buat hierarki > buat objek kosong dan ganti namanya menjadi npc sebuah objek untuk menyimpan lokasi di mana npc akan dibuat atur posisi, rotasi menulis skrip pembuatan npc 1\) buat proyek > buat > zepeto > typescript dan ganti namanya menjadi npccreator 2\) tulis skrip contoh seperti di bawah ini import { zepetoscriptbehaviour } from 'zepeto script'; import { spawninfo, zepetocharacter, zepetocharactercreator } from 'zepeto character controller'; export default class npccreator extends zepetoscriptbehaviour { // zepeto id dari npc public zepetoid string; // objek karakter npc private npc zepetocharacter; start() { // buat instance baru dari spawninfo dan atur posisinya serta rotasinya berdasarkan transformasi objek const spawninfo = new spawninfo(); spawninfo position = this transform position; spawninfo rotation = this transform rotation; // gunakan zepetocharactercreator untuk membuat karakter baru berdasarkan zepeto id dan menetapkannya ke variabel npc zepetocharactercreator createbyzepetoid(this zepetoid, spawninfo, (character zepetocharacter) => { this npc = character; }) } } alur skrip adalah sebagai berikut start() buat npc di lokasi objek npc menggunakan fungsi zepetocharactercreator createbyzepetoid() dan simpan di npc 3\) setelah anda selesai menulis skrip, tambahkan skrip ke objek npc 4\) tetapkan zepeto id di inspector zepeto id id zepeto dari npc 5\) tekan tombol play untuk mengeksekusi dan npc akan dibuat 6\) tambahkan objek lokasi npc dengan cara yang sama, dan tambahkan skrip npc untuk membuat beberapa npc dengan mudah pelabelan npc anda dapat memberi label pada npc anda dengan label nama untuk membedakannya dari pemain untuk membuat prefab kanvas name tag 1\) buat hierarki > ui > kanvas dan ganti namanya menjadi prefnametagcanvas atur mode render ke world space 2\) buat hierarki > ui > teks sebagai anak dari prefnametagcanvas dan ganti namanya menjadi nametagtext teks untuk mewakili nama tambahkan komponen content size fitter untuk membuat teks dengan ukuran yang tepat 3\) setelah selesai, seret ke jendela proyek untuk menjadikannya prefab, dan kemudian hapus prefnametagcanvas yang masih ada di penyorot membuat skrip nama tag npc 1\) buat proyek > buat > zepeto > typescript dan ganti namanya menjadi npccreatorwithnametag 2\) tulis skrip contoh seperti yang ditunjukkan di bawah ini import { zepetoscriptbehaviour } from 'zepeto script'; import { knowsockets, spawninfo, zepetocharacter, zepetocharactercreator } from 'zepeto character controller'; import { canvas, camera, vector3, object, gameobject } from 'unityengine'; import { text } from 'unityengine ui'; export default class npccreatorwithnametag extends zepetoscriptbehaviour { // zepeto id dari npc public zepetoid string; // nama yang akan ditampilkan di label nama public nametag string; // prefab dari objek game kanvas label nama public nametagprefab gameobject; // nilai offset sumbu y dari objek game kanvas label nama public nametagyoffset number; // objek karakter npc private npc zepetocharacter; // objek game kanvas label nama npc private npcnametagobject gameobject; // teks di dalam objek game kanvas label nama private npcnametagtext text; // kanvas label nama private canvas canvas; // kamera dunia private cachedworldcamera camera; start() { // buat instance baru dari spawninfo dan atur posisinya serta rotasinya berdasarkan transform objek const spawninfo = new spawninfo(); spawninfo position = this transform position; spawninfo rotation = this transform rotation; // gunakan zepetocharactercreator untuk membuat karakter baru berdasarkan zepeto id dan menetapkannya ke variabel npc zepetocharactercreator createbyzepetoid(this zepetoid, spawninfo, (character zepetocharacter) => { this npc = character; // atur label nama this setnametag(); }) } // atur label nama setnametag() { // buat objek game kanvas label nama secara dinamis this npcnametagobject = object instantiate(this nametagprefab) as gameobject; // atur parent dari transform objek game kanvas label nama menjadi transform npc this npcnametagobject transform setparent(this npc transform); // atur posisi objek game kanvas label nama di atas kepala npc this npcnametagobject transform position = vector3 op addition(this npc getsocket(knowsockets head upper) position, new vector3(0, this nametagyoffset,0)); // atur teks di dalam label nama this npcnametagtext = this npcnametagobject getcomponentinchildren\<text>(); this npcnametagtext text = this nametag; this canvas = this npcnametagobject getcomponent\<canvas>(); this cachedworldcamera = object findobjectoftype\<camera>(); this canvas worldcamera = this cachedworldcamera; } private update() { if (this canvas != null) { this updatecanvasrotation(); } } // perbarui rotasi kanvas label nama agar menghadap kamera private updatecanvasrotation() { this canvas transform lookat(this cachedworldcamera transform); this canvas transform rotate(0, 180, 0); } } alur skrip adalah sebagai berikut mulai() panggil fungsi kustom setnametag() setnametag() secara dinamis menghasilkan label nama untuk npc dan menyesuaikan posisi label nama yang dihasilkan di atas kepala npc atur teks di dalam label nama perbarui() panggil fungsi kustom updatecanvasrotation() untuk memutar kanvas agar sesuai dengan kamera 3\) setelah anda selesai menulis skrip, tambahkan ke objek npc 4\) di inspector, tetapkan zepeto id, label nama, prefab label nama, dan offset y label nama label nama nama yang akan muncul di label nama npc prefab label nama prefab kanvas label nama offset y label nama variabel yang menyimpan nilai offset sumbu y untuk objek kanvas label nama ketika anda menempatkan label nama di atas kepala karakter, anda dapat menyesuaikan jarak antara karakter dan label nama 5\) tekan tombol putar untuk mengeksekusi, dan npc dengan nama tag akan dibuat mengendalikan perilaku npc anda dapat mengendalikan tindakan npc melompat gunakan zepeto character api untuk membuat npc melompat anda dapat menggunakan zepeto character api untuk menerapkan berbagai perilaku 📘 silakan merujuk ke panduan berikut \[ karakter zepeto docid\ xz6zljtc hierlbbdaort ] membuat skrip npc jump 1\) pergi ke proyek > buat > zepeto > buat typescript dan ganti namanya menjadi npcjump 2\) tulis skrip contoh seperti yang ditunjukkan di bawah ini import { zepetoscriptbehaviour } from 'zepeto script'; import { spawninfo, zepetocharacter, zepetocharactercreator } from 'zepeto character controller'; import { waitforseconds } from 'unityengine'; export default class npcjump extends zepetoscriptbehaviour { // id zepeto dari npc public zepetoid string; // objek karakter npc private npc zepetocharacter; start() { // buat instance baru dari spawninfo dan atur posisinya serta rotasinya berdasarkan transformasi objek const spawninfo = new spawninfo(); spawninfo position = this transform position; spawninfo rotation = this transform rotation; // gunakan zepetocharactercreator untuk membuat karakter baru berdasarkan id zepeto dan menetapkannya ke variabel npc zepetocharactercreator createbyzepetoid(this zepetoid, spawninfo, (character zepetocharacter) => { this npc = character; this startcoroutine(this jumpcoroutine()); }); } jumpcoroutine() { // loop tak terbatas untuk terus menerus while (true) { // panggil metode jump() dari zepetocharacter untuk membuatnya melompat this npc jump(); // tunggu selama 5 detik yield new waitforseconds(5); } } } alur skrip adalah sebagai berikut mulai() panggil coroutine jumpcoroutine() jumpcoroutine() panggil metode jump() untuk membuat karakter npc melompat setiap 5 detik 3\) setelah anda selesai menulis skrip, tambahkan skrip ke objek npc 4\) tekan tombol putar dan npc akan melompat gerakan gunakan animator controller untuk menerapkan gerakan untuk npc anda dapat menggunakan animator controller untuk menerapkan berbagai perilaku yang lebih luas 📘 unity animator controller https //docs unity3d com/manual/class animatorcontroller html https //docs unity3d com/manual/class animatorcontroller html mempersiapkan klip animasi anda gunakan panduan berikut untuk mempersiapkan klip animasi gerakan untuk npc anda lakukan 📘 silakan merujuk ke panduan berikut \[ apakah akan menggunakan animasi karakter zepeto docid\ stbved w7fituvnr hcle ] \[ cara menerapkan animasi kustom docid\ zffqrbohetydztiovulku ] membuat animator 1\) proyek > buat > buat pengontrol animator dan ganti namanya menjadi npcanimatorcontroller 2\) di tab animator, buat status > kosong 3\) di inspector, ganti namanya dengan tepat dan tetapkan klip animasi ke motion membuat skrip gesture npc 1\) buat proyek > buat > zepeto > typescript dan ganti namanya menjadi npcgesture 2\) tulis skrip contoh seperti yang ditunjukkan di bawah ini import { zepetoscriptbehaviour } from 'zepeto script'; import { spawninfo, zepetocharacter, zepetocharactercreator } from 'zepeto character controller'; import { animator, runtimeanimatorcontroller } from 'unityengine'; export default class npcgesture extends zepetoscriptbehaviour { // id zepeto dari npc public zepetoid string; // animator controller dari npc public npcanimator runtimeanimatorcontroller; // objek karakter npc private npc zepetocharacter; start() { // buat instance baru dari spawninfo dan atur posisinya serta rotasinya berdasarkan transformasi objek const spawninfo = new spawninfo(); spawninfo position = this transform position; spawninfo rotation = this transform rotation; // gunakan zepetocharactercreator untuk membuat karakter baru berdasarkan id zepeto dan menetapkannya ke variabel npc zepetocharactercreator createbyzepetoid(this zepetoid, spawninfo, (character zepetocharacter) => { this npc = character; // dapatkan komponen animator dari karakter npc dan atur runtimeanimatorcontroller nya ke npcanimator this npc getcomponentinchildren\<animator>() runtimeanimatorcontroller = this npcanimator; }); } } alur skrip adalah sebagai berikut start() dapatkan komponen animator dari objek npc dan atur ke animator controller yang ditentukan oleh variabel npcanimator 3\) setelah anda selesai menulis skrip, tambahkan ke objek lokasi di mana npc akan dibuat 4\) di inspector, tetapkan id zepeto, animator npc animator npc pengontrol animasi npc 5\) tekan tombol play untuk menjalankannya dan anda akan melihat npc membuat gerakan 6\) anda dapat menerapkan ini untuk membuat npc yang melakukan lebih banyak tindakan selain gerakan dan lompatan kata kata di atas npc anda dapat membuat kanvas di atas kepala npc, menampilkan gambar atau teks, dan membuatnya berbuih membuat prefab kanvas kata kata 1\) buat hierarchy> ui > canvas dan ganti namanya menjadi prefspeechbubblecanvas atur mode render ke world space 2\) buat hierarchy> ui > gambar sebagai anak dari prefspeechbubblecanvas dan ganti namanya menjadi speechbubbleimage ini adalah gambar yang akan menjadi latar belakang gelembung ucapan 3\) buat hierarki> ui > teks sebagai anak dari speeachbubbleimage dan ganti namanya menjadi speeachbubbletext ini adalah teks di dalam gelembung ucapan tambahkan komponen content size fitter untuk membuat teks dengan ukuran yang tepat 4\) setelah selesai, seret ke jendela proyek untuk menjadikannya prefab, dan kemudian hapus prefspeechbubblecanvas yang masih ada di sorotan membuat skrip gelembung ucapan npc 1\) buat proyek > buat > zepeto > typescript dan ganti namanya menjadi npcspeechbubble 2\) tulis skrip contoh seperti yang ditunjukkan di bawah ini import { zepetoscriptbehaviour } from 'zepeto script'; import { knowsockets, spawninfo, zepetocharacter, zepetocharactercreator } from 'zepeto character controller'; import { canvas, camera, vector3, object, gameobject } from 'unityengine'; import { text } from 'unityengine ui'; export default class npcspeechbubble extends zepetoscriptbehaviour { // id zepeto dari npc public zepetoid string; // konten dialog yang akan ditampilkan di gelembung bicara public speechbubbletext string; // prefab dari objek game kanvas gelembung bicara public speechbubbleprefab gameobject; // nilai offset sumbu y dari objek game kanvas gelembung bicara public speechbubbleyoffset number; // objek karakter npc private npc zepetocharacter; // objek game kanvas gelembung bicara private speechbubbleobject gameobject; // teks di dalam objek game kanvas gelembung bicara private speechbubbletext text; // kanvas gelembung bicara private canvas canvas; // kamera dunia private cachedworldcamera camera; start() { // buat instance baru dari spawninfo dan atur posisinya serta rotasinya berdasarkan transformasi objek const spawninfo = new spawninfo(); spawninfo position = this transform position; spawninfo rotation = this transform rotation; // gunakan zepetocharactercreator untuk membuat karakter baru berdasarkan id zepeto dan menetapkannya ke variabel npc zepetocharactercreator createbyzepetoid(this zepetoid, spawninfo, (character zepetocharacter) => { this npc = character; // atur gelembung bicara this setbubble(); }) } // atur gelembung bicara setbubble() { // buat objek game kanvas gelembung bicara secara dinamis this speechbubbleobject = object instantiate(this speechbubbleprefab) as gameobject; // atur orang tua dari transformasi objek game kanvas gelembung bicara menjadi transformasi npc this speechbubbleobject transform setparent(this npc transform); // atur posisi objek game kanvas gelembung bicara di atas kepala npc this speechbubbleobject transform position = vector3 op addition(this npc getsocket(knowsockets head upper) position, new vector3(0, this speechbubbleyoffset,0)); // atur teks di dalam gelembung bicara this speechbubbletext = this speechbubbleobject getcomponentinchildren\<text>(); this setbubbletext(this speechbubbletext); this canvas = this speechbubbleobject getcomponent\<canvas>(); this cachedworldcamera = object findobjectoftype\<camera>(); this canvas worldcamera = this cachedworldcamera; } // buka kanvas gelembung bicara dan atur teks setbubbletext(bubbletext string) { this speechbubbleobject setactive(true); this speechbubbletext text = bubbletext; } private update() { if (this canvas != null) { this updatecanvasrotation(); } } // perbarui rotasi kanvas gelembung bicara agar menghadap kamera private updatecanvasrotation() { this canvas transform lookat(this cachedworldcamera transform); this canvas transform rotate(0, 180, 0); } } alur skrip adalah sebagai berikut mulai() panggil fungsi kustom setbubble() setbubble() buat kanvas gelembung bicara (speechbubbleprefab) dan posisikan gelembung bicara yang dibuat di atas kepala npc panggil fungsi kustom setbubbletext() untuk mengatur teks di dalam gelembung bicara setbubbletext() mengaktifkan kanvas gelembung bicara npc ( speechbubbleobject) menampilkan string yang diberikan sebagai parameter (bubbletext) di dalam gelembung bicara perbarui() panggil fungsi kustom updatecanvasrotation() untuk memutar kanvas agar sesuai dengan kamera 3\) setelah anda selesai menulis skrip, tambahkan ke objek lokasi di mana npc akan dibuat 4\) di inspector, tetapkan zepeto id, teks balon bicara, prefab balon bicara, dan offset y balon bicara teks balon bicara variabel ini menyimpan dialog yang akan diucapkan karakter npc dalam balon bicara dalam contoh kami, kami menyimpan dialog berikut "halo dunia" prefab balon bicara variabel ini menyimpan prefab untuk gameobject kanvas balon bicara offset y balon bicara variabel ini menyimpan nilai offset sumbu y untuk gameobject kanvas balon bicara ini memungkinkan anda untuk menyesuaikan jarak antara karakter dan balon bicara saat anda menempatkan balon bicara di atas kepala karakter 5\) tekan tombol play untuk mengeksekusi, dan anda akan melihat balon bicara mengapung di atas kepala npc berinteraksi dengan npc anda dapat menerapkan banyak konten menyenangkan dengan berinteraksi dengan npc dalam panduan ini, kami akan menggunakan contoh untuk menerapkan gelembung ucapan yang berubah saat npc didekati mengatur collider 1\) tambahkan komponen collider ke objek anda untuk berinteraksi dengan npc dan periksa istrigger 2\) ubah ukuran collider agar pemain dapat berinteraksi dengan npc membuat skrip interaksi npc 1\) buat proyek > buat > zepeto > typescript dan ganti namanya menjadi npcinteraction 2\) tulis skrip contoh seperti yang ditunjukkan di bawah ini import { zepetoscriptbehaviour } from 'zepeto script'; import { knowsockets, spawninfo, zepetocharacter, zepetocharactercreator, zepetoplayers } from 'zepeto character controller'; import { canvas, camera, vector3, object, gameobject, collider } from 'unityengine'; import { text } from 'unityengine ui'; export default class npcinteraction extends zepetoscriptbehaviour { // id zepeto dari npc public zepetoid string; // konten dialog yang akan ditampilkan di gelembung bicara public speechbubbletext string; public changedspeechbubbletext string; // prefab dari objek game kanvas gelembung bicara public speechbubbleprefab gameobject; // nilai offset sumbu y dari objek game kanvas gelembung bicara public speechbubbleyoffset number; // objek karakter lokal private zepetocharacter zepetocharacter; // objek karakter npc private npc zepetocharacter; // objek game kanvas gelembung bicara private speechbubbleobject gameobject; // teks di dalam objek game kanvas gelembung bicara private speechbubbletext text; // kanvas gelembung bicara private canvas canvas; // kamera dunia private cachedworldcamera camera; start() { // buat instance baru dari spawninfo dan atur posisinya serta rotasinya berdasarkan transform objek const spawninfo = new spawninfo(); spawninfo position = this transform position; spawninfo rotation = this transform rotation; // gunakan zepetocharactercreator untuk membuat karakter baru berdasarkan id zepeto dan menetapkannya ke variabel npc zepetocharactercreator createbyzepetoid(this zepetoid, spawninfo, (character zepetocharacter) => { this npc = character; // atur gelembung bicara this setbubble(); }) zepetoplayers instance onaddedlocalplayer addlistener(() => { this zepetocharacter = zepetoplayers instance localplayer zepetoplayer character; }); } // periksa apakah karakter pemain memasuki collider ontriggerenter(collider collider) { if (this zepetocharacter == null || collider gameobject != this zepetocharacter gameobject) { return; } this setbubbletext(this changedspeechbubbletext); } ontriggerexit(collider collider) { if (this zepetocharacter == null || collider gameobject != this zepetocharacter gameobject) { return; } this setbubbletext(this speechbubbletext); } // atur gelembung bicara setbubble() { // buat objek game kanvas gelembung bicara secara dinamis this speechbubbleobject = object instantiate(this speechbubbleprefab) as gameobject; // atur parent dari transform objek game kanvas gelembung bicara menjadi transform npc this speechbubbleobject transform setparent(this npc transform); // atur posisi objek game kanvas gelembung bicara di atas kepala npc this speechbubbleobject transform position = vector3 op addition(this npc getsocket(knowsockets head upper) position, new vector3(0, this speechbubbleyoffset,0)); // atur teks di dalam gelembung bicara this speechbubbletext = this speechbubbleobject getcomponentinchildren\<text>(); this setbubbletext(this speechbubbletext); this canvas = this speechbubbleobject getcomponent\<canvas>(); this cachedworldcamera = object findobjectoftype\<camera>(); this canvas worldcamera = this cachedworldcamera; } // buka kanvas gelembung bicara dan atur teks setbubbletext(bubbletext string) { this speechbubbleobject setactive(true); this speechbubbletext text = bubbletext; } private update() { if (this canvas != null) { this updatecanvasrotation(); } } // perbarui rotasi kanvas gelembung bicara agar menghadap kamera private updatecanvasrotation() { this canvas transform lookat(this cachedworldcamera transform); this canvas transform rotate(0, 180, 0); } } alur skrip adalah sebagai berikut ontriggerenter(), ontriggerexit() ketika pemicu terdeteksi dengan memasuki area collider, panggil fungsi kustom setbubbletext() untuk mengatur teks di dalam gelembung bicara menjadi changedspeechbubbletext ketika meninggalkan area collider, panggil fungsi kustom setbubbletext() untuk mengatur teks di dalam gelembung bicara menjadi speechbubbletext 3\) setelah anda selesai menulis skrip, tambahkan ke objek lokasi di mana npc akan dibuat 4\) di inspector, tetapkan zepeto id, teks gelembung bicara, prefab gelembung bicara, offset y gelembung bicara, dan gelembung bicara yang diubah teks gelembung bicara variabel ini menyimpan dialog yang akan diucapkan karakter npc di dalam gelembung bicara dalam contoh kami, kami menyimpan dialog berikut "halo dunia" prefab gelembung bicara variabel ini menyimpan prefab untuk gameobject kanvas gelembung bicara offset y gelembung bicara variabel ini menyimpan nilai offset sumbu y untuk gameobject kanvas gelembung bicara ini memungkinkan anda untuk menyesuaikan jarak antara karakter dan gelembung bicara saat menempatkan gelembung bicara di atas kepala karakter gelembung bicara yang diubah menyimpan dialog yang akan ditampilkan di gelembung bicara npc ketika pemain memasuki collider npc 5\) tekan play untuk mengeksekusi, dan ketika pemain mendekati npc, teks di gelembung bicara akan berubah terapkan interaksi npc untuk membuat format dialog, buat ui menggunakan panel berikut adalah contoh dialog sederhana yang terdiri dari panel dan tombol ini adalah contoh skrip yang membuka dialog saat berinteraksi dengan npc dan memprosesnya saat setiap tombol ditekan terapkan ini untuk menerapkan konten yang menarik import { gameobject, humanbodybones, object, collider } from 'unityengine'; import { zepetoscriptbehaviour } from 'zepeto script'; import { button } from 'unityengine ui'; import { zepetocharacter, zepetoplayers } from "zepeto character controller"; export default class npcdialoginteraction extends zepetoscriptbehaviour { public npcdialogcanvas gameobject; public yesbutton button; public nobutton button; private zepetocharacter zepetocharacter; start() { zepetoplayers instance onaddedlocalplayer addlistener(()=>{ this zepetocharacter = zepetoplayers instance localplayer zepetoplayer character; }); // dialog pilih ya this yesbutton onclick addlistener(() => { console log("ya") this npcdialogcanvas setactive(false); }); // dialog pilih tidak this nobutton onclick addlistener(() => { console log("tidak") this npcdialogcanvas setactive(false); }); } // periksa jika karakter pemain memasuki collider ontriggerenter(collider collider) { if (this zepetocharacter == null || collider gameobject != this zepetocharacter gameobject) { return; } this npcdialogcanvas setactive(true); } ontriggerexit(collider collider) { if (this zepetocharacter == null || collider gameobject != this zepetocharacter gameobject) { return; } this npcdialogcanvas setactive(false); } }