$ref と $unref
5 分
その 参照 と 出力 キーワードは、C#で変数や構造体をメソッドに渡す際に使用されます。
TypeScriptでは、これらのキーワードは利用できませんが、ZEPETOScriptでは、次のように同様の機能を実現できます:$ref と $unref。
関数 | 説明 |
|---|---|
$ref(x?:T):$Ref | パラメータの参照を作成します |
$unref(x:$Ref):T | パラメータの参照を解放し、元の値を返します |
例として、次のようにシーンを設定しましょう:
- シーンに3Dオブジェクト、キューブを追加します。

- 追加したキューブのインスペクターで、「コンポーネントを追加」をクリックし、Rigidbodyを追加します。

- シーンに空のGameObjectを追加します。
- 以下のRefSampleスクリプトを書き、ステップ3で作成したGameObjectに追加します。
import { GameObject, Rigidbody } from 'UnityEngine'
import { ZepetoScriptBehaviour } from 'ZEPETO.Script'
import TestScript from './TestScript';
export default class RefSample extends ZepetoScriptBehaviour {
Start() {
// "Cube"という名前のGameObjectを取得
const testObject = GameObject.Find("Cube");
// "Cube"オブジェクトからRigidbodyコンポーネントを取得
const testComponent = GameObject.Find("Cube").GetComponent<Rigidbody>();
// "Cube"オブジェクトからTestScriptコンポーネントを取得
const testScript = GameObject.Find("Cube").GetComponent<TestScript>();
// コンポーネントとオブジェクトへの参照を作成
let tempObj = $ref(testObject);
let tempComponent = $ref(testComponent);
let tempScript = $ref(testScript);
// Rigidbodyコンポーネントがnullでないか確認
if(tempComponent != null) {
// その参照の実際の値にアクセス
let component = $unref(tempComponent);
console.log(`コンポーネント名 : ${component}`);
}
// TestScriptコンポーネントがnullでないか確認
if(tempScript != null) {
// その参照の実際の値にアクセス
let script = $unref(tempScript);
script.DoTest();
}
// GameObject参照がnullでないか確認
if(tempObj != null) {
// その参照の実際の値にアクセス
let objName = $unref(tempObj);
console.log(`tempObj名 : ${objName.name}`);
}
}
}
- 別のZEPETOScriptを作成し、以下のTestScriptを書きます。
import { ZepetoScriptBehaviour } from 'ZEPETO.Script'
export default class TestScript extends ZepetoScriptBehaviour {
DoTest() {
console.log(`TestScriptのDoTest()が実行されました。`);
}
}
- TestScriptをCubeのInspectorにドラッグして接続します。
- [▶︎(再生)]ボタンをクリックして結果を観察します。
- コンソールログウィンドウでオブジェクト、Rigidbodyコンポーネント、ZEPETOScriptコンポーネントの参照の成功を確認できます。
