프로그래밍/Unity
[알쓸유잡 : 모바일 최적화] 영상 정리하기
[알쓸유잡 : 모바일 최적화] 영상 정리하기
2024.01.20이번 포스팅은 유니티 공부를 할 때 항상 신세를 지고 있는 알쓸유잡 콘텐츠를 공부하고 기록해보는 글이 되겠다. 특히나 이번 영상은 최적화였기 때문에, 프로파일러 안의 숫자를 하나라도 더 줄이면 쾌감을 느끼는 편인 나는 어쩔 수 없이 글을 쓸 수밖에 없었다. 음... 변태같은 소리는 뒤로 하고 본론으로 들어가자. 소개 https://www.youtube.com/live/-IrpQzZi_p8?si=tz7lyopfIHhbdPyX https://blog.unity.com/engine-platform/updated-2022-lts-best-practice-guides Updated 2022 LTS Best Practice Guides for optimizing games | Unity Blog Each guide..
URP는 Built-In과 뭐가 다른가? (1) : SRP Batcher
URP는 Built-In과 뭐가 다른가? (1) : SRP Batcher
2023.12.17최근 Unity 2022 LTS 버전을 사용해보면서 URP도 겸사겸사 사용해보게 되었다. 대체 Built-In과 뭐가 다른가 싶어서 유니티 공식 문서를 받아 공부해보고 있는데, 정리가 필요하다고 느꼈다. 다만 이론적인 것 말고, 실무에서 무엇이 달랐는지 하나씩 정리해보려 한다. SRP Batcher가 뭔지 요약해서 알려달라 간단하게 말하면, 같은 쉐이더를 쓰는 오브젝트를 그릴 때 렌더링 성능을 개선해주는 녀석이다. '같은 머티리얼을 쓰면 Draw Call이 하나'라는 게 '같은 쉐이더를 쓰면 SetPass Call이 하나'가 된 것이다. 즉, 같은 쉐이더를 쓰는 것만 신경쓰면 성능 개선을 이뤄낼 수 있는 개꿀 기능이라는 것이다. 다만, 파티클 시스템과 UI에는 적용되지 않는다. 뭘 어떻게 성능 개선을 한..
유니티 빌드 중 겪은 문제 정리
유니티 빌드 중 겪은 문제 정리
2023.08.24유니티 빌드를 하다 보면 별별 오류를 다 겪는다. 주로 SDK가 원인인 경우가 많다. 그 오류들의 원인은 대체 무엇이고 해결 방법은 무엇인지 알아보는 글이 되겠다. 그리고 인터넷에 널린 글들을 찾아볼 필요 없도록 그냥 이 글에 다 넣어버릴 예정이다. 페이스북 SDK 에러 : debug.keystore 없음 [콘솔] Your Android setup is not correct. See Settings in Facebook menu. [경고] Your android debug keystore is missing! You can create new one by creating and building empty Android project in Eclipse. 해결 방법 아무 유니티 프로젝트에서 Android ..
Unity 인스펙터 꿀팁 알아보기
Unity 인스펙터 꿀팁 알아보기
2023.08.03이전 사수분이 유튜브 유니티 11가지 꿀팁 영상을 공유해주셨는데, 개발자 입장에서 내용이 굉장히 유익했다. 이런 자잘한 꿀팁들이 또 존재할 것 같아서, 영상들과 유니티 공식 메뉴얼을 뒤져보았다. 이 글은 그 결과로 나온 요약글이다. 프로그래머가 아니더라도 인스펙터를 자주 만지는 사람들에게 유용할 것이라고 생각한다. 사실 그 때에는 인스펙터 프리셋 기능도 정리했었는데, 결국 안 쓰게 되서 그 부분은 제외했다. 궁금하신 분은 공식 블로그 글을 확인해보는 것도 괜찮을 듯. 아무튼 본론으로 들어간다. 여러 오브젝트 한번에 일렬로 배치하기 주의, 유니티 2021 버전 이상만 가능하다. 여러 오브젝트를 선택한 뒤에 숫자 프로퍼티에 L(최솟값, 최댓값)을 입력하면 알아서 일렬로 배치된다. L은 Linear의 약자인 ..
언어권에 따른 String 변환에 주의하자
언어권에 따른 String 변환에 주의하자
2023.02.20무언가의 객체에 대한 ToString()은 별 신경을 쓰지 않고 사용하기 쉬운 메서드이지만, 글로벌 런칭을 주로 한다면 생각보다 사용에 주의가 필요하다. DateTime 파싱 데이터에는 보통 생성 시간이나 수정 시간이 들어가지만, 유니티에서는 DateTime을 Serialize하지 못한다. 이 때문에 나는 보통 DateTime을 String으로 바꿔 저장하고, 불러올 때에는 DateTime.Parse를 쓰고 있다. //세이브 할 때 UtcNow_string = DateTime.UtcNow.ToString(); //로드 할 때 UtcNow_dateTime = DateTime.Parse(UtcNow_string); 하지만 세이브와 로드 사이에 언어권이 변경되는 경우 이 구문은 오류가 날 수 있다. DateT..
is null 연산은 유니티의 ==를 사용하지 않는다
is null 연산은 유니티의 ==를 사용하지 않는다
2023.02.09원인 C# 9.0에서 추가된 패턴 일치 중, not 패턴은 해당 패턴이 일치하지 않도록 요구하는 기능이다. 개인적으로는 A != null을 사용하는 것보다 A is not null을 사용하는 것이 명확하다고 생각했기에, 개발 중인 코드의 조건문에 is를 적극적으로 사용하기로 하였다. 그러나… public Animator Animator { get { if (animator is null) animator = GetComponent(); return animator; } } 위의 코드는 animator == null일 때 새 애니메이터를 찾아 대입하는, 아주 명확하고 간단한 코드다. 하지만 파이어베이스에서는 해당 구문에 참조가 없다며 오류를 뿜어내고 있었다. null 체크로 오류가 날 만한 것은 unity..
Test Framework 적용하기
Test Framework 적용하기
2023.01.27근래 테스트 자동화와 리포팅의 필요성을 느껴 프로젝트에 Unity Test Framework를 적용하려 한다. 어떻게 적용하는지, 코드 작성 방법은 무엇인지 알아보는 글이 되겠다. Test Framework 시작하기 Package Manager에서 Test Framework를 설치하고, Window/General/Test Runner를 실행해준다. Test Framework 적용하기 이 창에서 테스트 코드를 만들거나 재생할 수 있다. 상단에 PlayMode/EditMode가 나뉘어져 있는 것을 확인할 수 있는데, PlayMode는 에디터 플레이 중에 작동한다. 반면에 EditMode는 에디터에서만 작동하므로 에디터 전용 테스트에 유용할 것이다. 아무튼, 나는 PlayMode에서 테스트 항목을 만들고 싶었..
UniTask 파헤치기
UniTask 파헤치기
2022.09.27실무에서 코루틴 말고 UniTask를 쓰는 빈도가 점점 늘어나고 있다. 편하고, 명확해지고, 코루틴과 달리 가비지를 만들지 않아 안 쓸 이유가 없다! 하지만 쉬운 메서드만 사용해보고 본격적으로 공부해 본 적은 없었기에, 이번 글에서는 문서를 읽으며 정리해보고자 한다. UniTask는 메모리 할당이 제로? 코루틴의 경우, 잦은 새 객체 생성과 메모리 할당으로 불필요한 메모리를 차지하는 단점이 있다. iEnumerator Function(float time) { while(true) { Debug.Log("Print"); yield return new WaitForSeconds(1f); } } 위 코드에서는 1초마다 새로운 WaitForSecond 객체가 생성되며, 해당 객체는 1초가 지나기 전까지 메모리에..
Unity Device Simulator 알아보기
Unity Device Simulator 알아보기
2022.07.18유니티의 디바이스 시뮬레이터는 실제 핸드폰 기기에서 게임이 어떻게 보이는지 알 수 있게 해주는 패키지이다. 물론, 진짜로 해당 환경에서 실행된다는 건 아니지만, 해상도에 적용되는 UI와 품질 설정 등의 환경을 확인할 수 있으므로 매우 유용하다고 할 수 있다. 디바이스 시뮬레이터는 패키지 매니저에서 받을 수 있고, 현재(22.07.18) 기준으로 프리뷰 기능이다. 사진의 예시는 갤럭시 Z Fold2의 편 상태 해상도인데, 정면 카메라 위치나 해상도가 잘 적용되어 있는 것을 확인할 수 있다. 최신 기기를 선택할 수 없기에 아쉽다고 느끼겠지만, 시뮬레이션 기기는 JSON으로 정의되기 때문에 커스텀으로 디바이스를 추가하는 것 또한 가능하다. 링크를 참조하여 커스텀 디바이스를 추가해 보자. https://docs..
Unity Null Check할 때 성능을 개선할 수 있는 방법
Unity Null Check할 때 성능을 개선할 수 있는 방법
2022.05.01Null 체크로 해당 객체가 실제로 존재하는지 확인하는 일은 매우 자주 발생하곤 한다. 그런데 최근 IDE를 VS에서 Rider로 갈아탔더니 null 체크를 할 때마다 이것저것 알려주었고, 충격적인 사실을 여러가지 알게 되었다. UnityEngine.Objects UnityEngine.Object는 유니티 엔진에서 관리하는 오브젝트이다. 그리고 유니티는 실제로는 C++로 작성되어 있다. 그리고 C++은 가비지 콜렉터가 존재하지 않는 언어이다. 즉, 언어가 아닌 유니티가 가비지 컬렉터를 관리하고 있다는 뜻이다. UnityObjects를 Destory를 한 뒤 null 체크를 했을 때, 로그에서는 null이 맞다고 뜨니 의심을 품지 않게 되기 마련이다. 그러나 실제로는 null로 객체를 초기화해주지 않았기 ..
어드레서블 에셋 (1)
어드레서블 에셋 (1)
2022.04.10본 글은 공부하며 작성하였습니다. 정보를 얻으실 때 사실과 다르거나 부정확한 정보가 들어있을 수도 있습니다. 어드레서블 에셋을 실제로 사용해보기 전에, 영상을 보고 공부할 점을 정리해보았다. 에셋 번들과 어드레서블 에셋의 차이 어드레서블 에셋 에셋 번들 - 에셋에 주소를 지정할 수 있는 방식 - 에셋 번들처럼 카테고리를 분류할 수 있음 - 사용법이 복잡하지 않음, 인스펙터에 연결하여 사용도 가능함 - 에셋들을 하나로 묶어 압축 파일을 생성하는 개념 - 생성된 에셋 번들을 네트워크를 통해 배포하여 사용 (다운로드 콘텐츠, DLC 등) - 불러오는 코드를 작성하기가 대단히 불편함 어드레서블 개요 - 최소 2018.2 이상의 유니티 버전 사용할 것 - 스크립트를 이용한 관리 가능한 빌드 파이프라인과 리소스 매..
Unity TextMesh Pro Sprite : 이모티콘 및 아이콘을 런타임에 동적으로 생성 또는 변경하기
Unity TextMesh Pro Sprite : 이모티콘 및 아이콘을 런타임에 동적으로 생성 또는 변경하기
2021.08.01이번 프로젝트에서는 텍스트 사이에 아이콘을 넣어야 하는 경우가 있었다. TextMesh Pro가 Sprite Importer를 제공하므로, 쉬울 것이라고 생각했다. 실제로, 통합되어 있는 Sprite를 Multiple로 자르고 SpriteAsset을 생성하기만 하면 제대로 작동했다. 그러나, 내 프로젝트의 경우 번들이나 인터넷에서 다운받은 이미지를 아이콘으로 만드는 작업이 필요했다. TextMeshPro의 Sprite Asset을 만들기 위해서는 에디터를 통해서만 생성, 업데이트 할 수 있었기 때문에 고민이 깊었다. 이를 해결하기 위해 찾아보던 중, 아래의 게시글에서 다운로드한 이미지로 Sprite Asset을 만드는 절차에 대한 공식 답변을 찾아냈다. https://forum.unity.com/thre..