본문 바로가기
유니티 & C#

유니티 - 런타임에 외부 경로 이미지 로드하여 스프라이트 생성하기

by 17번 일개미 2023. 11. 1.
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
반응형