Unity, C# 프로그래밍(7)
-
유니티 Color Hex 값 편리하게 사용하기
보통 컬러값을 사용할 때 Hex 코드를 많이 사용하는데 Hex코드를 간단하게 코드에서 사용할 수 있게 하는 법을 정리했다. 보통 헥스코드는 아래처럼 되어있는데 8자리인 경우(RGBA or ARGB)도 있고 6자리(RGB)인 경우도 있다. #FF0000FF #86B996FF 유니티에서는 RGB만 코드로 표현하지만 실제 Alpha 값까지 지정해서 사용하는 경우가 많기 때문에 오늘은 RGBA 기준으로만 작성했다. (코드를 보고 살짝만 수정하면 RGB or ARGB도 지원하게 만들 수 있다) public static class ColorHex { /// /// 0xRRGGBBAA /// public static Color32 FromRgba(uint rgba) { // 비트 시프트 연산을 이용해서 인자 rgba..
2024.02.28 -
유니티 에셋 번들 빌드 시간 단축 사례
조금 예전에 작업했던 일이지만.. 잊어버리기 전에 블로그에 적어두면 좋을 것 같아서 한번 써보는 글. 개요 회사에서는 지금 Jenkins로 앱 빌드 및 에셋번들 (패치파일) 빌드를 하고 있다. 보통 간단한 에셋번들 관련 테스트는 매일 아침에 자동으로 빌드되는 결과물들로 잘 사용하지만 가끔씩 내 작업 브랜치에서 변경된 구조로 번들을 뽑아서 확인해봐야 할 때가 있다. 번들 빌드를 한번 새로 뽑을때마다 1시간 30분 정도 소요되었었는데 개발 단계 테스트 할 때마다, 또 이후 QA 테스트 요청 할 때 Windows, iOS, Android 번들을 다 뽑아서 테스트해야 하다보니 시간이 엄청 오래 걸렸고 이거 더 빠르게 할 수 없나?! 하면서 빌드 로직을 조금 손봤었는데 그 과정에 대한 기록이다. 문제점 그때 살펴..
2024.02.01 -
유니티 C# 개발 시 사용하기 좋은 툴 및 사이트
1. JetBrains DotPeek 유니티 + C# 으로 개발 시 프로파일러를 많이 사용하는데 프로파일러는 만능이 아니다. GC.Alloc 이라고만 표시된다던지 (보통 boxing..), DisplayClass 등등 바로 알기 힘든 내용들이 나오는 경우가 많은데 이럴때 디컴파일러를 활용해서 IL 코드 및 Low-Level C# 으로 확인해보면 무엇이 문제인지 파악하기 쉬운 경우가 많다. JetBrains DotPeek https://www.jetbrains.com/decompiler/ dotPeek: Free .NET Decompiler & Assembly Browser by JetBrains dotPeek is a free tool based on ReSharper. It can reliably de..
2024.01.03 -
C#의 람다 (익명 함수) 사용 시 주의할 점
1. C# 의 람다는 capture by reference 만 존재한다 internal class Program { static void Main(string[] args) { List actions = new List(10); for (int i = 0; i { Console.WriteLine(i); }); } foreach (Action action in actions) { action.Invoke(); } } } (많이 나오는 주의 사항이라 다들 알고 있을 것 같지만 주의사항 모음이니 추가) C# 의 람다 식을 처음 접한 사람들은 위의 코드를 보고 출력이 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 와 같이 나올 것이라고 예측하는 사람도..
2024.01.03 -
XML 데이터 로딩 최적화 사례
회사에서 현재 작업중인 프로젝트는 기획자 분들이 데이터를 XML로 관리하고 있다. 이 XML이라는 포맷은 사람이 읽고 쓰기는 쉽지만 용량이 크고 파싱이 어려운 문제가 있는데 프로젝트 라이브 초창기에는 절대적인 데이터 양이 많지 않아 성능 문제가 없었다. (발견이 늦었다..) 이런 상태로 오랫동안 라이브 서비스가 진행되다 보니 XML 파일의 개수만 200개가 넘어갔고 총 파일 용량도 150MB 정도로 매우 커지면서 여러 문제가 생기기 시작했다. 로딩 속도가 많이 느려졌다 (PC 빌드 기준으로도 거의 10초가량 소요) 파일 포맷 특성상 파싱하는 과정에서 임시 문자열 (string) 객체가 많이 생성되어 앱 시작과 동시에 메모리 파편화가 심하게 일어나고, 또 메모리를 많이 사용하다보니 저사양 모바일 디바이스에..
2023.12.28 -
유니티 ScriptedImporter 써보기 2부
1부에서는 ScriptedImporter의 간단한 사용법을 알아봤는데, 2부에서는 이미 Built-in 임포터로 정의되어있는 확장자들을 오버라이드 하는 법을 알아볼거다. 회사에서 현재 진행중인 프로젝트에서는 맵 파일을 bytes 확장자로 저장하고 있는데 해당 bytes 파일은 로드할 때 시간이 좀 걸리는 상황이였다. (로드할 때 TextAsset 으로 로드해서 여러 처리 과정이 있었다. GC도 좀 발생하고..) 이때 확장자를 바꿔서 등록하기에는 몇백개의 맵 파일이 있고, 우리 팀에서 관리하지 않는 툴에서 파일을 수정/저장하고 있었다. 물론 확장자를 바꾸려면 바꿀 수 있는데 그래도 오버라이드가 가능하기 때문에 파일을 많이 바꾸기 싫어서 시도해봤다. ScriptedImporter 오버라이드 해보기 자 먼저 ..
2023.07.14