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 값이 정상적으로 반환되었다.