728x90
반응형
프로젝트에 필요한 스프라이트가 포함되어 있어도 괜찮지만,
빌드된 프로그램이 재빌드 없이 내부 리소스가 교체되어야 할 때에는
지정된 폴더에서 리소스를 읽어 동적으로 로드해야한다.
예시로 이런 경우도 있다.
어떤 게임에서는 유저가 직접 찍은 스크린샷이나 원하는 이미지를 게임 내 UI 나 오브젝트에 텍스쳐로 활용하기도 한다.
이럴 때는 빌드에 포함되는 게임 내 리소스가 아니고 배포 이후 유저에 의해 생성되는 파일이다보니 다른 방식으로 로드가 필요하다.
이런 과정에서 동적으로 스프라이트를 생성하는 방법을 적어본다!
private Sprite MakeSprite(string filePath, Vector2 pivot)
{
if (string.IsNullOrEmpty(filePath) == true) return null;
// Get File Name
FileInfo fileInfo = new FileInfo(filePath);
// Read image
byte[] bytes = File.ReadAllBytes(filePath);
// Create Texture
Texture2D texture = new Texture2D(100, 100);
texture.LoadImage(bytes);
texture.name = fileInfo.Name.Split('.')[0];
// Create Sprite
Sprite sprite = Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), pivot);
sprite.name = texture.name;
return sprite;
}
FileInfo 는 Sprite 의 이름을 지정해주기 위해 가져온다. 이름이 필요없다면 생략해도 되는 과정이다.
이미지를 Byte 로 읽어 텍스쳐로 생성해주고, 생성된 텍스쳐를 Sprite.Create() 를 통해 만들어준다.
사용했다면 필요없어지는 시점에 반드시 Sprite.Destory() 를 쌍으로 호출해주어야 한다.
728x90
반응형
'유니티 & C#' 카테고리의 다른 글
유니티 모바일 <가로모드 / 세로모드> 빌드, 런타임 시점에 코드로 컨트롤하기 (0) | 2023.11.15 |
---|---|
유니티 Target API Level 코드로 수정하기 (API 31 이상 일 때) (0) | 2023.11.06 |
유니티 UI 이미지가 보이지 않을 때 Maskable 옵션 확인하기 (2) | 2023.11.01 |
유니티 - 씬 이름을 Enum 으로 관리하기 [InitializeOnLoadMethod] 사용 (0) | 2023.10.26 |
유니티 - Define Symbol 코드로 제어하기 (0) | 2023.10.24 |