CinemachineでTPSカメラを作っているんだけど、Input System経由で動かしたいの。
CinemachineInputProviderを使えば出来るわ!
Cinemachine Free Look Cameraなど、プレイヤーの操作入力によって視点を動かすバーチャルカメラは、通常は内部的には旧式のInput Managerが使われます。
そのため、新しいInput Systemのみ機能している環境では、Input Managerを参照できずエラーとなってしまいます。
Input Systemを操作入力と使用したい場合は、CinemachineInputProviderコンポーネントを用いれば良いです。
参考:代替の入力システム | Cinemachine | 2.6.0
本記事では、CinemachineInputProviderを用いてInput System経由でカメラ操作を行う方法を解説していきます。
この作品はユニティちゃんライセンス条項の元に提供されています
- Unity 2021.1.25f1
- Cinemachine 2.7.9
- Input System 1.0.2
目次 非表示
パッケージのインストール
CinemachineとInput Systemを連携させるためには、両者のパッケージをインストールする必要があります。
両方インストールされていないと、CinemachineInputProviderを使うことができません。インストールされていない場合は、Package Managerよりインストールしてください。
なお、Input Systemをインストールすると、次のようなメッセージが表示されることがあります。
これは、旧型式のInput Managerを無効化して新しいInput Systemを有効化するかどうかを尋ねる画面です。Input Managerを使わないのであれば、YesボタンをクリックしてUnityを再起動してください。
ここまでの手順を成功させると、CinemachineInputProviderコンポーネントを追加できるようになります。
ここから先は、Cinemachineのカメラ設定がされている前提で解説を進めていきますので、設定が分からない方は以下ページをご覧ください。
旧Input Managerでキャラクターなどを操作している場合、ここでYesを選択するとInput Managerが無効化されて操作入力ができない状況に陥ります。Input Managerを併用したい場合は、メニューのEdit > Project Settings… > Player > Configuration > Active Input Handling*をBothに設定してください。
Input Actionsの設定
本記事では、カメラ制御専用のキーバインドを作成して使うことを前提に解説していきます。すでにキーバインドを設定している場合は、読み飛ばして問題ありません。
Input Actions定義ファイルの作成
トップメニューよりAssets > Create > Input Actionsの順に選択し、Input Actionsの定義ファイルを作成します。
どんな名前でも構いません。
キーバインドの定義
カメラ操作に使うキーバインド情報を作成していきます。必要な操作は、カメラ回転に使う2軸操作です。
先ほど作成したInput Actionsファイルをダブルクリックで開き、Action Mapsの右の+ボタンから新しいマップを作成します。
Actionsのアクション名(New actionの部分)を適当なものに変更し、Properties > Action項目を設定します。
2軸操作となるため、Action TypeにはValue、Control TypeにはVector 2を指定すればOKです。
アクションの三角マークをクリックし、<No Binding>をクリックし、Properties > Binding > Pathより2軸入力を設定します。
マウス移動を設定する場合は、Mouse > Deltaを選択します。
ここまでの設定が完了したら、Save AssetボタンをクリックしてInput Actionsの設定を保存してください。
これでInput Actionsの設定は完了です。
CinemachineInputProviderの追加
Input Systemでカメラ操作させたいバーチャルカメラオブジェクトにCinemachineInputProviderコンポーネントをアタッチします。
例では、TPSカメラ制御するCinemachine Free Look Cameraオブジェクトにアタッチすることとします。
なお、アタッチする場所は、バーチャルカメラオブジェクトおよびその子(孫含む)オブジェクトのどちらでも構いません。
無事に追加出来たら、次の項目を設定します。
- Player Index – プレイヤーのインデックス。シングルプレイヤーなら-1を設定します。
- XY Axis – XY方向のカメラ操作に割り当てるInput Actionを指定します。使用しない場合はnullを設定できます。
- Z Axis – Z方向のカメラ操作に割り当てるInput Actionを指定します。使用しない場合はnullを設定できます。
Cinemachine Free Look Cameraなどのバーチャルカメラでは、基本的にXY Axisしか使わないため、Z Axisはnullでも問題ありません。
感度調整について
Cinemachine FreeLook Cameraなどをマウスやスティックで動かしたい場合は、Axis Controlの速度や感度調整が必要になる場合があります。
また、マウスとスティック入力を同時に扱う場合、両者の入力値の大きさが全く異なり、入力値の大きさが同じになるような調整が必要になる場合があります。
マウスとスティック入力それぞれで感度を調整したい場合、Input ActionのProcessorの一つであるScaleが使えます。Scale Processorの使い方については、以下記事をご覧ください。
実行結果
Cinemachine Free Look CameraがInput System経由で操作できるようになりました。
また、バーチャルジョイスティックを適用すると、動画のような操作が実現できます。
バーチャルジョイスティックの実装方法については、以下記事で詳細に解説しています。
デモ動画のジョイスティック表示部分には、以下アセットを使用させていただきました。
バーチャルジョイスティックが使えると、スマホゲームにも対応できるね!
Input Systemを使いこなせば、様々なプラットフォームへの拡張がスムーズにできるようになるわ!
さいごに
Input System経由でCinemachineカメラを操作したい場合、CinemachineInputProviderを用いれば実現可能です。
事前にInput Systemパッケージのインストールと、Input Actionsの設定を行う必要があることに注意が必要です。
Unity公式が提供しているStarter Assetsでも、CinemachineとInput Systemを用いたカメラ操作を実現しています。
Starter Assetsの使い方は、以下記事でまとめていますので、必要ならばご参考にしてください。