CREATE YOUR WORLD
Scripting

ScriptableObject

5min
zepetoscriptableobject는 unity scriptableobject를 지원합니다 zepetoscriptableobject는 월드 데이터 설정 및 캐릭터 옵션과 같은 대량의 데이터를 저장하는 데이터 컨테이너입니다 새로운 zepetoscriptableobject 파일을 만들려면 프로젝트 패널의 왼쪽 상단 모서리에 있는 \[+] 아이콘을 클릭하거나 자산 → 만들기 → zepeto → scriptableobject를 클릭하세요 새로 생성된 zepetoscriptableobject는 정의된 데이터 클래스를 사용하여 스크립트를 생성하여 연결해야 합니다 새로운 zepetoscript 파일을 만들고 사용할 데이터를 멤버 변수로 선언하세요 여기 데이터로 사용할 수 있는 샘플 코드가 있습니다 typescript import { vector3, quaternion } from 'unityengine'; export default class playerscriptobjectdef { public name string; public hp number; public position vector3; public rotation vector3; } zepetoscript를 정의된 데이터 클래스와 연결하면 zepetoscriptableobjects에서 해당 데이터를 검사기 창에서 볼 수 있습니다 아래와 같이 표시됩니다 zepetoscriptableobject에서 데이터를 호출하기 위해 zepetoscript 파일을 생성합니다 zepetoscript에서 zepetoscriptableobject를 가져오고, 선언한 데이터 유형도 가져옵니다 typescript import { zepetoscriptableobject } from 'zepeto script'; import playerscriptobjectdef from ' /playerdefine/playerscriptobjectdef'; zepetoscriptableobject를 zepetoscript의 속성으로 선언합니다 typescript public player zepetoscriptableobject\<playerscriptobjectdef>; public enemy zepetoscriptableobject\<playerscriptobjectdef>; zepetoscript에서 inspector 창을 열고 아래와 같이 zepetoscriptableobject 속성의 값을 할당합니다 이 샘플은 zepetoscriptableobject를 사용하고 그 값을 접근하는 방법을 보여줍니다 typescript // 이름으로 직접 접근 console log(`플레이어 이름 ${this player\["name"]}`); console log(`플레이어 hp ${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(`적 hp ${monsterstate hp}`); console log(`적 위치 (${monsterstate position x}, ${monsterstate position y}, ${monsterstate position z})`); console log(`적 회전 (${monsterstate rotation x}, ${monsterstate rotation y}, ${monsterstate rotation z})`); 원시 타입의 멤버 변수를 접근하려면, 제네릭 타입으로 선언하거나 아래 예제와 같이 타입 캐스팅을 사용하여 변환하세요 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의 전체 코드 예제를 확인하세요 typescript import { vector3 } from 'unityengine'; import { zepetoscriptbehaviour, zepetoscriptableobject } from 'zepeto script'; // 스크립터블 오브젝트 타입 정의 가져오기 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(`플레이어 hp ${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(`적 hp ${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})`); } }