---
title: ScriptableObject
slug: world-sdk-guide-th/scriptableobject
docTags: 
createdAt: 2024-09-02T08:34:13.135Z
---

ZepetoScriptableObject รองรับ Unity ScriptableObject. ZepetoScriptableObject เป็นตัวเก็บข้อมูลที่บันทึกข้อมูลจำนวนมาก เช่น การตั้งค่าข้อมูลโลกและตัวเลือกตัวละคร.

ในการสร้างไฟล์ ZepetoScriptableObject ใหม่ ให้คลิกที่ไอคอน \[+] ที่มุมซ้ายบนของแผงโครงการ หรือคลิกที่ Assets → Create → ZEPETO → ScriptableObject.

::Image[]{src="https://api.archbee.com/api/optimize/fCt3n1oCa8rgNJ8fw9I2N-ly1N62ko5k7yD_oi9a2Eg-20240904-102418.png" size="60" width="754" height="630" position="center" showCaption="false"}



ZepetoScriptableObject ที่สร้างขึ้นใหม่จำเป็นต้องเชื่อมต่อโดยการสร้างสคริปต์ที่มีคลาสข้อมูลที่กำหนดไว้.

::Image[]{src="https://api.archbee.com/api/optimize/fCt3n1oCa8rgNJ8fw9I2N-UBN5P5kclKDUF0wl5s31n-20240904-102418.png" size="68" width="585" height="246" position="center" showCaption="false"}

สร้างไฟล์ ZEPETOScript ใหม่ และประกาศข้อมูลที่คุณจะใช้เป็นตัวแปรสมาชิก.

นี่คือตัวอย่างโค้ดบางส่วนที่สามารถใช้เป็นข้อมูลได้.

:::CodeblockTabs
TypeScript

```typescript
import { Vector3, Quaternion } from 'UnityEngine';

export default class PlayerScriptObjectDef {  

    public name: string;
    public hp: number;      
    public position: Vector3;
    public rotation: Vector3;
 }
```
:::



เมื่อคุณเชื่อมโยง ZEPETOScript กับคลาสข้อมูลที่กำหนดไปยัง ZepetoScriptableObjects คุณจะเห็นข้อมูลเหล่านั้นในหน้าต่าง Inspector ดังที่แสดงด้านล่าง

![](https://api.archbee.com/api/optimize/fCt3n1oCa8rgNJ8fw9I2N-WxkBAYpAkQIw3rCI1VfT8-20240904-102418.png)



สร้างไฟล์ ZEPETOScript เพื่อเรียกข้อมูลจาก ZepetoScriptableObject

นำเข้า ZepetoScriptableObject จาก ZEPETOScript และนำเข้าประเภทข้อมูลที่คุณได้ประกาศไว้ด้วย

:::CodeblockTabs
TypeScript

```typescript
import { ZepetoScriptableObject } from 'ZEPETO.Script';
import PlayerScriptObjectDef from './playerDefine/PlayerScriptObjectDef';
```
:::



::Image[]{src="https://api.archbee.com/api/optimize/fCt3n1oCa8rgNJ8fw9I2N-WoXCJ6ZSrzFbrmoDprSmZ-20240904-102418.png" size="50" width="247" height="98" position="center" showCaption="false"}



ประกาศ ZepetoScriptableObject เป็นคุณสมบัติใน ZEPETOScript.

:::CodeblockTabs
TypeScript

```typescript
public player: ZepetoScriptableObject<PlayerScriptObjectDef>;
public enemy: ZepetoScriptableObject<PlayerScriptObjectDef>;
```
:::



เปิดหน้าต่าง Inspector ใน ZEPETOScript เพื่อกำหนดค่าให้กับคุณสมบัติของ ZepetoScriptableObject ตามที่แสดงด้านล่าง.

![](https://api.archbee.com/api/optimize/fCt3n1oCa8rgNJ8fw9I2N-FlWp-r09qaGr43OQPrc7l-20240904-102418.png)



ตัวอย่างนี้แสดงให้เห็นว่าคุณสามารถใช้ ZepetoScriptableObject และเข้าถึงค่าของมันได้อย่างไร.

:::CodeblockTabs
TypeScript

```typescript
// การเข้าถึงโดยตรงตามชื่อ
console.log(`ชื่อผู้เล่น : ${this.player["name"]}`);
console.log(`พลังชีวิตผู้เล่น : ${this.player["hp"]}`);      
console.log(`ตำแหน่งผู้เล่น : (${this.player["position"].x}, ${this.player["position"].y}, ${this.player["position"].z})`);
console.log(`การหมุนของผู้เล่น : (${this.player["rotation"].x}, ${this.player["rotation"].y}, ${this.player["rotation"].z})`);
 
// การเรียกข้อมูลทั่วไป
let monsterState = this.enemy.targetObject;
console.log(`ชื่อศัตรู : ${monsterState.name}`);
console.log(`พลังชีวิตศัตรู : ${monsterState.hp}`);
console.log(`ตำแหน่งศัตรู : (${monsterState.position.x}, ${monsterState.position.y}, ${monsterState.position.z})`);
console.log(`การหมุนของศัตรู : (${monsterState.rotation.x}, ${monsterState.rotation.y}, ${monsterState.rotation.z})`);
```
:::



ในการเข้าถึงตัวแปรประเภทพื้นฐาน ให้ประกาศเป็นประเภททั่วไปหรือแปลงโดยใช้การแคสต์ประเภท เช่น ตัวอย่างที่แสดงด้านล่างนี้.

:::CodeblockTabs
TypeScript

```typescript
// การแคสต์ประเภท
let playerPosition = this.player["position"] as Vector3;
console.log(`ตำแหน่งผู้เล่น : (x:${playerPosition.x}, y:${playerPosition.y}, z:${playerPosition.z})`);
  
// ประเภททั่วไปสามารถเข้าถึงสมาชิกของคลาส
console.log(`ตำแหน่งศัตรู : (x:${monsterState.position.x}, y:${monsterState.position.y}, z:${monsterState.position.z})`);
```
:::



ตรวจสอบตัวอย่างโค้ดทั้งหมดสำหรับ ScriptableObject.

:::CodeblockTabs
TypeScript

```typescript
import { Vector3 } from 'UnityEngine';
import { ZepetoScriptBehaviour, ZepetoScriptableObject } from 'ZEPETO.Script';
// นำเข้าคำนิยามประเภท scriptable object
import PlayerScriptObjectDef from './playerDefine/PlayerScriptObjectDef'; 

export default class ScriptableObjectSample extends ZepetoScriptBehaviour {

    public player: ZepetoScriptableObject;
    // การเรียกใช้ประเภททั่วไป
    public enemy: ZepetoScriptableObject<PlayerScriptObjectDef>; 

    Awake() {
        // การเข้าถึงโดยตรงตามชื่อ
        console.log(`ชื่อผู้เล่น : ${this.player["name"]}`);
        console.log(`พลังชีวิตผู้เล่น : ${this.player["hp"]}`);
        console.log(`ตำแหน่งผู้เล่น : (${this.player["position"].x}, ${this.player["position"].y}, ${this.player["position"].z})`);
        console.log(`การหมุนของผู้เล่น : (${this.player["rotation"].x}, ${this.player["rotation"].y}, ${this.player["rotation"].z})`);

        // การเรียกใช้ข้อมูลทั่วไป
        let monsterState = this.enemy.targetObject;
        console.log(`ชื่อศัตรู : ${monsterState.name}`);
        console.log(`พลังชีวิตศัตรู : ${monsterState.hp}`);
        console.log(`ตำแหน่งศัตรู : (${monsterState.position.x}, ${monsterState.position.y}, ${monsterState.position.z})`);
        console.log(`การหมุนของศัตรู : (${monsterState.rotation.x}, ${monsterState.rotation.y}, ${monsterState.rotation.z})`);

        // การแปลงประเภท
        let playerPosition = this.player["position"] as Vector3;
        console.log(`ตำแหน่งผู้เล่น : (${playerPosition.x}, ${playerPosition.y}, ${playerPosition.z})`);

        // ประเภททั่วไปสามารถเข้าถึงสมาชิกของคลาส
        console.log(`ตำแหน่งศัตรู : (${monsterState.position.x}, ${monsterState.position.y}, ${monsterState.position.z})`);
    }
}
```
:::

