---
title: ジャイロセンサーの活用
slug: world-sdk-guide-ja/aklNOugPsPYXpHku6r6wM
docTags: 
createdAt: 2024-09-02T08:34:13.136Z
---

ZEPETO Worldを作成する際、デバイスの傾きに応じてさまざまなワールドプレイのアイデアを実装するためにジャイロセンサーを使用できます。このガイドでは、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軸に沿ったジャイロ値を読み取る
            // ボールオブジェクトの安定した動きのために小数点以下1桁に丸める
            let gyroValueX = Math.round(Input.gyro.gravity.x * 10) / 10;
            let gyroValueZ = Math.round(Input.gyro.gravity.y * 10) / 10;
     
            // ジャイロ値を使ってボールの速度を設定
            this._rollingBall.velocity = new Vector3(gyroValueX * this.velocityMultiplier, 0, gyroValueZ * this.velocityMultiplier);
     
            // 現在のジャイロ値を画面に表示
            this.debugText.text = "Input.gyro.gravity : " + Input.gyro.gravity.ToString();
        }
    }
}
```



スクリプトの説明

- ボールオブジェクトに付属しているRigidbodyコンポーネントを取得します。
- 次の値を丸めます：`Input.gyro.gravity.x` と `Input.gyro.gravity.z` の値を取得して、gyroValueX、gyroValueZの値を得ます。
- ボールオブジェクトに速度を与えるために、gyroValueXとgyroValueZの値をvelocityMultiplierで掛け算して、`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をボールオブジェクトに追加します。
ヒエラルキーウィンドウで、ZEPETOScriptインスペクタウィンドウに表示されるプロパティに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軸値を取得\
            // キャラクターの安定した動きのために小数点以下1桁に丸める
            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で楽しいワールドをリリースしてみてください！
:::

