using Animation; using UnityEngine; public class PlayerController : MonoBehaviour { [SerializeField] private float _speed = 5.0f; private PlayerState _state = PlayerState.Idle; private AnimatorManager _mAnimator; private Vector3 _destPos; enum AnimatorParam { speed, // atk_speed, // attack, run, } enum PlayerState { Idle, Move, Attack, Die } void Start() { _mAnimator = new AnimatorManager(GetComponent()); Manager.Input.MouseAction -= OnMouseClicked; Manager.Input.MouseAction += OnMouseClicked; } void Update() { switch (_state) { case PlayerState.Idle: UpdateIdle(); break; case PlayerState.Move: UpdateMove(); break; case PlayerState.Attack: break; case PlayerState.Die: break; } } void OnMouseClicked(Define.MouseEvent evt) { if (_state == PlayerState.Die) return; switch (evt) { case Define.MouseEvent.Down: Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); Debug.DrawRay(Camera.main.transform.position, ray.direction*100.0f, Color.red, 1.0f); RaycastHit hit; if (Physics.Raycast(ray, out hit, 100.0f, LayerMask.GetMask("Ground"))) { _destPos = hit.point; _state = PlayerState.Move; } break; case Define.MouseEvent.Up: break; } } void UpdateIdle() { _mAnimator.SetValue(AnimatorParam.speed, 0); } void UpdateMove() { Vector3 dir = _destPos - transform.position; if (dir.magnitude < 0.001f) _state = PlayerState.Idle; else { float moveDist = Mathf.Clamp(_speed * Time.deltaTime, 0, dir.magnitude); transform.position += dir.normalized * moveDist; Vector3 targetDir = new Vector3(dir.x, 0, dir.z).normalized; if(targetDir != Vector3.zero) transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(targetDir), 0.15f); } _mAnimator.SetValue(AnimatorParam.speed, _speed); } void UpdateAttack() { } }