---
title: Gyro 센서 활용하기
slug: world-sdk-guide-kr/gyro
docTags: 
createdAt: 2024-09-02T08:34:13.136Z
---

ZEPETO 월드를 만들 때, 장치의 기울기에 따라 다양한 월드 플레이 아이디어를 구현하기 위해 자이로 센서를 사용할 수 있습니다. 이 가이드는 ZEPETOScript 내에서 Input.gyro를 활용하는 방법을 보여줍니다.

:::hint{type="info"}
**📘 자이로스코프**
[https://docs.unity3d.com/ScriptReference/Gyroscope.html](https://docs.unity3d.com/ScriptReference/Gyroscope.html)
:::



## 객체 설정하기

1\) 계층 추가 > \[+] > 3D 객체 > 구 객체를 장면에 추가합니다.

2\) 객체의 이름을 Ball로 변경하고 Rigidbody 구성 요소를 추가합니다.

![](https://api.archbee.com/api/optimize/fCt3n1oCa8rgNJ8fw9I2N-V_tjRc4HXXgvqc9HApHTU-20240904-102419.png)



## 스크립트 작성하기

1\) TypeScript를 추가하고 스크립트 이름을 RollingBall로 변경합니다.
아래와 같이 샘플 스크립트를 작성합니다.

```typescript
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를 통해 화면에 표시됩니다.

:::hint{type="info"}
**📘 자이로스코프.gravity**
[https://docs.unity3d.com/ScriptReference/Gyroscope-gravity.html](https://docs.unity3d.com/ScriptReference/Gyroscope-gravity.html)
:::



2\) 작성한 RollingBall ZEPETOScript를 Ball 객체에 추가합니다.
Hierarchy 창에서 ZEPETOScript Inspector 창에 표시된 속성에 Text UI를 드래그 앤 드롭하여 연결합니다.

![](https://api.archbee.com/api/optimize/fCt3n1oCa8rgNJ8fw9I2N-8ysTWIE43qlIF8v4uoc-F-20240904-102419.png)



## 모바일에서 테스트하기

1\) QR 모바일 테스트로 예제 월드를 실행합니다.

2\) 볼 객체는 장치 기울기에 따라 움직입니다.

![](https://api.archbee.com/api/optimize/fCt3n1oCa8rgNJ8fw9I2N-imdoIv81Rz-3ltAWP814w-20240904-102427.gif)



:::hint{type="danger"}
**❗️ 주의**
다음 사항에 유의하십시오: `Input.gyro`는 모바일 환경에서만 작동합니다.
:::



## 예제 적용하기

Input.gyro를 적용하여 ZEPETO 월드 내에서 ZEPETO 캐릭터를 이동할 수 있습니다.

1\) TypeScript를 추가하고 스크립트 이름을 GyroMovement로 변경합니다.
아래와 같이 샘플 스크립트를 작성합니다.

```typescript
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를 추가합니다.

![](https://api.archbee.com/api/optimize/fCt3n1oCa8rgNJ8fw9I2N-74IJHaP7idj8ksq9R4HuP-20240904-102419.png)



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

![](https://api.archbee.com/api/optimize/fCt3n1oCa8rgNJ8fw9I2N-uFHS5kSA5kOn4yAFMvvXa-20240904-102427.gif)



:::hint{type="success"}
👍 **팁**

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

