Gyro 센서 활용하기
ZEPETO 월드를 만들 때, 장치의 기울기에 따라 다양한 월드 플레이 아이디어를 구현하기 위해 자이로 센서를 사용할 수 있습니다. 이 가이드는 ZEPETOScript 내에서 Input.gyro를 활용하는 방법을 보여줍니다.
객체 설정하기
1) 계층 추가 > [+] > 3D 객체 > 구 객체를 장면에 추가합니다.
2) 객체의 이름을 Ball로 변경하고 Rigidbody 구성 요소를 추가합니다.

스크립트 작성하기
1) TypeScript를 추가하고 스크립트 이름을 RollingBall로 변경합니다. 아래와 같이 샘플 스크립트를 작성합니다.
import { ZepetoScriptBehaviour } from 'ZEPETO.Script';
import { Input, SystemInfo, Vector3, Rigidbody } from 'UnityEngine';
import { Text } from 'UnityEngine.UI';
export default class RollingBall extends ZepetoScriptBehaviour {
public debugText: Text;
public velocityMultiplier: number = 100;
private _rollingBall: Rigidbody;
Start() {
// 이 스크립트와 동일한 GameObject에 연결된 Rigidbody 구성 요소 가져오기
this._rollingBall = this.GetComponent<Rigidbody>();
// 장치가 자이로스코프를 지원하는지 확인
if (SystemInfo.supportsGyroscope) {
// 자이로스코프 활성화
Input.gyro.enabled = true;
} else {
// 자이로스코프가 지원되지 않는 경우 스크립트 비활성화
console.log("이 장치는 자이로스코프를 지원하지 않습니다.");
Input.gyro.enabled = false;
}
}
Update() {
// 입력 장치의 자이로스코프가 활성화되어 있는지 확인
if (Input.gyro.enabled) {
// x 및 z 축을 따라 자이로 값을 읽기
// Ball 객체의 안정적인 움직임을 위해 소수점 첫째 자리로 반올림
let gyroValueX = Math.round(Input.gyro.gravity.x * 10) / 10;
let gyroValueZ = Math.round(Input.gyro.gravity.y * 10) / 10;
// gyroValueX 및 gyroValueZ로 Ball의 속도 설정
this._rollingBall.velocity = new Vector3(gyroValueX * this.velocityMultiplier, 0, gyroValueZ * this.velocityMultiplier);
// 현재 자이로 값을 화면에 표시
this.debugText.text = "Input.gyro.gravity : " + Input.gyro.gravity.ToString();
}
}
}
스크립트 설명
- Ball 객체에 부착된 Rigidbody 구성 요소를 가져옵니다.
- 다음 값을 반올림합니다: Input.gyro.gravity.x 및 Input.gyro.gravity.z 값을 반올림하여 gyroValueX, gyroValueZ 값을 얻습니다.
- gyroValueX 및 gyroValueZ 값을 velocityMultiplier로 곱하여 Ball 객체에 속도를 부여합니다.velocity.
- 다음 값은 Input.gyro.gravity 값이 Text UI를 통해 화면에 표시됩니다.
📘 자이로스코프.gravity https://docs.unity3d.com/ScriptReference/Gyroscope-gravity.html
2) 작성한 RollingBall ZEPETOScript를 Ball 객체에 추가합니다. Hierarchy 창에서 ZEPETOScript Inspector 창에 표시된 속성에 Text UI를 드래그 앤 드롭하여 연결합니다.

모바일에서 테스트하기
1) QR 모바일 테스트로 예제 월드를 실행합니다.
2) 볼 객체는 장치 기울기에 따라 움직입니다.

❗️ 주의 다음 사항에 유의하십시오: Input.gyro는 모바일 환경에서만 작동합니다.
예제 적용하기
Input.gyro를 적용하여 ZEPETO 월드 내에서 ZEPETO 캐릭터를 이동할 수 있습니다.
1) TypeScript를 추가하고 스크립트 이름을 GyroMovement로 변경합니다. 아래와 같이 샘플 스크립트를 작성합니다.
import { ZepetoScriptBehaviour } from 'ZEPETO.Script';
import { Input, SystemInfo, Vector3 } from 'UnityEngine';
import { ZepetoCharacter, ZepetoPlayers, LocalPlayer } from 'ZEPETO.Character.Controller';
export default class GyroMovement extends ZepetoScriptBehaviour {
private _localCharacter: ZepetoCharacter;
Start() {
// 로컬 플레이어가 추가될 때의 리스너 추가
ZepetoPlayers.instance.OnAddedLocalPlayer.AddListener(() => {
this._localCharacter = ZepetoPlayers.instance.LocalPlayer.zepetoPlayer.character;
});
// 장치가 자이로스코프를 지원하는지 확인
if (SystemInfo.supportsGyroscope) {
// 자이로스코프 활성화
Input.gyro.enabled = true;
}
else {
// 자이로스코프가 지원되지 않는 경우 스크립트 비활성화
console.log("이 장치는 자이로스코프를 지원하지 않습니다.");
Input.gyro.enabled = false;
}
}
Update() {
if (Input.gyro.enabled) {
// 자이로스코프 중력의 x축 값 가져오기\
// 캐릭터의 안정적인 움직임을 위해 소수점 첫째 자리로 반올림
const gyroValue = Math.round(Input.gyro.gravity.x * 10) / 10;
const direction = new Vector3(0, 0, -gyroValue);
// 로컬 캐릭터 이동
this._localCharacter.Move(direction);
}
}
}
스크립트 설명
- 로컬 플레이어가 장면에 추가되면 ZEPETO 캐릭터 인스턴스를 받습니다.
- 값을 반올림하여 gyroValue 값을 얻습니다.
- ZEPETO 캐릭터를 Z축 방향으로 이동시키려면 direction을 매개변수로 Move() 함수에 전달합니다.
2) 장면에 GameObject를 추가하고 이름을 GyroGravity로 변경합니다. 생성한 GyroMovement ZEPETOScript를 추가합니다.

3) QR 모바일 테스트로 예제 월드를 실행할 때 ZEPETO 캐릭터가 장치의 기울기에 따라 이동합니다.

👍 팁
- 이 예제에서 사용된 Input.gyro.gravity 외에도 다양한 Input.gyro 함수를 사용할 수 있습니다.
- 이것을 다양한 아이디어에 적용할 수 있습니다. ZEPETO에서 재미있는 월드를 출시해 보세요!