ScriptableObject는 대량의 데이터를 저장할 수 있는 데이터 컨테이너로 데이터를 저장하고 있기 때문에 변경되지 않는 데이터를 갖는 프리팹의 경우 ScriptableObject를 사용하면 인스턴스화할 때마다 데이터를 중복하여 만들지 않기 때문에 메모리 사용을 줄일 수 있다. MonoBehaviour와 같이 ScriptableObject는 Unity의 Object에서 파생되지만 MonoBehaviour와 달리 GameObject에 연결할 수 없고 에셋으로 저장된다. 편집기에서 사용할 때 데이터 저장은 아무 때나 가능하다. 다만 게임을 플레이하는 중에는 데이터를 저장할 수 없고 저장된 데이터를 사용하는 것만 할 수 있다. 편집기에서 에셋 형태로 ScriptableObject에 저장한 데이터는 세션 ..
1. 중첩 Canvas 1.1 Canvas 안의 요소가 변경되면 Canvas 안의 모든 요소가 갱신된다. 1.2 Canvas가 중첩됐을 때 부모와 자식 Canvas 사이에는 서로 영향을 주지 않는다. (부모 Canvas의 크기가 변경되는 경우는 예외) 위의 두 가지 때문에 변경이 잦은 요소를 중첩된 Canvas 중 자식 Canvas에 두어 별도로 관리하면 성능이 향상될 가능성이 높다. 2. 계층의 깊이를 낮게 유지 UI의 RectTransform은 계층구조로 이루어져 있다. 때문에 계층의 깊이가 깊어질수록 Canvas 갱신 등의 비용이 커진다. 3. Re-parenting 주의 부모를 바꾸는 행위를 할 때 Canvas가 갱신될 가능성이 높기 때문에 자제하는 것이 좋다. 4. Pixel Perfect 사용..
1. LINQ를 사용하지 않는다. LINQ는 사용하기는 쉽지만, 알고리즘을 직접 만들어 사용하는 것보다 일반적으로 더 많은 자원이 필요하다. 2. 최대한 GC가 동작하지 않도록 한다. GC(가비지 컬렉터)는 자동 메모리 관리자로 메모리 할당 및 해제를 관리한다. 자동으로 관리되기 때문에 개발자는 편하지만 동작하게 될 때 많은 자원을 사용하게 된다. GC가 동작하는 시점은 시스템의 메모리가 부족해지거나 관리되는 힙에 허용되는 임계값을 초과하는 경우이다. 즉 사용되지 않는 메모리가 많아질수록 GC가 동작하게 될 여지가 많아지기 때문에 이를 막아야 한다. 3. boxing에 주의한다. boxing이란 int, bool, 등과 같은 값 형식 변수를 참조 형식 변수로 래핑하는 것으로 래핑하게 되면 메모리에 할당되..