2019년 3월 22일 금요일

TextMeshPro의 글자 가로 세로 길이

TextMeshProUGUI 의 Text 글자들의 가로 세로 길이 구하는 법

GetPreferredValues()

Function to Calculate the Preferred Width and Height of the text object.
Declaration
public Vector2 GetPreferredValues()
Returns

TypeDescription
Vector2

2018년 12월 13일 목요일

Unity에서 string.Format 으로 숫자에 comma 찍기

재화 표시에 Comma 를 추가하기 위해
string text = string.Format("{0:0.#,###}", Gold)
를 사용중이었는데, Gold가 0일 경우 string이 "0" 이 아니라 비어있었다.

애용하는 c# web ide 페이지에서는 같은코드를 사용해도 0으로 출력이 잘되는걸로 보아 유니티 문제인듯.

string.Format("{0:n0}", Gold)
를 사용하면 0도 정상적으로 표시 된다.

Gold.ToString("#,##0") 도 된다.

2018년 11월 28일 수요일

iOS는 파일명 대소문자를 구분한다

제목 그대로.

 번들 다운로드 시스템을 변경한 후 테스트 도중 아이폰에서만 파일을 찾지 못하는 현상이 발생.
 윈도우 유니티 에디터, 맥 유니티 에디터, 안드로이드 기기에서는 문제가 없었음

 매니페스트 파일명을 대문자로 넣었더니 아이폰에서만 파일을 찾지 못해서 소문자로 수정했더니 문자 해결.

 약 3/4일 걸림

2018년 10월 18일 목요일

WorldToScreenPos in UGUI

개발 중인 게임의 UGUI 캔버스 모드가 Screen Space - Overlay 에서 Screen Space - Camera 로 변경되게 되었다.

별 일 없을줄 알았는데, 월드 좌표를 UI 좌표로 바꿨을때 이생해져서 열심히 구글링을 한 결과, Render Mode에 따라 변환하는 방식이 다르다는것을 알게되었다.

Overlay 모드에서는 단순히 

rectTransform.position = RectTransformUtility.WorldToScreenPoint (Camera.main, target.position);

로 해결되었지만 Camera모드에서는 좀더 복잡한 계산이 필요하다

  var pos = Vector2.zero;
  var uiCamera = Camera.main;
  var worldCamera = Camera.main;
  var canvasRect = canvas.GetComponent<RectTransform> ();

  var screenPos = RectTransformUtility.WorldToScreenPoint (worldCamera, target.position);
  RectTransformUtility.ScreenPointToLocalPointInRectangle(canvasRect, screenPos, uiCamera, out pos);
  rectTransform.localPosition = pos;


참고 링크

일본 개발자들이 정리를 참 깔끔하게 하는것 같다. 번역도 편하고.

2018년 10월 15일 월요일

Sprite 를 Texture2D로 변환하던 중 발생한 문제

Atlas 의 Sprite 를 Texture2D로 변환하여 잘 활용하던 중, 2017.1에서 2018.3 b5로 유니티 버전업을 하게 되었다.

발생하던 모든 Error 를 다 처리하고 테스트 하는 도중 Sprite 에서 변환한 Texture2D가 나
오지 않는 걸 확인하고 여러가지 방법(텍스쳐 포멧 바꿔 보기 등)으로 수정하려고 노력해 보았지만 소용이 없었다.

원인은 Sprite.textureRect 의 모든 값이 0으로 반환되는 것이었는데 2018에 해당 내용이 Obsolated 된 것도 아니었다.

마지막이라는 심정으로 해당 아틀라스의 옵션을 확인하니, 2017.1 에서 설정했던 내용이 바뀌어 있었다. Allow Rotation 과 Tight Packing 옵션이 켜져 있었다. 그 중 Tight Packing 옵션을 끄니 Sprite.textureRect 값이 정상적으로 반환되었다.