void UpdateSkill()
{
// 공격할때 타겟 방향으로 회전
if (_lockTarget != null)
{
Vector3 dir = _lockTarget.transform.position - transform.position;
Quaternion quat = Quaternion.LookRotation(dir);
transform.rotation = Quaternion.Lerp(transform.rotation, quat, 20 * Time.deltaTime);
}
}
void OnHitEvent()
{
if (_stopSkill)
State = PlayerState.Idle;
else
State = PlayerState.SKill;
}
변수 _stopSkill에 따라서 animation Event가 발생했을 때 상태를 갱신하게 하였다.
void OnMouseEvent(Define.MouseEvent evt)
{
switch (State)
{
case PlayerState.Idle:
OnMouseEvent_IdleRun(evt);
break;
case PlayerState.Moving:
OnMouseEvent_IdleRun(evt);
break;
case PlayerState.SKill:
{
if (evt == Define.MouseEvent.PointerUp)
_stopSkill = true;
}
break;
}
}
기존에 OnMouseEvent에 있던 코드를 OnMouseEvent_IdleRun()으로 이동하였다.
void OnMouseEvent_IdleRun(Define.MouseEvent evt)
{
RaycastHit hit;
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
bool raycastHit = Physics.Raycast(ray, out hit, 100.0f, _mask);
// Debug.DrawRay(Camera.main.transform.position, ray.direction * 100.0f, Color.red, 1.0f);
switch (evt)
{
// 처음으로 누르는 순간 일어나는 이벤트
case Define.MouseEvent.PointerDown:
if (raycastHit)
{
_destPos = hit.point;
State = PlayerState.Moving;
// 처음은 공격가능한 상태로 표기한다.
_stopSkill = false;
if (hit.collider.gameObject.layer == (int)Define.Layer.Monster)
_lockTarget = hit.collider.gameObject;
else
_lockTarget = null;
}
break;
// 누르는 동안 일어나는 이벤트
case Define.MouseEvent.Press:
if (_lockTarget == null && raycastHit)
_destPos = hit.point;
break;
// 버튼을 떼면 공격모션을 취소해야한다.
case Define.MouseEvent.PointerUp:
_stopSkill = true;
break;
}
}
public PlayerState State
{
get { return _state; }
set
{
_state = value;
Animator anim = GetComponent<Animator>();
switch (_state)
{
case PlayerState.Die:
break;
case PlayerState.Idle:
anim.CrossFade("WAIT", 0.1f);
break;
case PlayerState.Moving:
anim.CrossFade("RUN", 0.1f);
break;
case PlayerState.SKill:
anim.CrossFade("ATTACK", 0.1f, -1, 0);
break;
}
}
}
애니메이터에서 Parameter와 Transtion을 다 제거하였다.
이후 애니메이션은 CrossFade함수를 통해 실행하도록 하였다.
다른 어셋에서 무기를 추출해서 플레이어에 달아주었다.
애니메이션이 잘 작동하고 타겟을 바라보는 것 까지 완성되었다.