あなたの世界を作りなさい
スクリプティング
スクリプタブルオブジェクト
4分
zepetoscriptableobjectはunity scriptableobjectをサポートしています。zepetoscriptableobjectは、ワールドデータ設定やキャラクターオプションなど、大量のデータを保存するデータコンテナです。 新しいzepetoscriptableobjectファイルを作成するには、プロジェクトパネルの左上隅にある\[+]アイコンをクリックするか、assets → create → 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を定義されたデータクラスとリンクすると、下記のようにinspectorウィンドウにそのデータが表示されます。 zepetoscriptファイルを作成して、zepetoscriptableobjectからデータを呼び出します。 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})`); } }