본문 바로가기

유니티

[유니티] 캐릭터 움직임 에러

문제 아바타 움직임이 이상함

 

1. 문제점 파악

- 현재상태 

 - 어느키를 누르든 휘는 모양으로 스스로 돌아버리면서 움직임

 

가는방향을 보는게 이상함

 private void LookAtDestination()
 {
     Vector3 dir = moveDest - transform.position;
     float yawAngle = Mathf.Atan2(dir.z, dir.x);
     yawAngle *= Mathf.Rad2Deg;
     transform.rotation = Quaternion.Euler(0f, -(yawAngle - 90f), 0f);
 }

 

- 원인

LookAtDestination() 는 moveDest의 방향이 어디인지 받고 써야하는것임

Update에 그냥 함수를 넣게된다면  Y값이 그냥 들어가버림

 

2. 해결하기

- 목적지 정하기

    private void LookAtMouse()
    {
        //내 위치를 스크린으로 
        1. Vector3 worldToScreen = Camera.main.WorldToScreenPoint(transform.position);
        2. Vector3 mousePos = Input.mousePosition;
        3. Vector3 dir = mousePos - worldToScreen;

        4. float angle = Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg;

        5. transform.rotation =
            Quaternion.Euler(0f, -(angle - 90f), 0f);
    }

 

1, 2 - 내위치를 스크린으로 보낸 위치 벡터와 마우스위치벡터 만들기

3 -     방향 벡터 구하기 

4 -     각도 구하기 역탄젠트 공식은 y/x,  x는 밑변, y는 높이라 가정 하고 Atan2에는 높이 밑변을 각각 전달(Atan에는 높이/밑변의 비율을 인자로 전달하고 끝) 

3. 알게된 점

방향의 각도를 알기 위해서는 목적지 방향 벡터가 필요하다.

4. 의문스러운점

dir.z가 아니라 왜 dir.y일까?

 

참고한 블로그

https://coder-bok.tistory.com/58

https://hustlehustle.tistory.com/19