ゲームパッドの左スティックでカメラの移動
右スティックでカメラのパン・チルト調整を行うように実装してみました。
次のクラスを Camera にアタッチすると機能します。
TPSCameraBehaviour.cs
using UnityEngine; using UnityEngine.Experimental.Input; [RequireComponent(typeof(Camera))] public class TPSCameraBehaviour : MonoBehaviour, ICameraActions { [SerializeField] TPSCameraInput cameraInput; void Awake() { cameraInput.Camera.SetCallbacks(this); } void Start() { _camera = GetComponent<Camera>(); } void Update() { var nextEuler = _camera.transform.eulerAngles; nextEuler += _cameraRotateEuler; _camera.transform.eulerAngles = nextEuler; _camera.transform.LookAt(_camera.transform.forward + _camera.transform.position); _camera.transform.position += _cameraVelocity; } void OnEnable() { cameraInput.Enable(); } void OnDisable() { cameraInput.Disable(); } public void OnLeftStick(InputAction.CallbackContext context) { var value = context.ReadValue<Vector2>() * 0.1f; _cameraVelocity = _camera.transform.right * value.x; _cameraVelocity += _camera.transform.forward * value.y; } public void OnRightStick(InputAction.CallbackContext context) { var value = context.ReadValue<Vector2>(); _cameraRotateEuler.y = value.x; _cameraRotateEuler.x = -value.y; _cameraRotateEuler.z = 0; } public void OnLeftClick(InputAction.CallbackContext context) { Ray ray = _camera.ScreenPointToRay(_mousePosition); // GameManager.Instance.SetAgentDestination(ray); } public void OnMousePosition(InputAction.CallbackContext context) { _mousePosition = context.ReadValue<Vector2>(); } Camera _camera; Vector3 _cameraVelocity = Vector3.zero; Vector3 _cameraRotateEuler = Vector3.zero; Vector2 _mousePosition = Vector2.zero; }
上記で登場する TPSCameraInput ・ ICameraActions クラスは自動生成されたものです。
Assets > Create > InputActions で TPSCameraInput という名前で InputActions を作成すると作られます。
内部の ActionMaps に Camera を追加すると ICameraActions クラスが作られます。