InputSystemでマウスの位置を継続的に読み取る方法は?
InputManagerでは、Input.mousePositionに相当するポジションの継続的な読み取る方法がわからなかったので調べてみました。結果的には2つのやり方がわかったのでそのやり方を備忘録的に記載しておきます。
アクションマップにValueタイプで登録
ActionMapにMoveのようなアクション名で登録したアクションを登録しておき、ValueタイプでVector2型を登録しておきます。
イベント発火された際の座標をローカル変数に記録しておく
コールバックイベントが発火された時にコンテキストからマウスのスクリーン座標をローカル変数を記録しておいて、必要になったタイミングでそのローカル変数を使用する方法。
private Vector2 m_currentMousePosition;
// マウス座標が更新された時に通知するコールバック関数
public void OnMousePosition(InputAction.CallbackContext _context) {
m_currentMousePosition = _context.ReadValue<Vector2>();
}
void Update() {
var worldPosition = Camera.main.ScreenToWorldPoint(m_currentMousePosition);
}
ポーリングで常に取得する
必要なタイミングでポジションを取得して利用する方法。アクション名が必要になるので管理がちょっと面倒だけどInput.mousePosition的に使えるので直感的かも。
private PlayerInput m_playerInput;
void Start() {
m_playerInput = gameObject.GetComponent<PlayerInput>();
}
void Update() {
var mousePosition = m_playerInput.actions["Move"].ReadValue<Vector2>();
var worldPosition = Camera.main.ScreenToWorldPoint(mousePosition);
}
好きな方を使えばいいと思うけど、個人的には管理のし易さ的には前者かな。