블로그 이미지
Every unexpected event is a path to learning for you. blueasa

카테고리

분류 전체보기 (2795)
Unity3D (852)
Programming (478)
Server (33)
Unreal (4)
Gamebryo (56)
Tip & Tech (185)
협업 (61)
3DS Max (3)
Game (12)
Utility (68)
Etc (98)
Link (32)
Portfolio (19)
Subject (90)
iOS,OSX (55)
Android (14)
Linux (5)
잉여 프로젝트 (2)
게임이야기 (3)
Memories (20)
Interest (38)
Thinking (38)
한글 (30)
PaperCraft (5)
Animation (408)
Wallpaper (2)
재테크 (18)
Exercise (3)
나만의 맛집 (3)
냥이 (10)
육아 (16)
Total
Today
Yesterday

[에러메시지]

NullReferenceException: Object reference not set to an instance of an object.

  at System.Linq.Expressions.Interpreter.LightLambda.MakeRunDelegateCtor (System.Type delegateType) [0x00000] in <00000000000000000000000000000000>:0 

  at System.Linq.Expressions.Interpreter.LightLambda.GetRunDelegateCtor (System.Type delegateType) [0x00000] in <00000000000000000000000000000000>:0 

  at System.Linq.Expressions.Interpreter.LightDelegateCreator.CreateDelegate () [0x00000] in <00000000000000000000000000000000>:0 

  at System.Linq.Expressions.Expression`1[TDelegate].Compile (System.Boolean preferInterpretation) [0x00000] in <00000000000000000000000000000000>:0 

  at System.Runtime.CompilerServices.CallSite`1[T].MakeUpdateDelegate () [0x00000] in <00000000000000000000000000000000>:0 

  at System.Runtime.CompilerServices.CallSite`1[T].GetUpdateDelegate (T& addr) [0x00000] in <00000000000000000000000000000000>:0 

  at System.Runtime.CompilerServices.CallSite`1[T]..ctor (System.Runtime.CompilerServices.CallSiteBinder binder) [0x00000] in <00000000000000000000000000000000>:0 

  at System.Runtime.CompilerServices.CallSite`1[T].Create (System.Runtime.CompilerServices.CallSiteBinder binder) [0x00000] in <00000000000000000000000000000000>:0 

 

대충 위와같은 에러가 나는데..

유니티에서 dynamic을 쓰면 나는 에러인데..

결론은 유니티는 dynamic을 지원하지 않는다. 쓰지말자.

 

에디터에서는 잘되길래 될 줄 알았더만, 안드로이드 빌드해보니 위와같은 에러가 난다.

해결책이 별시리 없는듯하다.

 

[참조] https://gall.dcinside.com/mgallery/board/view/?id=game_dev&no=53076 

 

유니티 dynamic 못씀? - 인디 게임 개발 마이너 갤러리

분명 유니티 내에서 빌드 안하고 돌리면 잘만 돌아가는데, 빌드된 거 실행해보면 코드에서 에러가 계속 발생함NullReferenceException: Object reference not set to an instanc

gall.dcinside.com

[참조] https://issuetracker.unity3d.com/issues/il2cpp-notsupportedexceptions-exception-is-thrown-in-build-with-newtonsoft-dot-json-plugin

 

Unity IssueTracker - [IL2CPP] NotSupportedExceptions exception is thrown in build with Newtonsoft.Json plugin

Steps to reproduce: 1. Download attached project 2. Build standalone project on IL2CPP backend 3. Launch build project 4. Notice exc...

issuetracker.unity3d.com

 

반응형
Posted by blueasa
, |

[링크] https://under-wave.tistory.com/9

 

[iOS 앱스토어 리젝] 애플 로그인 텍스트 | 애플 로그인 디자인 가이드

📌 리젝 사유 앱스토어에 앱을 출시하고 업데이트를 했는데 생각지 못한 부분에서 리젝을 당했다. 기존에 애플 로그인 버튼의 텍스트를 'Apple 계정으로 시작하기'라고 했기 때문이었다. HIG에서

under-wave.tistory.com

 

반응형
Posted by blueasa
, |

[pod install 에러 메시지]

--------------------------------------------------------------------------------------------------------

Installing FBAudienceNetwork (6.11.1)

 

[!] Error installing FBAudienceNetwork

[!] /usr/bin/curl -f -L -o /var/folders/bg/4k1wpsf546l2kb3wyyl3lx1w0000gq/T/d20221108-10215-81o062/file.zip https://developers.facebook.com/resources/FBAudienceNetwork-6.11.1.zip --create-dirs --netrc-optional --retry 2 -A 'CocoaPods/1.11.3 cocoapods-downloader/1.4.0'

 

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current

                                 Dload  Upload   Total   Spent    Left  Speed

100 1093k    0 1093k    0     0  17517      0 --:--:--  0:01:03 --:--:-- 23345

curl: (92) HTTP/2 stream 0 was not closed cleanly: INTERNAL_ERROR (err 2)

--------------------------------------------------------------------------------------------------------

 

오랜만에 pod 초기화하고 pod install을 다시하게 됐는데 위와 같은 에러메시지가 뜨면서 install이 제대로 되지 않는다.

 

검색을 해보니 아래 링크와 같은 내용이 있다.

버전이 내꺼랑 다르지만 결국 같은 이슈인 것 같다.

[링크] https://github.com/facebook/facebook-ios-sdk/issues/1384

 

FBAudienceNetwork 5.6.0 pod install returning 500 Internal Server Error during build · Issue #1384 · facebook/facebook-ios-sdk

Checklist I've updated to the latest released version of the SDK I've searched for existing GitHub issues I've looked for existing answers on Stack Overflow, the Facebook Developer Comm...

github.com

 

[해결방법]

결론적으로 cdn 캐싱쪽이 문제인지 제대로 받지 못하기 때문에

VPN으로 권역을 바꿔서(난 U.S.A로 함) pod install 하니 제대로 다운을 받았다.

 

반응형
Posted by blueasa
, |

[요약] Accelerate.framework 추가하자

 

[링크] https://minmong.tistory.com/242

 

페이스북 sdk 빌드 에러 iOS Facebook SDK Static Framework build error

지난 번에 Facebook 심사를 위한 앱검수 얘기를 했었는데요. 페이스북 권한을 사용하는 컨텐츠를 동영상으로 촬영해야 된다고 말씀드렸습니다. 그리고 iOS의 경우는 시뮬레이터 빌드를 준비해야

minmong.tistory.com

 

반응형
Posted by blueasa
, |

게임도중 핸드폰에서 Home 키를 눌러 배경화면으로 이동 후 Server와 끊기기를 기다리고 다시 Server와 리커넥팅 되도록 해서 팝업 떴는데.. Font가 깨졌다. 뭐지..

 

....

 

UILabel 에서 DynamicFont 가 이상한 것 같다는 사수님의 말을 듣고 구글링하고 임시 해결방안으로 Font 스크립트에 접근해 미리(반강제?) 쓸 텍스트스트링을 넣어줌으로 해결을 하였다!! 코드는 대충 이렇다! 

 

Font fc_Font_KR = GameObjectUtil.FindChildComponentByName<UILabel>(MainUIManager.Instance.uiMsgBox.transform, "Txt.Desc").trueTypeFont;//(MainUIManager.Instance.uiMsgBox.transform, "Txt.Desc");

fc_Font_KR.RequestCharactersInTexture(Utility.GetStringFromTBL(250091), 16, FontStyle.Normal);

 

주요 함수는 Font.RequestCharactersInTexture(string str, size, FontStyle); 

 

함수 공부는 개인적으로.. 는..

 

구글링을 하던중 .. 좋은 지식 공유

 

https://www.facebook.com/be2ls/posts/644653395565677

 

밑에는 내용 !

-------------------------------------------------------------------------------------------------------------

 

* 유니티에서 Dynamic Font의 글자 사라짐 문제 대응 방법

유니티에서 지원하는 Dynamic Font는 상당히 편리하다.
기존에 한글 폰트를 화면에 표시하려면,
한글 유니코드에 해당하는 모든 글자를 폰트 텍스쳐에 담아놓고
써야해서, 메모리 낭비가 컸고, 글자 크기도 크게 하기가 힘들었다.

반면 Dynamic Font는 그때 그때 사용하는 글자들만 폰트 텍스쳐에 그려두고 사용하기 때문에
메모리 낭비가 적고, 폰트를 크게 표시할 수 있다는 장점이 있다.

하지만, 유니티 자체의 버그인지 특정 폰의 문제인지 몇몇 폰에서 플레이를 하다보면,
글자들이 깨지거나, 일부 글자가 아예 표시되지 않는 버그가 발견되고 있고,
현재까지 배포된 유니티 버전에서는 아직 해결되지 않은 것으로 보인다.

해결 방법을 구글링 해보았지만, 아직 완벽한 해결책은 없는 것 같아서
직접 여러가지 실험을 해보고 대응 방법을 찾아보았다.

1. Dynamic Font의 텍스쳐 관리 방식

맨 처음 게임이 실행되면 기본 폰트 텍스쳐 크기는 256*256이다.
여기에 글자들이 추가되면서 글자를 추가할 공간이 없을 때
256*256이 256*512, 512*512, 그 다음에는 512*1024 이런식으로 텍스쳐 크기가 증가한다.

폰트 텍스쳐에 새로운 글자가 추가되었는데 더이상 추가할 수 있는 공간이 없을 때, 
폰트 텍스쳐가 재정렬되는데, 이 경우 크기가 변경될 수도 있고, 변하지 않을 때도 있다.
더 이상 글자를 추가할 공간이 없을 때, 사용하지 않는 글자들을 정리하기 때문에
정리를 하고 나서 공간이 남는 경우에는 크기가 그대로 유지 된다.
나름 합리적으로 폰트 텍스쳐를 관리하고 있는 것인데,
문제는 특정 폰에서 이 순간에 글자가 사라지는 것이다.

실험을 해본 결과 문제가 되는 폰에서는 폰트 텍스쳐가 리셋되는 순간 크기의 변화가 있으면
정상적으로 표시가 되는데, 사이즈의 변화가 없으면 일부 글자가 표시되지 않는 문제가 발생하고 있었다.

2. 대응 방법

대응방법은 아름답지는 않지만, 단순한 편이다. 
폰트 텍스쳐가 리셋되는 순간 만약 폰트 텍스쳐의 크기가 변경되지 않았다면,
변경될 때까지 폰트 텍스쳐에 존재하지 않는 글자를 계속 추가해주는 것이다.
코딩은 대략 다음과 같다.

1) 유니티의 Font에는 Font.textureRebuildCallback이라는 콜백함수를 등록할 수 있다.
게임 시작 시점에 콜백 함수에 특정 함수를 지정해두면, 폰트 텍스쳐의 리셋 시점에 해당 함수가 
호출된다. 
ex: this.font.textureRebuildCallback = this.SizeChanged;

2) 시작 시점의 폰트 텍스쳐의 크기를 변수로 저장해둔다.

ex: 
this.fontWidth = this.font.material.mainTexture.width;
this.fontHeight = this.font.material.mainTexture.height;

3) 문제는 폰트 텍스쳐 크기가 변하지 않는 경우이기 때문에, 
콜백함수 안에 폰트 텍스쳐의 크기가 기존 크기와 같은지를 체크한다.

ex: 
if (this.font.material.mainTexture.width == this.fontWidth && this.font.material.mainTexture.height == this.fontHeight)
{
...

4) 기존 사이즈와 똑같으면, 한글을 맨처음부터 한글자씩 집어넣는다.
맨 처음 '가'를 font.GetCharacterInfo를 이용해서, 폰트 텍스쳐에 '가' 글자가 들어있는지 확인해서,
들어있지 않다면 font.RequestCharactersInTexture함수를 이용해서, '가'를 추가해준다.
처음에는 5글자 정도를 추가하고, Invoke함수 등을 이용해서 잠시 기다린다.
만약, 추가한 5글자로 인해서, 크기가 커진다면 다시 콜백함수가 호출될 것이고, 그렇다면 글자들이 제대로 보일 것이므로, 
해당 루틴을 끝낸다.
하지만, 커지지 않았다면, 다시 10글자 정도를 추가하고, 그래도 안되면 15글자로 늘리는 방식이다.
이런 루틴을 반복하다보면 어느 순간 폰트 텍스쳐의 크기가 커진다.
(폰트 사이즈가 너무 작고, 폰트 텍스쳐 크기가 굉장히 커서 모든 한글 글자를 포함할 경우라면 무한루프가 될 수도 있을거 같다.)

한글을 자동으로 하나씩 추가하려면, 
아래와 같은 코드를 이용해서, 초중종성의 값을 증가시켜가면 된다.

ushort mUniCodeKoreanBase = 0xAC00;
int iUniCode = mUniCodeKoreanBase + (curFirst * 21 + curMiddle) * 28 + curEnd;
char temp = System.Convert.ToChar(iUniCode);

3. 결론

문제가 있던 폰에서 테스트해 본 결과, 폰트 텍스쳐의 크기가 리셋되는 순간 잠깐 동안 일부 글자가 안보이다가,
곧바로 글자들이 제대로 복구되었다.
아주 깔끔한 해결책은 아니지만, 이정도면 충분히 쓸만하지 않을까 싶다.

어서 빨리 유니티에서 완벽한 패치가 나오면 좋겠다.

-------------------------------------------------------------------------------------------------------------

 

잉`s 블로그 : 네이버 블로그

I.. N.. G..

blog.naver.com

 

반응형
Posted by blueasa
, |

[링크] https://dark0946.tistory.com/226

 

[ Unity ] 유니티 로컬라이징, 태국어 폰트 적용 문제

태국어라곤 사와디캅( 정작 태국어로 어떻게 적는지도 모름 ) 밖에 모르던 저에게 태국어 로컬라이징 작업이 떨어졌습니다. 이전부터 게임 한글패치 작업을 좀 해본 경험이 있어서 관련 툴 사

dark0946.tistory.com

[참고] https://github.com/SaladLab/Unity3D.ThaiFontAdjuster

 

GitHub - SaladLab/Unity3D.ThaiFontAdjuster: Utility to render Thai text correctly in Unity3D, especially for positioning tone ma

Utility to render Thai text correctly in Unity3D, especially for positioning tone mark (ก์กิ์ป์ปิ์ฎุญุ). - GitHub - SaladLab/Unity3D.ThaiFontAdjuster: Utility to render Thai text correctly in Unity...

github.com

 

반응형
Posted by blueasa
, |

こんにちは。技術部平山です。

今回は小ネタで、サンプルもありません。ビルドの解像度設定についてです。

スクリーンショットにあるように、PlayerSettingsのResolution and Presentation の項に、Resolution Scalingというものがあり、 Resolution Scaling ModeをデフォルトのDisabledからFixed DPIに 設定することができます( Androidマニュアル iOSマニュアル )。

これは、画素(ピクセル)の密度が同じになるように、機種によって解像度を自動で変える、という設定です。 上の画像では326dpi(dot per inch。1インチあたりの画素数)になっており、 これはiPhone4あたりからの伝統的な値です。 iPhone6Plusのような上位機種を除けば、だいたいこの密度になっています。

実際どうなるのか?

この設定にしておくと、ディスプレイの画素密度が326dpiの機械では、 元の解像度で描画されます。例えばiPhone8なら1334x750です。

ところが、画面の大きさの割に解像度が高い端末、 例えばiPhone8Plusであれば、元よりも低い解像度になります。 元の解像度は1920x1080ですが、これが1560x878になります。 元の画素密度は406dpiもありこれを326dpiに落とすと、 解像度が縦横それぞれ(326/406)倍されるわけです。

何のために使うの?

「無駄に高い解像度で描画して、フレームレートや電力消費を悪化させるのを防ぐため」です。

高解像度で描画する方が綺麗なのは確かですが、タダではありません。 GPUの処理負荷はかなりの部分が画素数に比例しますから、 1920x1080で描画する負荷は、1560x878で描画する負荷に比べて、 およそ1.5倍になります。 CPU側に余裕があって、フレームレートが画素数で決まっているようなケースでは、 この設定を有効にすることでフレームレートが1.5倍になる可能性がある、ということです。

また、元々60fpsで動いているような場合は、電力消費が改善します。 微々たる差しか感じられないことに無駄に電気を食うよりは、 少し解像度を下げて余力を残した方が良いかもしれません。 スマホの場合、あまり電力消費が大きいと熱のために処理能力が低下し、 フレームレートが落ちてくることもよくあります。 前もって解像度を下げておくことは、これを防ぐ効果もあるのです。

実際の例

実際の例としては、iPhone6Plus(1920x1080)で40FPSしか出なかったアプリが、 この設定を有効にするだけで60FPSに改善した例があります。

また、一部Android機のように、 GPU性能の割に解像度が高い(例えば京セラS2で1280x720、S4で1920x1080) 端末では、 元々フル解像度でゲームを動かすことには無理があり、 解像度を下げることで大きくフレームレートが改善します。 S2の場合、対角5インチのサイズで1280x720で、 1280画素ある長辺の長さは4.345インチです。 1280をこれで割ると、294dpiとなります。

iPhoneの326dpiよりも低いですが、 「そもそもこのゲームって、そんなに解像度高くてうれしいの?」 ということをよく考えてみれば、 製品によっては「もう少し低くてもいいな」という判断にもなるでしょう。

お客さんが選べるように選択肢を用意するのも一つの考えかと思いますが、 ほとんどのお客さんにとって適切な設定をデフォルトにするのもまた重要なことです。 画質とフレームレート、電力消費のバランスを鑑みて、 画素密度(dpi)で設定するのは悪くない選択でしょう。 設定一つで済むので実装コストはほぼゼロです。

製品の性質にもよりますが、200から300くらいを設定するのが良いのかな、 と個人的には思います。Nintendo Switchが235dpiであり(Switch Liteは268dpi) それだけあれば十分な気もします。 もし不安があるのであれば、たくさん売れたiPhoneを基準にして上の例のように326 に設定するのも良いでしょう。それでもPlus系での処理落ちを防げます。 その場合も、Androidでは低スペック機に配慮して下げる方が良い気がします (dpi設定はiOSとAndroidを別に持てないので、ビルド前にスクリプトで変更するのが良いでしょう)。

ダイナミックなフォントは解像度が高いほど綺麗になり、 3Dのポリゴンも解像度が高いほど輪郭が綺麗になりますが、 前もって用意したテクスチャは元解像度以上にはなりません。 解像度が高すぎてもボケて見えるだけで、 それは解像度を落として描くのとほとんど変わらないのです。 しかしフレームレートと電力消費は確実に悪化します。

別の方法

お客さんに解像度設定を委ねる場合には、これを使っての設定はできません。 一律になってしまうからです。 設定を見て、 Screen.SetResolution を起動後に呼ぶことになります。

Screenクラスからはdpiも取れますので、FixedDPIを使うのと同じこともできますが、 解像度変更はその場では終わらず次のフレームまでかかりますし、 解像度に依存した処理があると、解像度が変わった時におかしくなる危険もありますから、 注意しましょう。起動直後のみの反映が安全ですが、すぐに確認できないので利便性は落ちます。 設定画面を作るコストの問題もありますから、 製品の性質やお客さんにとっての価値を考えた上で、 良い選択をしてください。

なお、お客さんに設定して頂けるのであれば、 かなり攻めた設定(768x432まで解像度を下げるなど)ができ、 電気が気になる方(例えば私)や、低性能の機種をお使いの方(例えば私)に とってはうれしいのではないかと思います。 過去参加した製品 では、768x432で20fpsという省エネ設定ができるようにしましたが、 完全に私のためでした。

代表的な機械の画素密度

以下に代表的な機械のDPIを表にしておきます。 「この機械はドット粗いなあ」と思う機械よりは上げたいですが、 「これ以上細かくても差がわからないよ」「そもそもそんな高解像度で素材作ってないよ」 という場合には下げて良いかと思います。 素材の解像度が上がれば容量も増えて、通信料金やスマホのストレージにも 悪影響を与えますから、何事も程々のバランスが良いでしょう。

機種対角インチ解像度DPI

iPhone 5S,SE 4 1136x640 326
iPhone 6, 6S, 7, 8 4.7 1334x750 326
iPhone 6Plus, 6S Plus, 7Plus, 8Plus 5.5 1920x1080 406
iPhoneX, XS, 11Pro 5.85 2436x1125 458
iPhoneXS Max, 11ProMax 6.46 2688x1242 458
iPhoneXR, 11 6.06 1792x828 326
古めのiPadの多く 9.7 2048x1536 264
今のiPad 10.5 2224x1668 264
対角5インチの16:9機 5 960x540 221
対角5インチの16:9機 5 1280x720 295
対角5インチの16:9機 5 1920x1080 442
対角24インチのFullHDモニタ 24 1920x1080 92
Retina MacBookPro 13インチ 13 2560x1600 232
Nintendo Switch 6.2 1280x720 238
Nintendo Switch Lite 5.5 1280x720 268

QualitySettingsでの補正

この項目は試していないのですが、たまたま調べたら出てきたので紹介しておきます。

dpi値はQualitySettingsで修正することができるようです。 公式マニュアル にあるように、Resolution Scaling Fixed DPI Factorを設定すれば、 lowやmediumのような設定ごとに、先程設定したdpi値を補正することができるとあります。 0.5を書けば半分になり、例えば326dpiであれば163dpiになって、 解像度が半分になるのでしょう。

機械の性能を見てQualitySettings.SetQualityLevel などを呼んでいる場合には、動的に解像度も変わるのでしょうか? 正常に動くのか、どれくらい処理が止まるのか、といったことはわかりません。

終わりに

今回は小ネタでしたが、下手に最適化で苦労するよりもよほど簡単に効果が上がるので、強くオススメしておきます。

個人的には、多くのゲームのように画面に動きがあるアプリケーションで 300dpiを超えた描画するのは、電池が惜しいと感じます。 もし余力があるのであれば、解像度を上げるよりも、 ライティングなどのピクセルあたりの処理を豪華にする方が、 おそらくは品質も上がるでしょう。

 

 

[출처] https://techblog.kayac.com/unity-fixed-dpi

 

Unityで画素密度を固定する解像度設定(FixedDPI) - KAYAC engineers' blog

こんにちは。技術部平山です。 今回は小ネタで、サンプルもありません。ビルドの解像度設定についてです。 スクリーンショットにあるように、PlayerSettingsのResolution and Presentation の項に、Re

techblog.kayac.com

 

반응형
Posted by blueasa
, |

[링크] https://lunchballer.com/archives/1326

 

[Unity-C#] 특정 국가에서 크래시가 난다면 CultureInfo를 확인하자

Unity 2019부터 .NET 3.5는 더 이상 지원되지 않고, .NET Standard 2.0과 .NET 4.X가 지원된다. .NET Standard 2.0/.NET 4.X은 Unity 2017까지 사용하던 .NET 2.0/.NET 2.0 Subset과 같지 않다. 그래서 글로벌 게임을 서비스 중

lunchballer.com

 

[참조] https://mentum.tistory.com/615

 

Float.Parse not in a correct format 문화권 문제

숫자 변환에서 오류가 발생하다 게임 개발을 하다 보면 string에서 float로 파싱 하여 사용해야 하는 경우가 꽤나 자주 발생한다. 예를 들어, 연출 데이터에서 0.5초 동안 정지한다거나 하는 경우 다

mentum.tistory.com

 

[체크해야 될 함수] 더 있을수도..

float.Parse / float.TryParse / float.ToString

double.Parse / double.TryParse / double.ToString

int.Parse / int.TryParse / int.ToString

long.Parse / long.TryParse / long.ToString

BigInteger.Parse / BigInteger.TryParse  / BigInteger.ToString

DateTime.Parse / DateTime.ParseExact / DateTime.TryParse / DateTime.TryParseExact / DateTime.ToString

TypeConverter.ConvertFrom / TypeConverter.ConvertTo

Convert.To??? 시리즈(Convert.ToInt16/ToInt32/ToInt64/ToUInt16/ToUInt32/ToUInt64,ToDecimal,ToDouble,ToSByte,ToSingle 등)

.ToLower / .ToUpper

string.Format

 

 

[첨언]

Unity 2018에서 Unity 2021로 포팅을 하고 업데이트를 했는데 이상한 에러가 크래시레포트에 많이 수집돼서 확인해보니

위의 링크에 보이는 문제로 보인다.

Unity 2019 부터 바뀐부분이 있어서(참조 링크 보면 됨) int float double BigInteger 등을 Parse 할 때 System.Globalization.CultureInfo.InvariantCulture을 무조건 넣어줘야 될 것 같다.

(CurrnetCulture는 건들면 문제가 생길 것 같아서 그냥 노가다로 다 넣었다.)

 

P.s. 문화권 문제라 한국에서는 아무리 테스트를 해도 크래시가 안나니 무슨 버그인지 몰라서 한참 헤멤..

 

[추가]

CultureInfo 관련 이슈가 있는 함수가 더 있어서 추가해 둠.

아래 함수 2개를 문화권 영향받지 않도록 변경했다.

이 두 함수는 함수 자체가 문화권 영향받지 않는 함수가 있어서 편한 것 같다.

 

TypeConverter.ConvertFrom() → TypeConverter.ConvertFromInvariantString()

TypeConverter.ConvertTo() → TypeConverter.ConvertToInvariantString()

 

[참고] https://learn.microsoft.com/ko-kr/dotnet/api/system.componentmodel.int32converter?view=net-7.0 

 

Int32Converter 클래스 (System.ComponentModel)

32비트 부호 있는 정수 개체와 다른 표현 사이를 변환하는 형식 변환기를 제공합니다.

learn.microsoft.com

 

[나라별 숫자표기 참고] https://theqoo.net/square/298509638

 

나라별로 다른 소수점과 천의 자리 구분 기호 - 스퀘어 카테고리

형태국가1,234,567.89호주, 캐나다 (영어권, 비공식), 중국, 홍콩, 아일랜드, 이스라엘, 일본, 한국, 말레이시아, 멕시코, 뉴질랜드, 파키스탄, 필리핀, 싱가포르, 대만, 태국, 영국, 미국1234567.89국제단

theqoo.net

[숫자표기 참고2] https://docs.oracle.com/cd/E19683-01/816-3980/overview-48/index.html

 

숫자 (국제 언어 환경 설명서)

숫자 영국과 미국은 소수 자릿수를 마침표를 사용해 표시하는 몇 안 되는 국가들 중 두 국가입니다. 그 밖의 많은 국가들은 마침표 대신 콤마를 사용합니다. 소수 구분 기호는 기수 문자라고도

docs.oracle.com

 

[Date format by country] https://gist.github.com/mlconnor/1887156

 

Listing of countries with their preferred date formats, ISO3166 code, ISO629-2

Listing of countries with their preferred date formats, ISO3166 code, ISO629-2 - country_date_formats.csv

gist.github.com

 

 

반응형
Posted by blueasa
, |

[추가] 2024-03-06

2024년 기준 폰 스펙이 많이 올라와서 이젠 최신폰에서 326으로는 깨지는게 보인다.

그래서 아이폰 최신인 아이폰15(460ppi)에 맞추기로 했다.

→ Target DPI : 326 -> 460으로 변경

----

 

1. Player Settings - Resolution and Presentation - Resolution Scaling

    1.1. Disabled → Fixed DPI로 변경

    1.2.1 Target DPI(Default:30) 280으로 변경(iPhone 13에서도 깨지는지 모르겠다고 함)

    1.2.2 Target DPI 326으로 변경(iPhone XR/11 : 326) : 나는 아이폰 기준 맞추기 위해 326으로 변경함

        [참조] https://techblog.kayac.com/unity-fixed-dpi

Fixed DPI : 280

 

2. Android 6.0(API Level 23) 이상이면 Android Texture Format : ASTC 사용 권장

    2.1. iPhone은 이전부터 ASTC 사용 권장하기 때문에 Android 6.0 이상이면 양쪽 플랫폼 동일하게 ASTC 사용가능 할 듯

 

 

[출처] 게임코디-선후님

 

 

반응형
Posted by blueasa
, |

Unity 2021.3.11f1

I2 Localization(app_name 로컬라이징 용도)

 

I2 Localization 에셋으로 app_name Localization을 하고 있었는데,

Unity 2021.3.11f1으로 업데이트 한 후에 Android에서 로컬라이징이 되지 않고 기본 설정된 App Name만 나오는 문제가 생겼다.

(대충 검색해보니 Unity 2021.3부터 나오는 이슈 같다)

 

그래서 생성된 res 폴더를 ../Assets/Plugins/Android/ 하위에 직접 넣고 빌드해보니 아래와 같은 에러가 나온다.

 

Exception: OBSOLETE - Providing Android resources in Assets/Plugins/Android/res was removed, please move your resources to an AAR or an Android Library. See "AAR plug-ins and Android Libraries" section of the Manual for more details.
UnityEditor.Android.PostProcessor.Tasks.CheckUserResources.Execute (UnityEditor.Android.PostProcessor.PostProcessorContext context) (at <5e58a3838afa4e88a08dc92f05003dcc>:0)
UnityEditor.Android.PostProcessor.PostProcessRunner.RunAllTasks (UnityEditor.Android.PostProcessor.PostProcessorContext context) (at <5e58a3838afa4e88a08dc92f05003dcc>:0)
UnityEditor.Android.PostProcessAndroidPlayer.PrepareForBuild (UnityEditor.BuildOptions options, UnityEditor.BuildTarget target) (at <5e58a3838afa4e88a08dc92f05003dcc>:0)
UnityEditor.Android.AndroidBuildPostprocessor.PrepareForBuild (UnityEditor.BuildOptions options, UnityEditor.BuildTarget target) (at <5e58a3838afa4e88a08dc92f05003dcc>:0)
UnityEditor.PostprocessBuildPlayer.PrepareForBuild (UnityEditor.BuildOptions options, UnityEditor.BuildTargetGroup targetGroup, UnityEditor.BuildTarget target) (at <4e64905d831f4883a53259ef37fb023b>:0)
UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr, Boolean&)

app_name 로컬라이징에 사용되던 /res/ 폴더 하위에 넣는 방식을 Unity 2021.3 이후에는 더이상 지원하지 않나보다.

 

그래서 검색해보니 아래 링크에 해결방법이 적혀있다.

 

[링크] https://develop.hateblo.jp/entry/android-res-error

 

【Unity】Androidのresフォルダがビルドエラーになる場合の対処法 - AppSeedのアプリ開発ブログ

最近、Unityを2021.3.9f1にアップデートしたのですが、Assets/Plugin/Android/res に配置していたフォルダの部分で下記のようなエラーが出るようになってしまいました。今回はこの対処法についてメ

develop.hateblo.jp

해결방법은 링크의 res.androidlib 폴더를 만드는 방법을 참조하면 된다.

링크의 xml 파일등이 띄어쓰기등이 좀 문제 있어서 겸사겸사 간단히 요약해서 적어 둠.

 

  [해결방법]

1. ../Assets/Plugins/Android/ 하위에 res.androidlib 폴더 생성

 

2. res.androidlib 폴더에 아래 파일을 다운받아서 추가하거나 AndroidManifest.xml 파일 직접 생성해서 입력

AndroidManifest.xml
0.00MB

[참조] AndroidManifest.xml 파일 내용

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="custom.android.res" android:versionCode="1" android:versionName="1.0">
</manifest>

 

2. res.androidlib 폴더에 아래 파일을 다운받아서 추가하거나 project.properties 파일 직접 생성해서 입력

project.properties
0.00MB

 

[참조] project.properties 파일 내용

target=android-9
android.library=true

 

3. 기존에 있던 res 폴더(하위에 values/values-en/values-ko 등 포함)를 res.androidlib 폴더로 이동

 

4. 위의 순서 진행하면 아래와 같이 된다.

res.androidlib 폴더
res 폴더(default 포함, 내가쓰는 언어들)

 

5. 이제 빌드 하면.. 된다!!

 

 

[참조] [Unity] 안드로이드 국가별 앱 이름 변경

 

[Unity] 안드로이드 국가별 앱 이름 변경

안녕하세요. 안드로이드 폰에 앱을 설치를 하면, Product Name으로 설정해놓은 이름으로 앱이 설치가 됩니다. 오늘은 앱 이름을 국가별로 다르게 설정하는 법에 대해 다루겠습니다. 일단 Assets\Plugins

scvtwo.tistory.com

[참조] Unity Android 빌드 후 국가별(언어별) 앱 이름 대응

 

Unity Android 빌드 후 국가별(언어별) 앱 이름 대응

Project Settings에서 Product Name을 이용하여 앱 이름을 설정할 수 있지만 이 경우 추후 google 및 apple에 등록한 뒤 변경이 어려운 경우가 분명 생기기 마련이고 (분명 다른 이유로라도 뭐 서버라든지 하

young-94.tistory.com

 

반응형
Posted by blueasa
, |