長いタイトルですよね。反省してます。
タイトル通り、
Chinemachine FreeLook のInput Axis Nameをコントローラーとマウス間で動的に切り替えたいと思ったのですが、参考記事が見つからなかったので自力でなんとかなったので備忘のため書き起こしておきます。
ちなみに、入力にはInput Managerを使用しています。
Input Systemではもっとスマートにできるのかもしれませんが、
すでにInput Managerで作り込んでしまったので後戻りもできず、とりあえず頑張って対応してみた次第です。
おさらい Chinemachine FreeLook とは?
3人称視点ゲーム用のカメラです。
デフォルトでは、マウスを上下左右に動かすと視点が動くようになっています。
これをコントローラー(ゲームパッド)とマウスを両方とも対応させたいと思います。
Input Managerの定義名はどこに入れる?
下図の赤枠部分です。「Input Axis Name」というところで、X軸とY軸の2つを登録する必要があります。
どうやって動的に切り替えるのか
ここからが本題です。
要は、上で説明させていただいた「Input Axis Name」を動的に切り替えられればOKなのです。
スクリプトでこれを実装していきます。
public CinemachineFreeLook VCamera;
public class CameraAction : MonoBehaviour
{
void Update()
{
//視点移動をコントローラ操作に切り替え
if (Input.GetAxis("Axis 3") != 0 || Input.GetAxis("Axis 4") != 0)
{
// X AxisのInput Axis Nameを変更
VCamera.m_XAxis.m_InputAxisName = "Axis 3";
// Y AxisのInput Axis Nameを変更
VCamera.m_YAxis.m_InputAxisName = "Axis 4";
}
//視点移動をマウス操作に切り替え
else if (Input.GetAxis("Mouse X") != 0 || Input.GetAxis("Mouse Y") != 0)
{
// X AxisのInput Axis Nameを変更
VCamera.m_XAxis.m_InputAxisName = "Mouse X";
// Y AxisのInput Axis Nameを変更
VCamera.m_YAxis.m_InputAxisName = "Mouse Y";
}
}
}
Axis 3とAxis 4 はコントローラーの右側ジョイスティックの入力です。
Mouse XとMouse Yはマウスの入力です。
上記のようなアナログ入力はニュートラルな状態を"0"とし、入力があった場合はマイナスとプラスの値で表現されますので"0"でない場合の条件式をUpdateに入れておけば、コントローラーとマウスのどちらを操作しているのか判別が可能となります。
実際にInput Axis Nameに値を適用しているコードが下記となります。
コントローラーのジョイスティックを入力値としてセット
// X AxisのInput Axis Nameを変更
VCamera.m_XAxis.m_InputAxisName = "Axis 3";
// Y AxisのInput Axis Nameを変更
VCamera.m_YAxis.m_InputAxisName = "Axis 4";
マウスの動きを入力値としてセット
// X AxisのInput Axis Nameを変更
VCamera.m_XAxis.m_InputAxisName = "Mouse X";
// Y AxisのInput Axis Nameを変更
VCamera.m_YAxis.m_InputAxisName = "Mouse Y";
終わりに
かなり荒技ですが、スクリプトで制御が可能となりました。
マウスとコントローラーを同時に操作されない限りはこれで十分かなと思いますね。
そんな人いないと思いますけども。。。
以上となります。参考になれば幸いです。
Komentáře