移動の操作
スマホの加速度センサーを使い、強い湯揺れを検知したら「歩」として検知し、移動処理を追加しましょう。
スクリプト
スマホは純粋の万歩計がないが、加速度センサーで動きを検知ができる。「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」にアタッチし、キーボードで確認しましょう:

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