전체 글(10)
-
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 -
유니티 ScriptedImporter 써보기 1부
회사에서 작업하면서 ScriptedImporter 를 적용해 보면서 자료를 많이 찾아봤었는데 쉽게 나오지 않았어서 다른 사람들도 보고 쉽게 따라할 수 있게 여기에 따로 정리한다. 총 2부로 구성해 볼 예정 1부는 ScriptedImporter 사용법. 2부는 내가 좀 찾는데 시간이 걸렸던 built-in 임포터에서 사용 중인 확장자의 임포터 오버라이드 방법. ScriptedImporter란? ScriptedImporter는 유니티에서 에셋을 임포트하는 AssetImporter를 사용자 정의할 수 있게 만든 클래스다. 이걸 설명하려면 먼저 에셋 임포터에 대해서 설명해야 하는데 알고 있는 사람들은 뒷부분으로 넘어가면 된다. AssetImporter란? 먼저 AssetImporter에 대해서 설명하자면 유니티..
2023.07.13