Practice_Unity/Assets/Scripts/Controllers/PlayerController.cs
Seonkyu.kim 04c6301b7c 작업
1. 애니메이터 매니저 완성
2. 플레이어 컨트롤러 마우스 이동 부분 만들어 야 함
  - 이전꺼 넣어서 해보려는데도 도저히 되지가 않는다...
2025-09-18 17:58:51 +09:00

107 lines
2.6 KiB
C#

using Animation;
using UnityEngine;
public class PlayerController : MonoBehaviour
{
[SerializeField]
private float _speed = 5.0f;
private PlayerState _state = PlayerState.Idle;
private AnimatorManager<AnimatorParam> _mAnimator;
private Vector3 _destPos;
enum AnimatorParam
{
speed,
// atk_speed,
// attack,
run,
}
enum PlayerState
{
Idle,
Move,
Attack,
Die
}
void Start()
{
_mAnimator = new AnimatorManager<AnimatorParam>(GetComponent<Animator>());
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()
{
}
}