태그 보관물: Unity3D

[Unity] TextMeshPro 코드 버전을 Dll 버전으로 변경

이번에 프로젝트의 버전을 2017.4에서 2018.4 버전으로 업데이트 하면서 예전에 구매해서 사용중이던 TextMeshPro의 버전업도 진행하게 되었습니다.
문제는 Unity에서 TextMeshPro를 포함하기 전에 구매한 유저들은 SourceCode가 포함된 형태로 사용 중이었는데 Unity에서 기본 배포하게 되면서 Dll 형태로 배포되기 시작했습니다.
그래서 Unity에서 배포중인 패키지를 설치하게 되면 소스코드와 Dll이 충돌하게 되고 소스코드를 삭제하면 Scene에 사용중이던 TextMeshPro Component들이 전부 Missing 상태로 변경됩니다.
Python으로 Scene, Prefab의 내용을 직접 수정하는 툴을 작업하고 있었는데 알고보니 TextMeshPro에서 기본적으로 그러한 기능을 제공하고 있었습니다.

이번에 버전업을 했던 절차를 정리하면 아래와 같습니다.

  • 2018.4로 버전업을 진행했습니다.
  • Package Manager에서 TextMeshPro를 설치합니다.
  • TextMeshPro Dll과 코드가 중복됨으로 인해서 에러가 엄청나게 발생하고 있습니다. 기존에 사용하던 TextMeshPro 폴더를 삭제합니다.
  • Asmdef 기능을 사용하고 있다면 Dll의 참조가 안됨으로 인해서 에러가 발생하고 있습니다. Asmdef에 새로운 TextMeshPro 참조를 추가해 줍니다.
  • 그래도 에러가 발생하고 있다면 TextMeshPro API 변경으로 인한 것이므로 코드 수정을 통해서 해결해 줍니다.
    • TMP_FontUtilities.SearchForGlyph API가 없어졌습니다. TMP_FontUtilities.SearchForCharacter로 변경해 줬습니다.
    • 임의로 수정해서 사용하던 OnTextChanged 이벤트가 없어서 havePropertiesChanged Property가 true가 되었을 때 LateUpdate() 함수에서 변경을 체크하도록 수정하였습니다.
  • Window - TextMeshPro - Project Files GUID Remapping Tool 을 실행해 줍니다.
  • Scan Project Files 버튼을 클릭하여 Scene과 Prefab, Font Asset, Font Material 파일들을 검색하여 Package Manager로 추가한 새 TextMeshPro 스크립트를 참조하도록 갱신해 줍니다.
  • 검색 후 Save Modified Project Files 를 클릭해 주면 문제가 깔끔하게 사라지면서 새 버전의 TextMeshPro를 사용할 수 있게 되었습니다.