using System; using UnityEngine; namespace DefaultNamespace.NonSolid { [RequireComponent(typeof(CharacterController))] public class PlayerController : MonoBehaviour { [SerializeField] private float _speed = 10.0f; [SerializeField] private float _rotationSpeed = 60.0f; [SerializeField] private Transform _shootSpawn; [SerializeField] private Rigidbody _projectilePrefab; [SerializeField] private float _shootForce = 10.0f; [SerializeField] private FireType _fireType = FireType.Bullet; private CharacterController _controller; private Vector3 _movement = Vector3.zero; private float _rotation = 0.0f; private bool _isFiring = false; private void Awake() { _controller = GetComponent(); } private void Update() { HandleInput(); Move(); Fire(); } private void HandleInput() { _movement = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical")); _movement *= _speed * Time.deltaTime; _rotation = Input.GetAxis("Mouse X") * _rotationSpeed * Time.deltaTime; _isFiring = _isFiring || Input.GetButtonDown("Fire1"); } private void Move() { _controller.Move(_movement); _controller.transform.Rotate(Vector3.up, _rotation); } private void Fire() { if (!_isFiring) return; _isFiring = false; switch (_fireType) { case FireType.Bullet: Rigidbody projectile = Instantiate(_projectilePrefab, _shootSpawn.position, _shootSpawn.rotation); projectile.AddForce(_shootSpawn.forward * _shootForce, ForceMode.Impulse); break; case FireType.Spell: break; case FireType.Arrow: break; default: throw new ArgumentOutOfRangeException(); } } } }