한글패치 관련 짧은 글

XUnity.AutoTranslator 텍스쳐 번역 조금 쉽게 하기

눈백로 2022. 1. 9. 05:25

XUnity.AutoTranslator에는 텍스쳐 번역 기능이 있다.

텍스쳐에 있는 글자를 번역해주는 것은 아니지만,

게임의 텍스쳐/스프라이트를 png로 추출/대체할 수 있다.

 

https://github.com/bbepis/XUnity.AutoTranslator#texture-translation

 

GitHub - bbepis/XUnity.AutoTranslator

Contribute to bbepis/XUnity.AutoTranslator development by creating an account on GitHub.

github.com

 

설정은 대충 링크한 부분을 읽어보면서 하면 된다.

내 경우 텍스트 번역을 방지하고, 텍스쳐 대체용으로 사용해야 하기 때문에

번역 [Service]-Endpoint를 공란으로 냅두고, [TextFrameworks]의 하위항목을 모두 False로 바꾸었다.

이렇게 설정하면 텍스트 후킹 및 endpoint가 없어지기에 텍스트 번역이 아예 동작하지 않는다.

Texture 부분도 아래와 같이 설정했다.

[Texture]
TextureDirectory=Translation\Texture
EnableTextureTranslation=True
EnableTextureDumping=True
EnableTextureToggling=False
EnableTextureScanOnSceneLoad=True
EnableSpriteRendererHooking=True
LoadUnmodifiedTextures=False
DetectDuplicateTextureNames=False
DuplicateTextureNames=
EnableLegacyTextureLoading=False
TextureHashGenerationStrategy=FromImageName
CacheTexturesInMemory=True
EnableSpriteHooking=True

 

 

이제 게임을 실행해 보면, 위 캡처같이 게임에서 로드된 텍스쳐/스프라이트가 추출되었음을 확인 가능하다.

파일명 sactx-0-256x512-DXT5-MapBattlePre_En-b272620d [CF40D254B5-DF0CFE5FEE].png
파일명 앞부분 sactx-0-256x512-DXT5-MapBattlePre_En-b272620d 텍스쳐 이름
파일명 뒷부분 (1번째 해시값) CF40D254B5 원본 파일명에 대한 SHA1 해시값 10자리 (sactx-0-256x512-DXT5-MapBattlePre_En-b272620d)
파일명 뒷부분 (2번째 해시값) DF0CFE5FEE 이미지 파일에 대한 SHA1 해시값 10자리

* Autotranslator 링크에 들어가 스크롤을 조금만 내리면 관련 내용이 나온다.

 

이는 간단하게 검증할 수 있다. 온라인 해시값 생성 사이트에서 확인해도 좋고, 파이썬으로 해도 좋다.

이미지 이름에 대한 SHA1 해시값 10자리와, 이미지 파일에 대한 SHA1 해시값 10자리가 일치하는 것을 볼 수 있다.

 

하지만 이러한 방식으로 하나하나 해시값을 추출하기엔 무리가 있다.

해당 스프라이트가 사용되는 부분을 직접 플레이해야 하기 때문이다.

또한, 수십~수백개 파일을 모두 하나하나 계산하고 있을 수도 없는 노릇이다.

그래서 간단하게 SHA1 해시값을 계산하여 파일 이름을 바꿔주는 프로그램을 짰다.

 

다운로드)

https://drive.google.com/file/d/1kMdb3t52fO8HiI0m2JDV6UBcyNxevhqw/view?usp=sharing 

 

hash.zip

 

drive.google.com

 

해시값을 계산하고, 각각 10자리씩 자르고, OUTPUT 폴더에 파일명 형식에 맞게 복사해주는 프로그램이다.

위 검증부분의 코드를 이용해서 만들었다.

 

사용법)

1. input 폴더에 이미지를 원본 이름으로 넣는다.

* 위 경우 AssetStudio로 추출했다.

* 만약 "105 #28988.png"처럼 이미지 이름 뒤에 #번호가 붙을 경우, 자동으로 번호를 삭제하고 이름을 변경해준다.

* 어차피 파일 기반으로 해시값 계산을 한번 하기에, 문제가 생기진 않는다고 보았다.

* 참고로 유니티 에셋 내에 중복되는 파일명이 있을 경우, AssetStudio에서 구분을 위해 {이름 #번호} 형식으로 추출한다.

 

 

2. output 폴더에 들어가 보면 파일명이 정상적으로 변경되었음을 알 수 있다.

* output폴더가 없을 경우 자동으로 생성한 다음 작업을 수행한다.

 

첫번째 해시의 경우 파일명 기반이라 꼭 틀림없어야 하지만,

두번째 해시의 경우 파일 자체에 대한 해시값이기에 해시값이 틀려도 괜찮은 것 같다.

 

AutoTranslator에서 추출된 파일과 AssetStudio로 추출한 파일의 용량이 다르기에 뒷부분 해시값이 달랐는데

실제로 적용시켜 보니 정상적으로 적용되었다.

 

 

정리)

Autotranslator에서 추출된 이미지명
sactx-0-256x512-DXT5-MapBattlePre_En-b272620d [CF40D254B5-E6ED69B28F].png

AssetStudio에서 추출된 이미지명
sactx-0-256x512-DXT5-MapBattlePre_En-b272620d.png

AssetStudio에서 추출된 이미지 해시값 계산
sactx-0-256x512-DXT5-MapBattlePre_En-b272620d [CF40D254B5-8CCC98A429].png

 

- 뒷부분 해시값이 다르지만 앞부분이 동일하므로 정상적용 되는 것을 확인할 수 있었음

- 따라서, AssetStudio와 같은 "파일에서 직접 이미지를 추출"하는 툴을 가지고 작업하면 직접 플레이하면서 추출하는 것에 비하여 훨씬 작업이 수월할 것임

 

 

 

<테스트용 이미지>

 

 

<실제 적용 모습>

1 2 3 4 5 6 7 ··· 18