카테고리 보관물: 개발

Unreal 동적으로 생성된 타일맵의 Navigation Paths 가 제대로 적용되지 않는 문제 해결

개요

개발 중인 게임에서 외부 자료로 타일맵을 생성하도록 작업했습니다. 모든 것이 정상이라고 생각되었는데 그 위에 StateTree 를 이용한 액터를 배치하니 이상한 현상이 있었습니다. 원래 Navigation Paths 가 생성된 곳에서만 동작을 하는 것이 원칙인데 그곳을 벗어나는 문제가 있었습니다.

문제 확인 및 범위 한정

에디터에서 게임을 실행하고 P(Navigation) 키를 눌러보면 검은색의 Paths 를 볼 수 있는데 이것이 전혀 나타나지 않았습니다.

Navigation Paths 가 제대로 나타나는 경우. 아래쪽 타일에 Collision이 적용되어 있다
Navigation Paths 가 제대로 나타나는 경우. 아래쪽 타일에 Collision이 적용되어 있다

C++ 코드를 이용해서 타일맵을 생성했습니다. 수동으로 생성한 타일맵에서는 정상적으로 나타났습니다. 동적으로 타일맵이 생성될 때 타이밍이나 등록 문제 때문에 정상적으로 동작하지 않는 것으로 판단되었습니다. 그래서 이 부분을 중심으로 이리저리 코드를 변경해 보았습니다. 그리고 이상한 점이 Outliner 에서 동적으로 생성된 타일맵을 한번 선택해 주면 정상적으로 동작했습니다. 아예 안되는 것은 아니라는 것을 확인했습니다.

해결

결국 등록과 관련한 문제였습니다. 다음과 같이 타이머를 이용해서 약간의 시간 지연 후 등록과정을 거치면 정상적으로 Navigation Paths 가 나타납니다.

FTimerHandle TimerHandle;
GetWorld()->GetTimerManager().SetTimer(TimerHandle, FTimerDelegate::CreateLambda([&]() {
    GetWorld()->GetTimerManager().ClearTimer(TimerHandle);

    UNavigationSystemV1* NavSystem = UNavigationSystemV1::GetCurrent(GetWorld());
    if (NavSystem) { 
        NavSystem->OnActorRegistered(this);
        NavSystem->Build();
    }
}), 0.2f, false);

핵심은 7번째 행인데 OnActorRegistered 메소드 수행 후 빌드해 주면 정상적으로 StateTree 를 사용한 액터가 정상적으로 동작하게 됩니다.

결과만 보았을 때는 간단한 것 같지만 이것을 알아내는데 상당한 시간이 소요되었습니다. 필자와 같은 문제를 겪은 분들께 도움이 되었으면 좋겠습니다.

안드로이드 스마트 워치 페이스 업로드 시 주의 사항

개요

이전에 소개 했던 스마트 워치용 괘종시계 페이스의 정보를 일부 수정하는 과정에서 이해할 수 없는 이유로 업데이트가 거부되었습니다. 이것에 관해서 알아보겠습니다.

업데이트 거부

초기 버전을 올리고 안내 사항이 있어서 기본 정보 문구를 추가했습니다. 그런데 다음과 같이 업데이트가 거부되었다는 메일이 왔습니다. 원래 있던 내용에서 단순히 문구만 추가했는데 거부되는 것은 납득이 되지 않았습니다.

업데이트 거부 안내 메일 일부 내용
업데이트 거부 안내 메일 일부 내용

거부 사유

세 가지 거부 사유가 있었는데 다음과 같습니다.

  • Wear 스크린샷
    Wear OS 스크린샷이 하나만 등록되어 있어 발생한 것 같았습니다. 최초 업로드 시에 점검해서 막아줄 수 있을 것 같은데 추후 업데이트 과정에서 거부 사유로 나타나는 것은 맞지 않는 것 같았습니다. 스크린샷을 더 등록해서 해결 했습니다.
  • Play 등록정보 설명
    이 사유의 상세 내용 중 이런 내용이 있었습니다. “Play 등록정보 설명에 Wear OS가 언급되어 있지 않습니다.” 앱의 분류가 이미 Wear OS 전용인데 설명에 Wear OS 문구가 없다고 거부 사유가 되는 것이 이상했습니다. 앱 설명에 Wear OS 문구를 넣어서 해결 했습니다. 이것도 최초 등록 시 검사해서 입력되도록 하는 것이 맞다는 생각이 들었습니다.
  • 시계 화면 항상 켜져 있는 화면에서 너무 많은 픽셀이 불이 들어옴
    이 사유는 뭔가 영문으로 된 것을 한글로 기계 번역 했다는 생각이 들었습니다. 아마도 Always On Display 관련한 문제라는 생각이 들었습니다. 시계 배경이 AOD 모드에서도 전부 나타나게 해서 문제가 된 것 같았습니다. AOD 모드일 때 배경이 나타나지 않도록 수정해서 해결 했습니다.

또 다른 거부 사유

문제를 모두 해결했다고 생각하고 다시 업데이트 요청을 했는데 또 거부 되었습니다. [발견된 문제: Wear 스크린샷] 이 거부 사유였고 상세 내용은 “앱의 Wear 스크린샷에 투명한 배경이나 마스킹이 포함되어서는 안 됩니다.” 이었습니다. 배경이 투명한 PNG 파일을 스크린샷으로 올렸는데 이것이 문제가 되었습니다. 투명한 배경을 제거하고 올려서 해결 했습니다. 이것도 스크린샷을 올릴 때 검사해서 미리 알려주는 것이 맞을 것 같은데 납득이 되지 않았습니다.

워치 페이스 관련한 작업을 진행하다 보니 기존 앱 관리 부분과 다르게 혼동이 될 여지가 많은 것 같았습니다. 처음이라 그런 부분도 있을 수 있겠지만 좀 더 명확한 화면 구성이 필요할 것 같았습니다. 개발자가 쓸데없이 시간을 버리지 않도록 미리 검사할 수 있는 부분은 업데이트 요청 전 확인을 할 수 있도록 하면 좋겠다는 생각이 들었습니다.

워치 페이스 관련해서 어려움을 겪으신 분들께 참고가 되었으면 합니다.