Skip to main content

移動の操作

スマホの加速度センサーを使い、強い湯揺れを検知したら「歩」として検知し、移動処理を追加しましょう。

スクリプト

スマホは純粋の万歩計がないが、加速度センサーで動きを検知ができる。「StepDetector」というスクリプトを作成し、歩調を検知しましょう。なお、回転と同様に、まずキーボードを使い、PCで確認できるようにしましょう。

// 歩調を検知する
public class StepDetector : MonoBehaviour
{
    // 検知したときのイベント宣言
    public event System.Action Step;

    // 1歩の時間
    [SerializeField] private float stepTime = 0.2f;
    
    // 次の歩までの時間
    private float waitTime;
    
    private void Start()
    {
        waitTime = stepTime;
    }
    
    private void Update()
    {
        // 次の歩までの時間になっていない
        if (waitTime > 0)
        {
            // 待機時間を減らす
            waitTime -= Time.deltaTime;
            return;
        }
        
        // 入力ある?(0以上)→なければ終わり
        if (Input.GetAxis("Vertical") <= 0)
            return;
        
        // 1歩進み、時間をリセット
        Step?.Invoke();
        waitTime = stepTime;
    }
}

そして、イベントに登録し、前を進む「MoveController」は:

// レーダーの移動を制御する
public class MoveController : MonoBehaviour
{
    // 歩調を検知するため
    [SerializeField] 
    private StepDetector stepDetector;
    
    // 1歩進んでら、移動する量
    [SerializeField] private float stepDistance = 0.75f;

    private void Start()
    {
        // 「歩」イベントに登録
        stepDetector.Step += OnStep;
    }

    private void OnDestroy()
    {
        // イベント登録解除
        stepDetector.Step -= OnStep;
    }

    // 1歩を検知した
    private void OnStep()
    {
        // 地図を下の方に移動(前に進むように見える)
        transform.position += Vector3.down * stepDistance;
    }
}

この2つのスクリプトを「MapTranslation」にアタッチし、キーボードで確認しましょう:

image.png

加速度センサーで歩調を検知