과제를 하는 중에 WorldtoScreenPoint를 ScreenToWorldPoint로 오타내서 Flip이 잘 되지 않는 현상이 나타났다.

차이점이 궁금하여 찾아본 결과

ScreenToWorldPoint( ) : 화면 좌표(스크린 좌표)를 절대 좌표(월드 좌표)로 변환

WorldtoScreenPoint( ) : 월드 좌표를 화면 좌표로 변환

 

여기서 생각해야 할 점은 화면 좌표는 상대 좌표가 아니라는 점이다. (일단 저는 처음에 그렇게 이해해서 헷갈렸습니다...)

화면 좌표는 0, 0은 게임 화면의 좌측 하단이다. 아래 코드는 Player에 넣은 스크립트로, Player GameObject 자체가 월드 좌표이다. 즉, 마우스 위치를 Player라는 월드 좌표로 바꿔주어야 캐릭터를 기준으로 마우스의 벡터값을 계산할 수 있다.

private void OnLook(InputValue value)
{
    // Debug.Log("OnLook" + value.ToString());
    Vector2 newAim = value.Get<Vector2>(); // 마우스 포지션을 받아온다
    Vector2 worldPos = _camera.ScreenToWorldPoint(newAim); // 마우스 위치를 절대 위치로 바꾼다
    newAim = (worldPos - (Vector2)transform.position).normalized; // 캐릭터와 마우스 커서까지의 거리와 방향
    CallLookEvent(newAim);
}

이미 화면 좌표인 마우스 좌표를 또다시 스크린 포지션으로 변환시키려 해서 이상한 값이 나왔던 것이다.

 

어려운 개념이라는데 이해해서 뿌듯하당

+ Recent posts