728x90
1. enum으로 상태값 정의
2. 상태에 따른 함수 정의
3. 상태만 변경해서 사용
float wait_run_ratio;
PlayerState _state = PlayerState.Idle;
public enum PlayerState
{
Die,
Moving,
Idle,
}
void UpdateDie()
{
}
void UpdateMoving()
{
Vector3 dir = _destPos - transform.position;
if (dir.magnitude < 0.0001f)
{
_state = PlayerState.Idle;
}
else
{
float moveDist = Math.Clamp(_speed * Time.deltaTime, 0, dir.magnitude);//clamp는 시작 값 끝값에 대한 거리값 덮어써줌
transform.position += dir.normalized * moveDist;
transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(dir), 20 * Time.deltaTime);
transform.LookAt(_destPos);
}
wait_run_ratio = Mathf.Lerp(wait_run_ratio, 1, 10.0f * Time.deltaTime);
Animator anim = GetComponent<Animator>();
anim.SetFloat("wait_run_ratio", wait_run_ratio);
anim.Play("WAIT_RUN");
}
void UpdateIdie()
{
wait_run_ratio = Mathf.Lerp(wait_run_ratio, 0, 10.0f * Time.deltaTime);
Animator anim = GetComponent<Animator>();
anim.SetFloat("wait_run_ratio", wait_run_ratio);
anim.Play("WAIT_RUN");
}
void Update()
{
switch (_state)
{
case PlayerState.Die:
UpdateDie();
break;
case PlayerState.Moving:
UpdateMoving();
break;
case PlayerState.Idle:
UpdateIdie();
break;
}
}
728x90
'Unity' 카테고리의 다른 글
[Unity][방법] AI 길찾기 사용방법 (0) | 2022.10.10 |
---|---|
[Unity][방법] 애니메이션 파라미터 조건으로 사용하기 (0) | 2022.10.06 |
[Unity][방법] 에니매이션 합성하여 호출하는 방법 (0) | 2022.10.06 |
[Unity][팁] 유용한 Math함수 (0) | 2022.10.05 |
[Unity][팁] transform.LookAt을 사용하여 오브젝트가 나를 바라보도록 (0) | 2022.10.05 |