$ref & $unref
5 分
该ref和out关键字在 C# 中用于将变量或结构的引用传递给方法。
在 TypeScript 中,这些关键字不可用,但在 ZEPETOScript 中,您可以使用$ref和$unref。
函数 | 描述 |
|---|---|
$ref(x?:T):$Ref | 为参数创建引用 |
$unref(x:$Ref):T | 释放参数的引用并返回原始值 |
例如,让我们设置一个场景如下:
- 将一个3D对象,立方体,添加到场景中。

- 在添加的立方体的检查器中,点击“添加组件”并添加一个刚体。

- 将一个空的 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's DoTest() is executed.`);
}
}
- 拖动并将 TestScript 连接到 Cube 的 Inspector。
- 点击 [▶︎(播放)] 按钮以观察结果。
- 您可以在控制台日志窗口中检查引用对象、Rigidbody 组件和 ZEPETOScript 组件的成功情况。
