Karakter ZEPETO
ZEPETOCharacter adalah unit dasar instansi karakter ZEPETO untuk dimuat dalam World Scene.
Untuk mengontrol ZepetoCharacter, tambahkan pernyataan impor berikut ke dalam skrip.
import { ZepetoCharacter } from 'ZEPETO.Character.Controller';
ZepetoCharacter API
API ini membuat dan menghapus instansi karakter ZEPETO, termasuk komponen animator controller dan character controller.
API | Deskripsi |
|---|---|
CreateByZepetoId(zepetoId: string, spawnInfo: SpawnInfo, complete: System.Action$1) | Gunakan ZEPETO ID untuk menghasilkan instansi karakter ZEPETO. Utamanya digunakan untuk pembuatan karakter NPC. |
CreateByUserId(userId: string, spawnInfo: SpawnInfo, complete: System.Action$1) | Buat instansi karakter ZEPETO dengan UserId. Utamanya digunakan untuk pembuatan karakter NPC. |
RemoveCharacter(character: ZepetoCharacter) | Hapus instansi karakter. |
API ini membuat instansi model karakter ZEPETO, tidak termasuk komponen Animator Controller dan Character Controller.
- ZEPETO ID : Ini adalah nilai ID yang secara langsung ditentukan oleh pengguna dan digunakan dalam aplikasi ZEPETO.
- User ID : Ini adalah nilai ID unik yang membedakan pengguna dalam sistem ZEPETO, dan bukan nilai yang ditampilkan di UI. Anda dapat memeriksanya menggunakan skrip.
Jika Anda tertarik dengan API ZepetoCharacter, silakan merujuk ke dokumentasi:
Buat/Hapus Karakter
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() {
// Buat instance baru dari kelas SpawnInfo
const firstCloneSpawnInfo = new SpawnInfo();
firstCloneSpawnInfo.position = new Vector3(0,0,1);
const secondCloneSpawnInfo = new SpawnInfo();
secondCloneSpawnInfo.position = new Vector3(0,0,3);
// Buat `ZepetoCharacter` menggunakan ZepetoId
ZepetoCharacterCreator.CreateByZepetoId(this.zepetoId, firstCloneSpawnInfo, (character: ZepetoCharacter) => {
this._cloneCharacter = character;
});
// Buat `ZepetoCharacterModel` menggunakan ZepetoId
ZepetoCharacterCreator.CreateModelByZepetoId(this.zepetoId, secondCloneSpawnInfo, (object) => {
this._cloneCharacterModel = object;
});
// Buat `ZepetoCharacter` menggunakan UserId
/*
ZepetoCharacterCreator.CreateByUserId(WorldService.userId, new SpawnInfo(), (character: ZepetoCharacter) => {
this._cloneCharacter = character;
})
// Buat `ZepetoCharacterModel` menggunakan UserId
ZepetoCharacterCreator.CreateModelByUserId(WorldService.userId, new SpawnInfo(), (object) => {
this._cloneCharacterModel = object;
})
*/
// Atur event klik untuk `removeCloneCharacterButton` untuk menghapus karakter klon.
this.removeCloneCharacterButton.onClick.AddListener(() => {
ZepetoCharacterCreator.RemoveCharacter(this._cloneCharacter);
});
// Atur event klik untuk `removeCloneCharacterModelButton` untuk menghancurkan model karakter klon.
this.removeCloneCharacterModelButton.onClick.AddListener(() => {
Object.Destroy(this._cloneCharacterModel);
});
}
}
Jika Anda menjalankan contoh ini, Anda dapat melihat bahwa CharacterModel di sebelah kiri dibuat tanpa komponen Animator Controller dan Character Controller seperti yang ditunjukkan di bawah ini.

Kontrol Karakter
Antarmuka di mana Anda dapat langsung mengontrol karakter akan disediakan melalui skrip dari instansi karakter dalam sebuah Adegan.
API | Deskripsi |
|---|---|
MoveToPosition(position : Vector3) | Pindahkan karakter ke Posisi. |
MoveContinuously(direction : Vector3) | Gerak terus menerus (perbarui) ke arah yang dilihat karakter. |
MoveContinuously(direction : Vector2) | Gerak terus menerus (perbarui) ke arah yang dilihat karakter. |
StopMoving() | Hentikan karakter dari bergerak. |
Jump() | Karakter melompat ke Daya Lompat yang ditetapkan. |
DoubleJump() | Karakter melompat dua kali dengan Daya DoubleJump yang saat ini ditetapkan. (Berlaku hanya saat menggunakan MotionController V2) |
Teleport(position: UnityEngine.Vector3, rotation: UnityEngine.Quaternion) | Karakter langsung berpindah ke Transform. |
SetGesture(gesture: UnityEngine.AnimationClip) | Untuk AnimationClip yang ditentukan, gerakan karakter diputar. Saat SetGesture sedang berjalan, input kontrol pengguna tidak diterapkan pada karakter. Ketika opsi loop AnimationClip diaktifkan, itu akan terus diputar sampai CancelGesture() dipanggil. |
CancelGesture() | Hentikan pemutaran Animation Clip yang sedang diputar melalui SetGesture(). Ketika CancelGesture() dieksekusi, input kontrol pengguna diterapkan kembali pada kontrol karakter. |
Contoh kode karakter kontrol.
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() {
// Buat `ZepetoCharacter` menggunakan `ZepetoCharacterCreator.CreateByUserId`.
ZepetoCharacterCreator.CreateByUserId(WorldService.userId, new SpawnInfo(), (character: ZepetoCharacter) => {
// Tetapkan karakter yang dibuat ke `_cloneCharacter`.
this._cloneCharacter = character;
// Jalankan `ActionCoroutine()` sebagai coroutine.
this.StartCoroutine(this.ActionCoroutine());
})
}
*ActionCoroutine() {
yield new WaitForSeconds(3);
// Pindahkan `_cloneCharacter` ke `targetPosition` setelah menunggu 3 detik.
this._cloneCharacter.MoveToPosition(this.targetPosition);
yield new WaitForSeconds(1);
// Buat `_cloneCharacter` melompat setelah menunggu 1 detik.
this._cloneCharacter.Jump();
yield new WaitForSeconds(1);
// Atur gestur `_cloneCharacter` ke `danceGesture` setelah menunggu 1 detik.
this._cloneCharacter.SetGesture(this.danceGesture);
yield new WaitForSeconds(3);
// Batalkan gestur `_cloneCharacter` setelah menunggu 3 detik.
this._cloneCharacter.CancelGesture();
}
}
Jika Anda menjalankan contoh ini, Anda dapat melihat bahwa karakter yang dikloning melakukan tindakan yang ditentukan secara berurutan sebagai berikut.

📘 Silakan merujuk ke panduan berikut. [Membuat sebuah NPC]
Status Gerakan
API yang terkait dengan Status Gerak karakter ZEPETO adalah sebagai berikut:
API | Deskripsi |
|---|---|
motionState.useDoubleJump = (boolean); | Atur apakah karakter dapat menggunakan DoubleJump. |
motionState.doubleJumpPower = (number); | Atur kekuatan DoubleJump karakter. |
motionState.useLandingRoll = (boolean); | Atur apakah akan menggunakan LandingRoll karakter. |
motionState.landingRollSpeed = (number); | Atur nilai kecepatan LandingRoll karakter. |
motionState.useMoveTurn = (boolean); | Atur apakah akan menggunakan MoveTurn untuk karakter. |
motionState.Gravity = (number); | Atur nilai gravitasi karakter. |
motionState.CurrentJumpState | Anda dapat memeriksa status lompatan karakter saat ini. - Tidak ada = -1, JumpIdle = 0, JumpMove = 1, JumpDash = 2, JumpDouble = 3 |
motionState.CurrentLandingState | Anda dapat memeriksa status pendaratan karakter saat ini. - Tidak ada = -1, LandingSlight = 0, LandingDeep = 1, LandingRoll = 2 |
motionState.CurrentMoveState | Anda dapat memeriksa status gerakan karakter saat ini. - Tidak ada = -1, MoveWalk = 0, MoveRun = 1 |
Contoh kode Status Gerakan
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) => {
// Menetapkan karakter yang dibuat ke `_cloneCharacter`.
this._cloneCharacter = character;
// Mengatur berbagai properti dari `motionState` di `_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() {
// Periksa apakah `_cloneCharacter` tidak null.
if (this._cloneCharacter != null) {
// Cetak status lompat saat ini dari `motionState` di `_cloneCharacter`.
console.log(`Status Lompat Saat Ini: ${this._cloneCharacter.motionState.currentJumpState}`);
// Cetak status mendarat saat ini dari `motionState` di `_cloneCharacter`.
console.log(`Status Mendarat Saat Ini: ${this._cloneCharacter.motionState.currentLandingState}`);
// Cetak status gerak saat ini dari `motionState` di `_cloneCharacter`.
console.log(`Status Gerak Saat Ini: ${this._cloneCharacter.motionState.currentMoveState}`);
}
}
}
Mengendalikan Animator Karakter ZEPETO
API untuk mengendalikan animator karakter ZEPETO
API | Deskripsi |
|---|---|
StateMachine.constraintStateAnimation | Mulai dari versi 1.6.0 dari ZEPETO.World, transisi Animasi yang dimainkan dalam CharacterStateMachine dapat dihidupkan/dimatikan sesuai dengan CharacterState dari Motion V2. - true : Matikan ZepetoCharacter.CurrentState, yang dipengaruhi oleh input pengontrol, dan kendalikan klip animasi yang diinginkan. |
👍 Contoh penggunaan constraintStateAnimation
- Anda ingin karakter Anda menggunakan animasi berenang alih-alih animasi berjalan. Anda dapat menerapkan klip animasi berenang ke State baru dan memperbaiki State melalui constraintStateAnimation.
- Jika Anda ingin menggunakan animasi gestur saat menggerakkan karakter, Anda dapat menerapkan klip animasi gestur ke State baru dan menggerakkan karakter dengan State yang diperbaiki menggunakan constraintStateAnimation.
- Ini dapat digunakan ketika Anda ingin memaksa memainkan animasi tertentu sambil sementara mengabaikan nilai parameter yang diterapkan pada Animator State.
ZepetoAnimator
Fungsi Animator UnityEngine tersedia dalam bentuk ZepetoAnimator.
Sebagai contoh, jika Anda ingin mengatur nilai Integer untuk parameter "State" Animator Karakter tertentu, Anda dapat menggunakan:
ZepetoAnimator.SetInteger("State", 1);Untuk penggunaan yang lebih rinci, silakan merujuk ke dokumentasi Animator UnityEngine dan skrip contoh di bawah ini.
📘 UnityEngine Animator https://docs.unity3d.com/ScriptReference/Animator.html
Contoh kode untuk mengontrol Animator Karakter ZEPETO
Contoh kontrol animator dari karakter ZEPETO pemain lokal yang dikendalikan oleh pemain.
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() {
// Kode Pembuatan Pemain Lokal (Silakan hapus bagian ini jika Anda sudah menggunakan kode pembuatan pemain lokal di tempat lain) ZepetoPlayers.instance.CreatePlayerWithUserId(WorldService.userId, new SpawnInfo(), true);
// Kode untuk mengatur pemain lokal yang dibuat sebagai karakter ZEPETO.
ZepetoPlayers.instance.OnAddedLocalPlayer.AddListener(() => {
this._zepetoCharacter = ZepetoPlayers.instance.LocalPlayer.zepetoPlayer.character;
// Contoh SetInteger
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);
});
});
}
}
Jika Anda menjalankan contoh tersebut, Anda dapat melihat bahwa ketika nilai StateMachine.constraintStateAnimation adalah True, transisi Animasi yang dimainkan di CharacterStateMachine adalah Off.
Jika Anda mengatur nilai StateMachine.constraintStateAnimation menjadi False, itu akan kembali ke keadaan semula.

Mengontrol CharacterShadow
Mulai dari versi 1.11.3 dari Paket ZEPETO.CharacterController, sebuah antarmuka telah ditambahkan untuk mengakses objek ZepetoCharacter Shadow.
Spesifikasi API:
class CharacterShadow extends UnityEngine.MonoBehaviour {
public target: UnityEngine.Transform;
public autoSyncTransform: boolean;
}target | - Mewakili objek yang berfungsi sebagai referensi untuk menyesuaikan transformasi objek CharacterShadow. - Secara default, karakter ZEPETO diatur sebagai target. Transformasi objek CharacterShadow disesuaikan berdasarkan bagian bawah karakter yang ditentukan. |
|---|---|
autoSyncTransform | - Sebuah nilai flag yang menentukan apakah posisi bayangan harus disesuaikan. - Nilai default adalah true. |
Dengan ini, Anda dapat mengontrol bayangan karakter Zepeto saat runtime. Di bawah ini adalah contoh kode yang menggunakan toggle untuk menghidupkan dan mematikan bayangan.
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);
});
}
}
