eaglesakuraの技術ブログ

技術的な話題とか、メモとか。

Unity学習の整理 Inputの基本

InputManager

  • Edit > Project Settings Input でInspectorが開ける
  • 各入力のデフォルトを指定できる
  • 項目名 Horizontal Vertical とか Fire とかの定義もここに入れられる

直近nフレームの入力を得る

  • UniRxで書くとこうなる

    • UniRx標準では Cache に相当する機能を見つけられなかったのでかんたんなOperatorを定義する
    • CacheObservable for UniRx
    • UniRxでは Buffer(n, 1) で 表現できると教えていただいた
  • ここでは直近2フレームをキャッシュする

    • データが A,B,C,D,E,F,G... と流れてくる場合
    • A,B > B,C > C,D... のように直近n個をキャッシュする
    • 入力を開始した瞬間 入力を終了した瞬間 直近の行動をチェックして格ゲーのコマンドのように扱う ようなことを行う
gameObject.UpdateAsObservable()
    .Select(_ => new Vector2(Input.GetAxis("Horizontal"), Input.GetAxis("Vertical")))
    .ObserveOnMainThread(MainThreadDispatchType.FixedUpdate)
    .Buffer(2, 1)
    .Subscribe(Lifecycle, list => Walk(list[0], list[1]));