using UnityEngine; public class PlayerController : MonoBehaviour { [SerializeField] private PlayerMove playerMove; [SerializeField] private CameraMove cameraMove; [SerializeField] private CharacterAttack characterAttack; private InputSystem_Actions _inputActions; private bool _controlEnabled = true; private void Awake() { _inputActions = new InputSystem_Actions(); } private void OnEnable() { _inputActions.Player.Enable(); } private void OnDisable() { _inputActions.Player.Disable(); } // ゲーム状態に応じて入力と進行中の攻撃を停止・再開する public void SetControlEnabled(bool controlEnabled) { _controlEnabled = controlEnabled; if (!controlEnabled) characterAttack.CancelAttack(); } private void Update() { if (!_controlEnabled) return; var moveInput = _inputActions.Player.Move.ReadValue(); var lookInput = _inputActions.Player.Look.ReadValue(); // カメラを回す cameraMove.Look(lookInput); // カメラの向きを基準に移動方向を作る var forward = cameraMove.PlanarForward; var right = cameraMove.PlanarRight; var direction = forward * moveInput.y + right * moveInput.x; direction = Vector3.ClampMagnitude(direction, 1f); // 実際の移動はPlayerMoveに任せる playerMove.Move(direction); // 攻撃の発動 if (_inputActions.Player.Attack.WasPressedThisFrame()) characterAttack.Attack(); } }