---
title: Implémentation d'un objet qui suit le personnage
slug: world-sdk-guide-fr/implementation-dun-objet-qui-suit-le-personnage
docTags: 
createdAt: 2024-09-02T08:34:13.135Z
---

Grâce au composant NavMeshAgent, vous pouvez créer un objet AI qui suit votre personnage ZEPETO.

Dans ce guide, nous allons créer un objet Pet qui suit votre personnage.

## Création de l’objet Pet

:::::WorkflowBlock
:::WorkflowBlockItem
**Ouvrez la fenêtre Navigation (Obsolete).**

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

Dans Unity, cliquez sur **Window > AI > Navigation (Obsolete)** pour ouvrir la fenêtre Navigation (Obsolete).
:::

::::WorkflowBlockItem
**Définissez les zones navigables pour l’objet 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"}

Dans la fenêtre Navigation (Obsolete), cliquez sur l’onglet **Object**. Depuis la Hierarchy, sélectionnez sols, murs et obstacles à inclure dans le NavMesh.

- Ajoutez-les dans Object pour définir les surfaces navigables ou obstacles.

Vérifiez que **Navigation Static** est coché.

:::hint{type="info"}
✏️ Pour plus d’infos sur NavMesh, consultez la vidéo ci-dessous.

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

:::WorkflowBlockItem
**Générez le NavMesh.**

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

Cliquez sur l’onglet **Bake** puis sur le bouton **Bake** pour créer le NavMesh.
:::

::::WorkflowBlockItem
**Créez un NavMeshAgent.**

Sélectionnez l’objet Pet dans la Hierarchy. Ajoutez le composant **NavMeshAgent** dans l’Inspector.

- Agent signifie l’objet Pet naviguant avec le NavMesh.

Vous pouvez ajuster taille, vitesse, rotation, accélération, et hauteur d’obstacle.

:::hint{type="info"}
✏️ Pour plus d’infos sur NavMeshAgent, consultez ce [lien](https://docs.unity3d.com/550/Documentation/Manual/class-NavMeshAgent.html).
:::

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

Dans l’exemple, réglez Stopping Distance sur 3 pour que le Pet s’arrête à une distance de 3 du joueur.
::::

:::WorkflowBlockItem
**Créez le script PetController.**

Dans la fenêtre Project, cliquez **+ > ZEPETO > TypeScript**, renommez-le **PetController**.

Ouvrez le script et copiez-collez le code ci-dessous.

```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);
    }
}
```

Explication du script

- Au démarrage, \_target définit votre personnage ZEPETO.
- La fonction Update fixe la destination de l’Agent à la position du personnage à chaque frame.
:::

:::WorkflowBlockItem
**Appliquez PetController à l’objet Pet.**

Sélectionnez Pet dans la Hierarchy. Cliquez sur **Add Component > Zepeto Script** et glissez-déposez PetController dans Script.
:::

:::WorkflowBlockItem
**Cliquez Play.**

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

Vous pouvez voir Pet suivre votre personnage en évitant les obstacles.
:::
:::::



# Création d’un Pet sur la tête du personnage

Pour attacher le Pet au corps plutôt que le faire suivre, utilisez l’attachement d’objet.

:::hint{type="info"}
✏️ Pour plus d’infos, veuillez vous référer au guide [Attacher des objets aux personnages de ZEPETO](docId\:LwyMdrbf83EgGCuiKjZNu).
:::



::::WorkflowBlock
:::WorkflowBlockItem
**Créez AttachPetController.**

Dans la fenêtre Project, clique&#x7A;**&#x20;+ > ZEPETO > TypeScript**, renommez **AttachPetController**.&#x20;

Ouvrez le script et copiez-collez le code ci-dessous.

```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;          
        });
    }
}
```

Explication du script

- Au démarrage, le script recherche le joueur local et son composant d'animation.
- Il identifie la partie du corps sélectionnée dans la variable bodyBone de l'animation du personnage.
- Il instancie ensuite l'objet animal à la position identifiée, définissant le parent de l'objet animal comme partie du corps du personnage.
:::

:::WorkflowBlockItem
**Appliquez le script AttachPetController à un nouvel objet.**

Dans la Hierarchy, cliquez sur **le bouton + > Create Empty** pour créer un nouvel objet, puis renommez-le **AttachPetController**.

Dans l’Inspector, cliquez sur **Add Component > Zepeto Script**, puis faites glisser le script AttachPetController dans le champ Script.

Faites glisser l’objet Pet dans le champ Pet. Ouvrez le menu déroulant dans le champ bodyBone et sélectionnez la partie du corps du personnage à laquelle attacher l’objet Pet.

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

Cliquez Play pour voir l’objet Pet attaché au personnage.
:::
::::

