CameraControllerはInputSourceというコンポーネントで、カメラへの入力を制御します。
デフォルトだとUnityInputSourceというアセットで用意されているものがあります。これでも動かせないことはないですが、入力については他のアセットをつかったりするなど、入力の動作はアプリによって異なることが多いと思います。
このUnityInputSourceを直接書き換えるのは良くないと思います。アセットが更新されたら上書きされちゃうと思いますし。
CameraControllerもそれは分かっているようで、処理を自分で書きやすいようにしてくれているみたいです。
僕がやったときはRewiredという入力管理のアセットを使ったので、それを通すようにスクリプトを作りました。
その辺について書いていきます。
InputSourceインターフェースをもったMonoBehaiviour
実際に、Rewiredを通すようなスクリプトを書いていきます。
一応、C#というかプログラム言語自体の「継承」なんかの概念の知識も必要になります。多少ですが。
1 2 3 4 5 6 7 |
using UnityEngine; using Rewired; using com.ootii.Input; public class MyInputSource : MonoBehaviour,IInputSource { } |
VisualStudioのコード補完を使うと楽です。上のコードを書いてから、IInputSourceのあたりにマウスを持っていくと下画像のようなコード補完のウィンドウが表示されると思います。
ここでインターフェイスを実装しますをクリック。

一気にべらっとコードが補完されたと思います。
これが実装するべきメソッドです。
沢山ありますが、とりあえず動かすのであれば全部を実装する必要はないみたいです。
とりあえずは
- ViewX
- ViewY
- GetValue(string rAction)
- IsPressed(string rAction)
ここら辺を実装します。
ViewXはカメラのX軸(横)の移動です。
ViewYはカメラのY軸(縦)の移動です。
GetValueとIsPressedはActionAliasに設定されている文字列が渡されます。ズーム機能の場合だとCamera Zoomとかが渡されます。
ViewXはこんな感じにしました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
bool _isEnable = true; public bool IsEnabled { get => _isEnable; set => _isEnable = value; } public float ViewX { get { if (!_isEnable) { return 0f; } float valueX = _player.GetAxis("CameraHorizontal"); if (_player.GetButton("CameraRight")) { valueX++; } if (_player.GetButton("CameraLeft")) { valueX--; } return valueX; } } |
_playerはRewiredのPlayerクラスです。
全部の例は挙げませんが、上のような感じで好きに入力の元を変更できます。デフォルトのUnityInputSourceだとUnity自体の入力処理であるInput.Getbuttonとかを使ってます。
先に挙げた4つのメソッドを実装して、実行中にNotImplemetntedExceptionエラーがでたらそのメソッドを実装するようにすれば良いかと。
要は、カメラの動きは共通だけども入力だけを別に抜き出してあるみたいな感じです。
この入力だけは自分で実装してみたら良いんじゃない? っていう風になってます。