สร้างโลกของคุณเอง
ผู้เล่นและตัวละคร: ข้อมูลเบื้อ...
ตัวละคร ZEPETO
16min
zepetocharacter เป็นหน่วยพื้นฐานของตัวละคร zepeto สำหรับโหลดใน world scene ในการควบคุม zepetocharacter ให้เพิ่มคำสั่งนำเข้าต่อไปนี้ในสคริปต์ import { zepetocharacter } from 'zepeto character controller'; zepetocharacter api api นี้สร้างและลบตัวละคร zepeto รวมถึงคอนโทรลเลอร์อนิเมเตอร์และคอนโทรลเลอร์ตัวละคร api คำอธิบาย createbyzepetoid(zepetoid string, spawninfo spawninfo, complete system action$1) ใช้ zepeto id เพื่อสร้างตัวละคร zepeto โดยหลักแล้วใช้สำหรับการสร้างตัวละคร npc createbyuserid(userid string, spawninfo spawninfo, complete system action$1) สร้างตัวละคร zepeto โดยใช้ userid โดยหลักแล้วใช้สำหรับการสร้างตัวละคร npc removecharacter(character zepetocharacter) ลบตัวละครออกจากอินสแตนซ์ api นี้สร้างอินสแตนซ์โมเดลตัวละคร zepeto โดยไม่รวมคอนโทรลเลอร์อนิเมเตอร์และคอนโทรลเลอร์ตัวละคร zepeto id นี่คือค่ารหัสที่ผู้ใช้ระบุโดยตรงและใช้ภายในแอป zepeto user id นี่คือค่ารหัสที่ไม่ซ้ำกันซึ่งแยกแยะผู้ใช้ภายในระบบ zepeto และไม่ใช่ค่าที่แสดงบน ui คุณสามารถตรวจสอบได้โดยใช้สคริปต์ หากคุณสนใจใน zepetocharacter api โปรดดูเอกสาร โปรดดูคู่มือต่อไปนี้ \[ zepeto character controller api https //developer zepeto me/docs/character controller/ ] สร้าง/ลบตัวละคร import { zepetoscriptbehaviour } from 'zepeto script'; import { spawninfo, zepetocharacter, zepetocharactercreator } from 'zepeto character controller'; import { button } from 'unityengine ui'; import { gameobject, object, vector3 } from 'unityengine'; import { worldservice } from 'zepeto world'; export default class samplescript extends zepetoscriptbehaviour { public zepetoid string; public removeclonecharacterbutton button; public removeclonecharactermodelbutton button; private clonecharacter zepetocharacter; private clonecharactermodel gameobject; start() { // สร้างอินสแตนซ์ใหม่ของคลาส spawninfo const firstclonespawninfo = new spawninfo(); firstclonespawninfo position = new vector3(0,0,1); const secondclonespawninfo = new spawninfo(); secondclonespawninfo position = new vector3(0,0,3); // สร้าง `zepetocharacter` โดยใช้ zepetoid zepetocharactercreator createbyzepetoid(this zepetoid, firstclonespawninfo, (character zepetocharacter) => { this clonecharacter = character; }); // สร้าง `zepetocharactermodel` โดยใช้ zepetoid zepetocharactercreator createmodelbyzepetoid(this zepetoid, secondclonespawninfo, (object) => { this clonecharactermodel = object; }); // สร้าง `zepetocharacter` โดยใช้ userid / zepetocharactercreator createbyuserid(worldservice userid, new spawninfo(), (character zepetocharacter) => { this clonecharacter = character; }) // สร้าง `zepetocharactermodel` โดยใช้ userid zepetocharactercreator createmodelbyuserid(worldservice userid, new spawninfo(), (object) => { this clonecharactermodel = object; }) / // ตั้งค่ากิจกรรมคลิกสำหรับ `removeclonecharacterbutton` เพื่อลบตัวละครโคลน this removeclonecharacterbutton onclick addlistener(() => { zepetocharactercreator removecharacter(this clonecharacter); }); // ตั้งค่ากิจกรรมคลิกสำหรับ `removeclonecharactermodelbutton` เพื่อลบโมเดลตัวละครโคลน this removeclonecharactermodelbutton onclick addlistener(() => { object destroy(this clonecharactermodel); }); } } ถ้าคุณรันตัวอย่าง คุณจะเห็นว่า charactermodel ทางซ้ายถูกสร้างขึ้นโดยไม่มี animator controller และ character controller ตามที่แสดงด้านล่าง ควบคุมตัวละคร จะมีอินเทอร์เฟซที่คุณสามารถควบคุมตัวละครได้โดยตรงผ่านสคริปต์จากตัวละครในฉาก api คำอธิบาย movetoposition(position vector3) ย้ายตัวละครไปยังตำแหน่งที่กำหนด movecontinuously(direction vector3) เคลื่อนที่อย่างต่อเนื่อง (อัปเดต) ในทิศทางที่ตัวละครมองไป movecontinuously(direction vector2) เคลื่อนที่อย่างต่อเนื่อง (อัปเดต) ในทิศทางที่ตัวละครมองไป stopmoving() หยุดการเคลื่อนที่ของตัวละคร jump() ตัวละครกระโดดไปยังพลังการกระโดดที่ตั้งไว้ doublejump() ตัวละครกระโดดสองครั้งด้วยพลังการกระโดดสองครั้งที่ตั้งไว้ (ใช้ได้เฉพาะเมื่อใช้ motioncontroller v2) teleport(position unityengine vector3, rotation unityengine quaternion) ตัวละครเคลื่อนที่ไปยัง transform ทันที setgesture(gesture unityengine animationclip) สำหรับ animationclip ที่กำหนด การเคลื่อนไหวของตัวละครจะถูกเล่น ในขณะที่ setgesture กำลังทำงาน การควบคุมของผู้ใช้จะไม่ถูกนำไปใช้กับตัวละคร เมื่อเปิดตัวเลือก loop ของ animationclip มันจะเล่นต่อไปจนกว่าจะเรียก cancelgesture() cancelgesture() หยุดการเล่น animation clip ที่กำลังเล่นอยู่ผ่าน setgesture() เมื่อ cancelgesture() ถูกเรียก การควบคุมของผู้ใช้จะถูกนำไปใช้กับการควบคุมตัวละครอีกครั้ง ตัวอย่างโค้ดตัวควบคุมอักขระ import { zepetoscriptbehaviour } from 'zepeto script' import {spawninfo, zepetocharacter, zepetocharactercreator} from "zepeto character controller"; import { worldservice } from 'zepeto world'; import {animationclip, vector3, waitforseconds } from 'unityengine'; export default class characteractionsample extends zepetoscriptbehaviour { public targetposition vector3; public dancegesture animationclip; private clonecharacter zepetocharacter; start() { // สร้าง `zepetocharacter` โดยใช้ `zepetocharactercreator createbyuserid` zepetocharactercreator createbyuserid(worldservice userid, new spawninfo(), (character zepetocharacter) => { // กำหนดตัวละครที่สร้างขึ้นให้กับ ` clonecharacter` this clonecharacter = character; // เรียกใช้ `actioncoroutine()` เป็น coroutine this startcoroutine(this actioncoroutine()); }) } actioncoroutine() { yield new waitforseconds(3); // ย้าย ` clonecharacter` ไปยัง `targetposition` หลังจากรอ 3 วินาที this clonecharacter movetoposition(this targetposition); yield new waitforseconds(1); // ให้ ` clonecharacter` กระโดดหลังจากรอ 1 วินาที this clonecharacter jump(); yield new waitforseconds(1); // ตั้งท่าทางของ ` clonecharacter` เป็น `dancegesture` หลังจากรอ 1 วินาที this clonecharacter setgesture(this dancegesture); yield new waitforseconds(3); // ยกเลิกท่าทางของ ` clonecharacter` หลังจากรอ 3 วินาที this clonecharacter cancelgesture(); } } หากคุณรันตัวอย่าง คุณจะเห็นว่าตัวละครที่ถูกโคลนทำการกระทำที่กำหนดไว้ตามลำดับดังนี้ 📘 กรุณาอ้างอิงจากคู่มือต่อไปนี้ \[ การสร้าง npc docid\ lrmorqd2dxrah6w7v3j c ] สถานะการเคลื่อนไหว api ที่เกี่ยวข้องกับสถานะการเคลื่อนไหวของตัวละคร zepeto มีดังนี้ api คำอธิบาย motionstate usedoublejump = (boolean); ตั้งค่าว่าตัวละครสามารถใช้ doublejump ได้หรือไม่ motionstate doublejumppower = (number); ตั้งค่าพลัง doublejump ของตัวละคร motionstate uselandingroll = (boolean); ตั้งค่าว่าจะใช้ landingroll ของตัวละครหรือไม่ motionstate landingrollspeed = (number); ตั้งค่าความเร็วของ landingroll ของตัวละคร motionstate usemoveturn = (boolean); ตั้งค่าว่าจะใช้ moveturn สำหรับตัวละครหรือไม่ motionstate gravity = (number); ตั้งค่าค่าความโน้มถ่วงของตัวละคร motionstate currentjumpstate คุณสามารถตรวจสอบสถานะการกระโดดปัจจุบันของตัวละครได้ \ ไม่มี = 1, jumpidle = 0, jumpmove = 1, jumpdash = 2, jumpdouble = 3 motionstate currentlandingstate คุณสามารถตรวจสอบสถานะการลงจอดปัจจุบันของตัวละครได้ \ ไม่มี = 1, landingslight = 0, landingdeep = 1, landingroll = 2 motionstate currentmovestate คุณสามารถตรวจสอบสถานะการเคลื่อนไหวปัจจุบันของตัวละครได้ \ ไม่มี = 1, movewalk = 0, moverun = 1 ตัวอย่างโค้ดสถานะการเคลื่อนไหว import { zepetoscriptbehaviour } from 'zepeto script' import { custommotiondata, spawninfo, zepetocharacter, zepetocharactercreator, zepetoplayer, localplayer, zepetoplayers } from "zepeto character controller"; import { worldservice } from 'zepeto world'; import { button } from 'unityengine ui'; export default class motionsample extends zepetoscriptbehaviour { public jumpbutton button; private clonecharacter zepetocharacter; start() { zepetocharactercreator createbyuserid(worldservice userid, new spawninfo(), (character zepetocharacter) => { // กำหนดตัวละครที่สร้างขึ้นให้กับ ` clonecharacter` this clonecharacter = character; // ตั้งค่าคุณสมบัติต่างๆ ของ `motionstate` ใน ` clonecharacter` this clonecharacter motionstate usedoublejump = true; this clonecharacter motionstate usedoublejump = true; this clonecharacter motionstate uselandingroll = true; this clonecharacter motionstate usemoveturn = true; this clonecharacter motionstate gravity = 1; }) this jumpbutton onclick addlistener(() => { this clonecharacter jump(); }); } update() { // ตรวจสอบว่า ` clonecharacter` ไม่เป็น null if (this clonecharacter != null) { // พิมพ์สถานะการกระโดดปัจจุบันของ `motionstate` ใน ` clonecharacter` console log(`สถานะการกระโดดปัจจุบัน ${this clonecharacter motionstate currentjumpstate}`); // พิมพ์สถานะการลงจอดปัจจุบันของ `motionstate` ใน ` clonecharacter` console log(`สถานะการลงจอดปัจจุบัน ${this clonecharacter motionstate currentlandingstate}`); // พิมพ์สถานะการเคลื่อนไหวปัจจุบันของ `motionstate` ใน ` clonecharacter` console log(`สถานะการเคลื่อนไหวปัจจุบัน ${this clonecharacter motionstate currentmovestate}`); } } } การควบคุมแอนิเมเตอร์ตัวละคร zepeto api สำหรับควบคุมแอนิเมเตอร์ตัวละคร zepeto api คำอธิบาย statemachine constraintstateanimation เริ่มตั้งแต่เวอร์ชัน 1 6 0 ของ zepeto world การเปลี่ยนแปลงของ animation ที่เล่นใน characterstatemachine สามารถเปิด/ปิดได้ตาม characterstate ของ motion v2 \ true ปิด zepetocharacter currentstate ซึ่งได้รับผลกระทบจากการป้อนข้อมูลของตัวควบคุม และควบคุมคลิปอนิเมชันที่ต้องการ 👍 ตัวอย่างการใช้ constraintstateanimation คุณต้องการให้ตัวละครของคุณใช้อนิเมชันการว่ายน้ำแทนการเดิน คุณสามารถใช้คลิปอนิเมชันการว่ายน้ำกับ state ใหม่และแก้ไข state ผ่าน constraintstateanimation หากคุณต้องการใช้อนิเมชันท่าทางขณะเคลื่อนที่ตัวละคร คุณสามารถใช้คลิปอนิเมชันท่าทางกับ state ใหม่และเคลื่อนที่ตัวละครด้วย state ที่แก้ไขโดยใช้ constraintstateanimation สิ่งนี้สามารถใช้ได้เมื่อคุณต้องการเล่นอนิเมชันเฉพาะขณะละเลยค่าพารามิเตอร์ที่ใช้กับ animator state ชั่วคราว zepetoanimator ฟังก์ชัน animator ของ unityengine มีให้ใช้งานในรูปแบบของ zepetoanimator ตัวอย่างเช่น หากคุณต้องการตั้งค่า integer สำหรับพารามิเตอร์ "state" ของ character animator เฉพาะ คุณสามารถใช้ zepetoanimator setinteger("state", 1); สำหรับการใช้งานที่ละเอียดมากขึ้น โปรดดูเอกสารของ unityengine animator และสคริปต์ตัวอย่างด้านล่าง 📘 unityengine animator https //docs unity3d com/scriptreference/animator html https //docs unity3d com/scriptreference/animator html ตัวอย่างโค้ดสำหรับควบคุม zepeto character animator ตัวอย่างการควบคุม animator ของตัวละคร zepeto ที่เล่นโดยผู้เล่น import { toggle } from 'unityengine ui'; import { spawninfo, zepetocharacter, zepetoplayers } from 'zepeto character controller'; import { zepetoscriptbehaviour } from 'zepeto script' import { worldservice } from 'zepeto world'; import { animator } from "unityengine"; export default class samplescript extends zepetoscriptbehaviour { public testtogle toggle; private zepetocharacter zepetocharacter; start() { // local player creation code (please delete this section if you are already using local player creation code elsewhere) zepetoplayers instance createplayerwithuserid(worldservice userid, new spawninfo(), true); // code for setting the created local player as a zepeto character zepetoplayers instance onaddedlocalplayer addlistener(() => { this zepetocharacter = zepetoplayers instance localplayer zepetoplayer character; // setinteger example const statetype = animator stringtohash("state"); this zepetocharacter zepetoanimator setinteger(statetype, 30); // statemachine constraintstateanimation this testtogle onvaluechanged addlistener((isactive bool)=>{ this zepetocharacter statemachine constraintstateanimation = isactive; console log(isactive); }); }); } } ถ้าคุณรันตัวอย่าง คุณจะเห็นว่าเมื่อค่าของ statemachine constraintstateanimation เป็น true การเปลี่ยนแปลงของ animation ที่เล่นใน characterstatemachine จะเป็น off ถ้าคุณตั้งค่าของ statemachine constraintstateanimation เป็น false มันจะกลับไปสู่สถานะเดิม การควบคุม charactershadow เริ่มตั้งแต่เวอร์ชัน 1 11 3 ของ zepeto charactercontroller package ได้มีการเพิ่มอินเตอร์เฟซเพื่อเข้าถึงวัตถุ zepetocharacter shadow ข้อกำหนด api ส่วนติดต่อของคอมโพเนนต์ charactershadow class charactershadow extends unityengine monobehaviour { public target unityengine transform; public autosynctransform boolean; } เป้าหมาย แสดงถึงวัตถุที่ทำหน้าที่เป็นการอ้างอิงสำหรับการปรับเปลี่ยนการแปลงของวัตถุ charactershadow \ โดยค่าเริ่มต้น ตัวละคร zepeto จะถูกตั้งเป็นเป้าหมาย การแปลงของวัตถุ charactershadow จะถูกปรับตามด้านล่างของตัวละครที่ระบุ autosynctransform ค่าธงที่กำหนดว่าจะแก้ไขตำแหน่งของเงาหรือไม่ \ ค่าเริ่มต้นคือ true ด้วยสิ่งนี้ คุณสามารถควบคุมเงาของตัวละคร zepeto ในระหว่างการทำงานได้ ด้านล่างนี้คือตัวอย่างโค้ดที่ใช้สวิตช์เพื่อเปิดและปิดเงา import { zepetoscriptbehaviour } from 'zepeto script' import { zepetocharacter, charactershadow, zepetoplayer, zepetoplayers } from 'zepeto character controller'; import { toggle } from 'unityengine ui'; export default class shadowcontroller extends zepetoscriptbehaviour { public shadowtoggle toggle; private charactershadow charactershadow; private localcharacter zepetocharacter; start() { zepetoplayers instance onaddedlocalplayer addlistener(() => { this localcharacter = zepetoplayers instance localplayer zepetoplayer character; this charactershadow = this localcharacter context getcomponentinchildren\<charactershadow>(); console log(this charactershadow\ autosynctransform); }); this shadowtoggle onvaluechanged addlistener((isactive bool)=>{ this charactershadow\ gameobject setactive(isactive); }); } }