프로젝트 애니메이션등에 쓰려고 구글링을 통해 DOTween을 알게 되었다.
그 중에서 콜백이 제일 필요한 기능이기도 했다.
녹스에서 실행한 뒤 게임에 버그가 있어 뒤지다보니 그 원인이 DOTween에 있었다.
코드오류라고 판단하고 몇시간을 삽질하다 명확하게 이상한 부분에 로그를 남겨 확인해보다 5번 실행되게 해놓은 함수를 6번 실행하는 로그가 남는걸 확인했다.
해당 함수를 TweenCallback으로 실행하고 있었기에 따로 간단한 테스트코드를 작성해서 에디터와 안드로이드 두곳에서 실행해보니 에디터상에서도 확인할 수 있는 버그였다.
빈도가 안드로이드에서 더 빈번하게 나는 것 뿐이었다.
버그가 발생하는 조건이 있었는데 Sequence에 AppendCallback, AppendInterval을 같이 사용해 총 100회를 실행하게 했을 경우 102회의 콜백을 했다.
에디터에서는 처음 한번 오작동한후 그 후에는 정상작동하였지만 안드로이드의 경우에는 지속적으로 1~2회 더 중복콜백하는 결과가 나왔다.
2017년 11월 4일 토요일
유니티에서 SpriteAtlas 사용시 주의사항
유니티 5.x 버전에서 SpritePacker를 사용했었는데 2017로 넘어오면서 SpritePacker를 사용할 수 없었다.
그래서 구글링을 좀 해봤더니 SpritePacker가 SpriteAtlas를 사용하게끔 바꼈다는 글을 보게 되었다.
사용법이 이해되지 않아 좀 헤매긴 했지만 여러 예제를 참조하며 프로젝트에 적용했다.
패킹이미지와 원본이미지가 둘 다 APK파일 안에 들어가는 이상한 점이 있긴하다.
그렇게 적용하고 프로토타입이 완성되어 프로파일링을 하게 되었는데 object count가 지속적으로 증가하는 현상이 발견되었다.
처음에는 코드적 오류인가 싶어서 이것저것 테스트를 해봤지만 object count가 늘어나지않아 또 삽질을 시작했다.
그러다 스프라이트 이미지를 바꿀때 object count가 미친듯이 늘어나는 것을 확인하게 되었다.
결론적으로 여러 예제에서 볼수있었던 SpriteAtlas.GetSprite(string) 이 함수를 호출해 sprite를 가져올때마다 object count가 증가하고 있었다.
아직도 이해가 안가는건 가져와서 sprite에 넣었다가 다른 sprite로 변경되면 참조값이 없어지면서 gc에 의해 사라진다던지 해야되는게 아닌가하는 생각이 들긴하지만 사용할 sprite를 전부 캐싱해서 사용하는 방법으로 해결을 보게 되었다.
그래서 구글링을 좀 해봤더니 SpritePacker가 SpriteAtlas를 사용하게끔 바꼈다는 글을 보게 되었다.
사용법이 이해되지 않아 좀 헤매긴 했지만 여러 예제를 참조하며 프로젝트에 적용했다.
패킹이미지와 원본이미지가 둘 다 APK파일 안에 들어가는 이상한 점이 있긴하다.
그렇게 적용하고 프로토타입이 완성되어 프로파일링을 하게 되었는데 object count가 지속적으로 증가하는 현상이 발견되었다.
처음에는 코드적 오류인가 싶어서 이것저것 테스트를 해봤지만 object count가 늘어나지않아 또 삽질을 시작했다.
그러다 스프라이트 이미지를 바꿀때 object count가 미친듯이 늘어나는 것을 확인하게 되었다.
결론적으로 여러 예제에서 볼수있었던 SpriteAtlas.GetSprite(string) 이 함수를 호출해 sprite를 가져올때마다 object count가 증가하고 있었다.
아직도 이해가 안가는건 가져와서 sprite에 넣었다가 다른 sprite로 변경되면 참조값이 없어지면서 gc에 의해 사라진다던지 해야되는게 아닌가하는 생각이 들긴하지만 사용할 sprite를 전부 캐싱해서 사용하는 방법으로 해결을 보게 되었다.
피드 구독하기:
글 (Atom)