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

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

- 将一个空的 GameObject 添加到场景中。
- 编写下面的 RefSample 脚本并将其添加到步骤 3 中创建的 GameObject。
TypeScript
1import { GameObject, Rigidbody } from 'UnityEngine'
2import { ZepetoScriptBehaviour } from 'ZEPETO.Script'
3import TestScript from './TestScript';
4
5export default class RefSample extends ZepetoScriptBehaviour {
6
7 Start() {
8 // 获取名为 "Cube" 的 GameObject
9 const testObject = GameObject.Find("Cube");
10
11 // 从 "Cube" 对象获取 Rigidbody 组件
12 const testComponent = GameObject.Find("Cube").GetComponent<Rigidbody>();
13
14 // 从 "Cube" 对象获取 TestScript 组件
15 const testScript = GameObject.Find("Cube").GetComponent<TestScript>();
16
17 // 创建对组件和对象的引用
18 let tempObj = $ref(testObject);
19 let tempComponent = $ref(testComponent);
20 let tempScript = $ref(testScript);
21
22 // 检查 Rigidbody 组件是否不为 null
23 if(tempComponent != null) {
24 // 访问该引用的实际值
25 let component = $unref(tempComponent);
26 console.log(`组件名称 : ${component}`);
27 }
28
29 // 检查 TestScript 组件是否不为 null
30 if(tempScript != null) {
31 // 访问该引用的实际值
32 let script = $unref(tempScript);
33 script.DoTest();
34 }
35
36 // 检查 GameObject 引用是否不为 null
37 if(tempObj != null) {
38 // 访问该引用的实际值
39 let objName = $unref(tempObj);
40 console.log(`tempObj 名称 : ${objName.name}`);
41 }
42 }
43}
- 创建另一个 ZEPETOScript 并编写下面的 TestScript。
TypeScript
1import { ZepetoScriptBehaviour } from 'ZEPETO.Script'
2
3export default class TestScript extends ZepetoScriptBehaviour {
4
5 DoTest() {
6 console.log(`TestScript's DoTest() is executed.`);
7 }
8}
- 拖动并将 TestScript 连接到 Cube 的 Inspector。
- 点击 [▶︎(播放)] 按钮以观察结果。
- 您可以在控制台日志窗口中检查引用对象、Rigidbody 组件和 ZEPETOScript 组件的成功情况。
