$ref & $unref
3 분
그 ref 및 out 키워드는 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 구성 요소의 성공 여부를 확인할 수 있습니다.
