---
title: สร้างไอเท็มกินโลก
slug: world-sdk-guide-th/F9Pocu7m_plET0h46rgQt
docTags: 
createdAt: 2024-09-02T08:34:13.138Z
---

## ตัวอย่างโครงการ

:::hint{type="info"}
**📘 ไฟล์โครงการที่ใช้ในบรรยาย**

- [https://github.com/naverz/zepeto-world-sample/tree/main/Assets/Chapter2](https://github.com/naverz/zepeto-world-sample/tree/main/Assets/Chapter2)
:::

## สรุป

| สรุป           | จากสิ่งที่เราเรียนรู้ในบทที่ 1 เราจะสร้างโลกที่มีไอเท็มกินได้โดยใช้ความเร็วในการเคลื่อนที่ของตัวละครและการควบคุมการกระโดด. |
| -------------- | -------------------------------------------------------------------------------------------------------------------------- |
| ความยาก        | ระดับเริ่มต้น                                                                                                              |
| เวลาที่ต้องใช้ | 30 นาที                                                                                                                    |



**เป้าหมายของโครงการ**

- การจัดการการซื้อสินค้าผ่านเหตุการณ์ OnTrigger
- เข้าใจวิธีการใช้ Text UI
- สร้าง UI Controller เพื่อสะท้อนการซื้อสินค้าใน Text UI
- เข้าใจวิธีการควบคุมความสูงของการกระโดดของตัวละคร ZEPETO
- เข้าใจวิธีการควบคุมความเร็วในการเคลื่อนที่ของตัวละคร ZEPETO



**🎬 วิดีโอของโลกที่เสร็จสมบูรณ์**

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



## สคริปต์

:::CodeblockTabs
CharacterController.ts

```typescript
import { ZepetoScriptBehaviour } from 'ZEPETO.Script'
import { SpawnInfo, ZepetoPlayers, LocalPlayer, ZepetoCharacter } from 'ZEPETO.Character.Controller'
import { WorldService } from 'ZEPETO.World';
export default class CharacterController extends ZepetoScriptBehaviour {
    Start() {
        //Gets the UserId (logged in through Editor)
        ZepetoPlayers.instance.CreatePlayerWithUserId(WorldService.userId,new SpawnInfo(), true);
        ZepetoPlayers.instance.OnAddedLocalPlayer.AddListener(() => {
            let _player : LocalPlayer = ZepetoPlayers.instance.LocalPlayer;
        });
    }
}               
```
:::

:::CodeblockTabs
GetItem.ts

```typescript
import { Collider, Vector3, GameObject, Transform } from 'UnityEngine';
import { ZepetoCharacter, ZepetoPlayer, ZepetoPlayers } from 'ZEPETO.Character.Controller';
import { ZepetoScriptBehaviour, ZepetoScriptInstance } from 'ZEPETO.Script';
 
// import custom script from path
import UIController from './UIController';
 
export default class GetItem extends ZepetoScriptBehaviour 
{
   public extComponentGameObject: GameObject;
   private extComponent: UIController;
   private zepetoCharacter: ZepetoCharacter;

    Start() 
    {
        //Zepeto character object
        ZepetoPlayers.instance.OnAddedLocalPlayer.AddListener(() => {
            this.zepetoCharacter = ZepetoPlayers.instance.LocalPlayer.zepetoPlayer.character;
        });
        //script import
        this.extComponent = this.extComponentGameObject.GetComponent<UIController>();
    }


    OnTriggerEnter(collider: Collider) 
    {
        if (this.zepetoCharacter == null || collider.gameObject != this.zepetoCharacter.gameObject)
            return;
        
        //Sends a message of raising a count after eating an item
        this.extComponent.IncreaseCount();
        //Destroy item
        GameObject.Destroy(this.gameObject);
   }
}
```
:::

:::CodeblockTabs
JumpPower.ts

```typescript
import { Collider } from 'UnityEngine';
import { ZepetoPlayers, ZepetoCharacter } from 'ZEPETO.Character.Controller';
import { ZepetoScriptBehaviour } from 'ZEPETO.Script';

export default class JumpPower extends ZepetoScriptBehaviour 
{
    public jumpPower: number = 5;
    private zepetoCharacter :ZepetoCharacter;

    Start() 
    {
        //วัตถุของตัวละคร Zepeto
        ZepetoPlayers.instance.OnAddedLocalPlayer.AddListener(() => {
            this.zepetoCharacter = ZepetoPlayers.instance.LocalPlayer.zepetoPlayer.character;
        });      
    }

    OnTriggerEnter(collider: Collider) 
    {
        if (this.zepetoCharacter == null || collider.gameObject != this.zepetoCharacter.gameObject)
            return;
        
        //เพิ่มพลังกระโดด
        this.zepetoCharacter.additionalJumpPower = this.jumpPower;
    }

    OnTriggerExit(collider: Collider) {
        //คืนพลังกระโดดกลับเป็นปกติ
        this.zepetoCharacter.additionalJumpPower = 0;
    }
}
```
:::

:::CodeblockTabs
SpeedUp.ts

```typescript
import { Collider, GameObject, WaitForSeconds } from 'UnityEngine';
import { ZepetoCharacter, ZepetoPlayers } from 'ZEPETO.Character.Controller';
import { ZepetoScriptBehaviour } from 'ZEPETO.Script';

export default class SpeedUp extends ZepetoScriptBehaviour 
{
    private zepetoCharacter :ZepetoCharacter;
    public runSpeed: number = 4;
    public waitTime: number = 3;

    Start() 
    {
        //วัตถุของตัวละคร Zepeto
        ZepetoPlayers.instance.OnAddedLocalPlayer.AddListener(() => {
            this.zepetoCharacter = ZepetoPlayers.instance.LocalPlayer.zepetoPlayer.character;
        });
    }
    
    OnTriggerEnter(collider: Collider) 
    {
        if (this.zepetoCharacter == null || collider.gameObject != this.zepetoCharacter.gameObject)
            return;
        this.zepetoCharacter.additionalRunSpeed = this.runSpeed;
        this.StartCoroutine(this.DoRoutine());
    }

    *DoRoutine() 
    {
        //รอเวลาตามค่าที่กำหนด
        yield new WaitForSeconds(this.waitTime);
        //คืนความเร็วในการวิ่งกลับเป็นปกติ
        this.zepetoCharacter.additionalRunSpeed = 0;
    }
}
```
:::

:::CodeblockTabs
UIController.ts

```typescript
import { ZepetoScriptBehaviour } from 'ZEPETO.Script';
import { Text } from "UnityEngine.UI";
import { GameObject } from 'UnityEngine';

export default class UIController extends ZepetoScriptBehaviour 
{
    public resultUI: Text;
    public maxCount: number = 7;
    
    private stringProperty: string;   
    private message: string;
    private count: number;
    
    Start() 
    {
        //กำหนดค่าเริ่มต้น
        this.message = "รายการ";
        this.count = 0;
    }
    
    public IncreaseCount() 
    {
        this.count++;
        
        if(this.count >= this.maxCount) 
        {
            this.resultUI.text = "เคลียร์!";
        } 
        else 
        {
            this.stringProperty = `${this.message} : ${this.count}`;
            this.resultUI.text = this.stringProperty;
        }
    }
     
}
```
:::

