일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- AES
- job
- C#
- DotsTween
- Dynamic Font
- base64
- Dots
- 이미지 폰트
- 암호화
- ui
- adfit
- 텍스트 메시 프로
- sha
- 단말기 해상도
- 프레임워크
- 커스텀 패키지
- 2D Camera
- TextMeshPro
- 다이나믹 폰트
- jumping ball
- 샘플
- 가이드
- Framework
- unity
- Job 시스템
- Custom Package
- 최적화
- RSA
- Unity Editor
- Tween
- Today
- Total
EveryDay.DevUp
[Unity] AssetPostprocessor (어셋 포스트 프로세서) - 어셋을 코드로 관리하기 본문
게임 개발을 여러사람이 진행할 경우, 숙련도에 따라 어셋을 임포트할 때 정해둔 규칙을 따르지 않는 실수가 발생할 수 있다.
예를들어 ui 텍스쳐를 임포트할 때 read/write 옵션을 꺼야하는데 끄는 경우가 있을 수 있고, 텍스쳐 포맷을 잘 못 설정하는 경우가 발생할 수 있다.
개발 과정 중에 체크를 할 수 있다면 다행이지만, 사람은 누구나 실수를 할 수 있기 때문에 코드로 사람의 실수를 방어 할 필요가 있다.
프로젝트마다 정하는 규칙이 다르기때문에 해당 코드를 일반화하기는 어려울 것이다. 그래서 Unity는 어셋이 변경이 될 때 콜백을 받을 수 있도록 하였다.
콜백을 받으려면 AssetPostProcessor를 상속받아, 변경이 발생했을 때 콜백을 받을 수 있도록 어셋의 타입에 따른 함수를 정의하면 된다.
using UnityEditor;
using UnityEngine;
public class CheckAssetInvalid : AssetPostprocessor
{
void OnPostprocessTexture(Texture2D texture)
{
TextureImporter textureImporter = (TextureImporter)assetImporter;
if( textureImporter != null )
{
/// texture에 readable이 켜져있다면 끄도록 설정
if( textureImporter.isReadable )
{
textureImporter.isReadable = false;
Debug.LogWarning( " textureImporter.isReadable " );
}
/// texture에 경로가 "Assets/Texture/BG"라면 mipmap옵션을 켜줌
if( assetPath.StartsWith( "Assets/Texture/BG" ) )
{
if( textureImporter.mipmapEnabled == false )
{
textureImporter.mipmapEnabled = true;
Debug.LogWarning( " textureImporter.mipmapEnabled " );
}
}
}
}
}
Unity에서는 AssetPostprocessor의 다음과 같은 함수를 제공하고 있다.
: 함수의 규칙을 간단히 살펴보면 OnPost는 변경이 완료 될 때 OnPre는 변경이 일어나기 직전이라는 것을 알 수 있고 OnPost/Pre Process뒤에는 Asset 의 타입이 오는 것을 알 수 있다.
: OnPost함수만을 사용해도 충분히 원하는 형태의 어셋 체크가 가능할 것으로 생각된다.
● Unity 에서 가이드하는 일반적인 어셋의 규칙
▶ Textures (텍스쳐 )
: Read/Write Enable 플래그는 옵션이 켜져있을 때 텍스쳐가 GPU 메모리, CPU가 접근 가능한 메모리에 중복으로 올라가기 때문에 메모리가 이중으로 소모된다. 텍스쳐 데이터를 조작하는 경우가 아니면 옵션을 꺼야 한다.
: 변동이 적은 Z뎁스를 가지는 경우 ( 예를 들어 UI ) 밉맵을 비활성화하면 활성화 했을 때보다 1/3의 메모리를 절약할 수 있다.
: 텍스쳐 압축은 프로젝트의 따라 다를 수 있지만, 하나의 프로젝트안에서는 대부분 압축 포맷이 동일하기 때문에 규칙을 정해서 압축을 할 수 있는게 좋다
: 텍스쳐의 크기를 제한하여, 비정상적으로 큰 텍스쳐가 생기지 않도록 한다.
▶ 모델
: 모델의 경우 Read/Write Enable 옵션이 켜져있는 것이 디폴트이기 때문에, 메시를 수정하지 않는 모델이라면 끌 수 있도록 설정하는 것이 좋다.
: 애니매이션이 필요하지 않는 모델이라면 모델의 리그를 비활성화 한다.
: 메시 렌더러에 불필요한 설정이 켜져 있는 경우 ( 쉐도우 캐스팅, 라이트 프로프 샘플링 ) 끌 수 있도록 한다.
▶ 오디오
: 프로젝트에서 정한 오디오의 비트레이트의 크기에 맞추어 비트레이트를 조절할 수 있도록 한다.
: 프로젝트에서 정한 오디오의 압축 포맷을 사용할 수 있도록 한다.
참고 자료 : https://docs.unity3d.com/kr/530/ScriptReference/AssetPostprocessor.html
참고 자료 : https://docs.unity3d.com/kr/current/Manual/BestPracticeUnderstandingPerformanceInUnity4.html
'Unity > 최적화' 카테고리의 다른 글
[Unity] Foreach의 GC의 원인 및 수정 (0) | 2021.12.29 |
---|---|
[Unity] Sprite Atlas ( 스프라이트 아틀라스 ) (0) | 2020.05.29 |
[Unity] 9-Slice ( 나인 슬라이스 ) 이미지 (0) | 2020.05.27 |
[Unity] Draw Call ( 드로우콜 ), Batching ( 배칭 ) (0) | 2020.05.25 |
[Unity] UGUI 최적화 (0) | 2020.05.20 |