Camera
Input Manager에 마우스 처리 기능을 추가한 후, Player Controller에서 화면 클릭 시 해당 좌표로 이동하게끔 구현했다.
private void Update()
{
if(_moveToDest)
{
// 바닥을 찍었을 때 그쪽으로 감
Vector3 dir = _destPos - transform.position;
// 도착했다면
if (dir.magnitude < 0.0001f)
{
_moveToDest = false;
}
else
{
transform.position = transform.position + dir.normalized * _speed * Time.deltaTime;
transform.LookAt(_destPos);
}
}
}
이동은 하는데... 무서워졌다... 😑
목적지 근처에 도착하고 나서도 계속 해당 위치로 이동하려고 하기 때문에 이런 현상이 발생한다.
=> Mathf.Clamp 함수를 이용하여 최대값, 최소값을 지정해 주면 해결 가능하다.
private void Update()
{
if(_moveToDest)
{
// 바닥을 찍었을 때 그쪽으로 감
Vector3 dir = _destPos - transform.position;
// 도착했다면
if (dir.magnitude < 0.0001f)
{
_moveToDest = false;
}
else
{
float moveDist = Mathf.Clamp(_speed * Time.deltaTime, 0, dir.magnitude);
transform.position += dir.normalized * moveDist;
transform.LookAt(_destPos);
}
}
}
로테이션 X가 자꾸 수정되는데 왜 이러는지는 잘 모르겠다...
=> 방금 해결했다! Rigidbody의 Is Kinematic을 꺼 놔서 물리가 적용되고 있었다!!!
Raycast를 이용해 벽을 만나면 카메라 위치 이동하기.
현재 캐릭터의 기준점이 발인 것과 조금 더 부드럽게 처리하게끔 수정하고 싶다.
Animation 기초
Animation: 레거시 애니메이션, 구 버전에서 사용하던 애니메이션(요즘은 사용 잘 안 함...)
Animator: 메카님 애니메이션
Animator를 컨트롤하는 Animator 전용 Controller를 만들어서 사용해야 한다.
Animation Blending
부자연스럽게 애니메이션이 끊긴다...
=> blending 기술 이용! 일정 비율로 애니메이션을 재생한다.
State 패턴
public enum PlayerState
{
Die,
Moving,
Idle,
}
PlayerState _state = PlayerState.Idle;
움직이는 상태에서 스킬 처리가 들어가게 되면, 까다로워지기 시작한다.
State Machine
transition을 만들어 주면, 블렌딩 처리를 코드에서 하지 않아도 된다.
Has Exit Time: 끝나는 지점이 있으면 빠져 나와라.
Fixed Duration: check 시, Exit Time(절대 초 기준)으로 작동한다. check 해제 시, Exit Time(퍼센트 기준)으로 작동한다.