ぷろみん

プログラミング的な内容を扱ってます

Unityの新入力システム

Unityの入力システムは汎用性が低い

Unityはマルチプラットホームという利点がありますが、入力システムの汎用性は低いです。
当然同一で処理したいタッチ処理とマウスクリック処理を別々に書かなければいけなかったり、マルチプレイヤーゲームで1プレイヤーはキーボード操作、1プレイヤーはコントローラーといったことをするのに複雑な機構が必要になってしまいます。
また、プレイヤーの状態に合わせて操作を変更したいというのは自然な要望ですが、それにも対応していませんでした。 そこでUnityでは新しい入力システムとしてPlayerInputという機能をβ版で発表しています。

新しい入力システム

新しいインプットシステム、一緒に開発しませんか? – Unity Blog

また、こちらのコードがgithubにも上がっています。

https://github.com/Unity-Technologies/input-prototype

どういった機能なのかは動画を見てもらうのが一番早いかと思います。

youtu.be

今までとは何が違うのか

今まではProjectSettings/InputManager.asset等に保存していたため、プロジェクト全体でグローバルに入力システムを運用する必要がありスコープが広い上に指定も文字列でやらなければいけない等、とても積極的に使いたいシステムではありませんでした。

この新しいシステムではプレイヤーのある状態でのキーマップをActionMapとして作成し、そのアクションマップを状態に合わせて切り替えることでキーコンフィグを動的に切り替えることができるようになります。

これによってコード上では

if(firstPersonControls.fire.isHeld){ ... }

という風に入力システムを意識しない統一的なアクションでコーディングできるようになります。

未来と生きるために

Unityでは難しいことを簡単にするという明確なミッションがあります。なので、VR等の最先端の技術や新しいデバイスの対応をどんどんしていくことになるでしょう。
例えば、このゲームをViveコントローラとOculus Touchに対応して欲しいと言われた際にそれぞれがインハウスで開発するのはいかにも時間の無駄です。
この機能が入れば、そのDeviceProfile機能で入力とアクションをマッピングできるようになるかもしれません。
汎用的な機能が入ればAssetStoreに各デバイスのプロファイラーやマッパーがリリース会社から提供されることが期待できるので信頼性もあがります。

良きデベロッパーのために

Unityはスコープがゆるかったりパブリックにするように設計されていたりで悪いデベロッパーを育てる側面が強いです。
しかし、Unityは新しい機能で確かに問題を切り分けて良い設計ができるようにしています。
この思想にのって、ステートマシンという概念、ステート毎の入力(アクションマップ)、どのスクリプトで入力を取得すべきか。を学習することは良いデベロッパーへの近道に思えてなりません。