---
title: Mengimplementasikan sebuah objek yang mengikuti karakter
slug: world-sdk-guide-id/mengimplementasikan-sebuah-objek-yang-mengikuti-karakter
docTags: 
createdAt: 2024-09-02T08:34:13.135Z
---

Dengan menggunakan komponen NavMeshAgent, Anda dapat membuat objek AI yang mengikuti karakter ZEPETO Anda.

Dalam panduan ini, kita akan membuat objek Pet yang mengikuti karakter Anda.



## Membuat Objek Pet

:::::WorkflowBlock
:::WorkflowBlockItem
**Buka jendela Navigation (Obsolete).**

![](https://api.archbee.com/api/optimize/xv-TGeWVTX2GDZMFGOf1Y/ioeagnYkRZnNx3-Fh3DQH_image.png)

Di menu atas Unity, klik **Window > AI > Navigation (Obsolete)** untuk membuka jendela Navigation (Obsolete).
:::

::::WorkflowBlockItem
**Tentukan area yang bisa dilalui oleh objek Pet.**

::Image[]{src="https://api.archbee.com/api/optimize/xv-TGeWVTX2GDZMFGOf1Y/6Hnn9ZZKQBMr-JhQhFlt2_image.png" size="70" width="710" height="458" position="center" showCaption="false"}

Di jendela Navigation (Obsolete), klik tab **Object**. Di Hierarchy, pilih lantai, dinding, dan rintangan yang ingin dimasukkan ke dalam NavMesh, lalu tambahkan ke dalam Object.

- Ini memungkinkan objek Pet mengenali area sebagai permukaan yang bisa dilalui atau sebagai rintangan.

Pastikan kotak **Navigation Static** dicentang.

:::hint{type="info"}
✏️ Untuk informasi lebih lanjut tentang NavMesh, silakan lihat video berikut.

::embed[]{url="https://www.youtube.com/watch?v=mP7ulMu5UkU"}
:::
::::

:::WorkflowBlockItem
**Buat NavMesh.**

![](https://api.archbee.com/api/optimize/xv-TGeWVTX2GDZMFGOf1Y/Q-90_MdXrB1zN3pc8dzIj_image.png)

Klik tab **Bake**, lalu tekan tombol **Bake** di bagian bawah untuk membuat NavMesh.
:::

::::WorkflowBlockItem
**Tambahkan NavMeshAgent.**

Pilih objek Pet di Hierarchy. Di Inspector, tambahkan komponen **NavMeshAgent**.

- Agent mengacu pada objek Pet yang bergerak menggunakan sistem navigasi NavMesh.

Anda bisa mengatur ukuran, kecepatan gerak, kecepatan rotasi, akselerasi, dan tinggi objek yang dianggap sebagai rintangan.

:::hint{type="info"}
✏️ Untuk detail lebih lanjut tentang NavMeshAgent, lihat [tautan](https://docs.unity3d.com/550/Documentation/Manual/class-NavMeshAgent.html) berikut.
:::

![](https://api.archbee.com/api/optimize/xv-TGeWVTX2GDZMFGOf1Y/NWdi4SSnexNRcoVeE13jG_image.png)

Dalam contoh ini, atur Stopping Distance pada NavMeshAgent menjadi 3 agar Pet berhenti pada jarak 3 dari pemain.
::::

:::WorkflowBlockItem
**Buat skrip PetController.**

Di jendela Project, klik **tombol + > ZEPETO > TypeScript** untuk membuat skrip baru, lalu ubah namanya menjadi **PetController**.

Buka skrip tersebut, lalu salin dan tempelkan kode di bawah ini.

```typescript
import { Transform } from 'UnityEngine';
import { NavMeshAgent } from 'UnityEngine.AI';
import { ZepetoPlayers } from 'ZEPETO.Character.Controller';
import { ZepetoScriptBehaviour } from 'ZEPETO.Script';
import { WorldService } from 'ZEPETO.World';

export default class PetController extends ZepetoScriptBehaviour {

    private _target: Transform;
    private _navMeshAgent: NavMeshAgent;

    Start() {
        this._navMeshAgent = this.GetComponent<NavMeshAgent>();

        ZepetoPlayers.instance.OnAddedLocalPlayer.AddListener(() => {
            this._target = ZepetoPlayers.instance.GetPlayer(WorldService.userId).character.transform;
        })
    }

    Update() {
        if (this._target == null) {
            return;
        }
        this._navMeshAgent.SetDestination(this._target.position);
    }
}
```

Penjelasan Skrip

- Saat skrip dijalankan, \_target akan ditetapkan ke karakter ZEPETO Anda.
- Di fungsi Update, SetDestination dari NavMeshAgent akan memperbarui target ke posisi karakter Anda di setiap frame.
:::

:::WorkflowBlockItem
**Terapkan skrip PetController ke objek Pet.**

Pilih objek Pet di Hierarchy. Di Inspector, klik **Add Component > Zepeto Script** lalu seret dan jatuhkan skrip **PetController** ke dalam kolom Script.
:::

:::WorkflowBlockItem
**Tekan tombol Play.**

![](https://api.archbee.com/api/optimize/xv-TGeWVTX2GDZMFGOf1Y/yq6fVGzeb3eN12XefOpQe_petexample.gif)

Sekarang Anda bisa melihat objek Pet mengikuti karakter Anda sambil menghindari rintangan seperti dinding.
:::
:::::



# Membuat Pet di atas kepala karakter

Jika Anda ingin membuat Pet yang ditempelkan pada tubuh karakter, bukan yang mengikuti, Anda dapat menggunakan metode attachment.

:::hint{type="info"}
✏️ Untuk informasi lebih lanjut, silakan lihat panduan [Melampirkan objek ke karakter ZEPETO](docId\:jceJ5MoTG0AwTSQX_cyax).
:::



::::WorkflowBlock
:::WorkflowBlockItem
**Buat skrip AttachPetController.**

Di Project, klik **tombol + > ZEPETO > TypeScript** lalu ubah nama skrip menjadi **AttachPetController**.

Buka skrip dan tempelkan kode di bawah ini.

```typescript
import { ZepetoScriptBehaviour } from 'ZEPETO.Script';
import { ZepetoCharacter, ZepetoPlayers } from 'ZEPETO.Character.Controller';
import { Transform, Animator, GameObject, HumanBodyBones, Object } from 'UnityEngine';

export default class AttachPetController extends ZepetoScriptBehaviour {

    public Pet: GameObject;
    public bodyBone: HumanBodyBones;

    Start() {

        ZepetoPlayers.instance.OnAddedLocalPlayer.AddListener(() => {
            const localCharacter = ZepetoPlayers.instance.LocalPlayer.zepetoPlayer.character;            
            const animator: Animator = localCharacter.ZepetoAnimator;            
            const bone: Transform = animator.GetBoneTransform(this.bodyBone);            
            Object.Instantiate(this.Pet, bone) as GameObject;          
        });
    }
}
```

Penjelasan Skrip

- Saat skrip dimulai, skrip akan menemukan pemain lokal dan komponen animatornya.
- Skrip akan mengidentifikasi bagian tubuh yang dipilih dalam variabel bodyBone di dalam animator karakter.
- Kemudian, skrip akan membuat objek hewan peliharaan di posisi yang diidentifikasi, dan menetapkan induk objek hewan peliharaan sebagai bagian tubuh karakter.
:::

:::WorkflowBlockItem
**Terapkan skrip AttachPetController ke objek baru**

Di Hierarchy, klik **tombol + > Create Empty** untuk membuat objek kosong baru dan beri nama **AttachPetController**.

Di Inspector, klik **Add Component > Zepeto Script** lalu seret dan jatuhkan skrip AttachPetController ke kolom Script.

Seret objek Pet ke kolom Pet, dan pilih bagian tubuh dari menu dropdown bodyBone untuk memasang Pet.

![](https://api.archbee.com/api/optimize/xv-TGeWVTX2GDZMFGOf1Y/nyLMD6vjoovCAoxHTe8OC_image.png)

Tekan tombol Play untuk melihat Pet muncul di bagian tubuh yang dipilih.
:::
::::



