유니티 이미지 파일 불러 오기 - yuniti imiji pail bulleo ogi

오늘 포스팅은 프로젝트 내에서 어떤 파일 안에 들어있는 이미지나, 오디오 소스를 전체 가져오기를 하고 싶을 때 유용할 것 같아서 포스팅을 합니다.

함수는 Resources.LoadAll 을 이용하고 사용 방법으로,

1. 파일 전체를 저장할 배열을 먼저 선언

2. Resources.LoadAll<파일 타입>("파일 경로"); 를 이용한 스크립트 작성.

필자는 이미지 파일을 불러오기 위하여 sprite 를 이용하였음.

3. 프로젝트 실행하기.

아래는 실행을 위한 스크립트 예시 입니다.

유니티 이미지 파일 불러 오기 - yuniti imiji pail bulleo ogi

  1. using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class basic : MonoBehaviour { Sprite[] sprite;    //배열 선언
  2. void Start() {
  3. //배열 안에 "file" 파일 전체 로드. sprite = Resources.LoadAll<Sprite>("file"); if (sprite == null) Debug.Log("null"); for (int i = 0; i < sprite.Length; i++) {
  4. //들어간 배열 수 만큼 반복하여 이름 콘솔 창에 띄움. Debug.Log(sprite[i].name); } } }

각 배열 이름 콘솔 창으로 보여줌. 아래 그림과 같이 배열 안에 들어가는 순서는 숫자 순서대로 보이며, 이는 영어로 표기 될 시 알파벳 순서로 배열 안에 저장됨을 알 수 있다.

이상 오늘 포스팅을 마치겠습니다.

유니티로 빌드하면 에셋이 묶여서 엑세스가 불가하게 된다.
대량의 에셋을 추가하려면 에셋 번들을 이용하면 되는데,
이런 경우 말고 직접 리소스를 추가하고 싶은 경우가 있다.

최근 프로젝트에서 필요해서 하는김에 간단히 정리해봤다.
처음 하는 사람들에게 도움이 되길 -_-*

# Resource.Load 사용하기


private void ResourceLoadSample(){

  Texture2D texture = new Texture2D(0, 0); 
  string PATH = "Texture/image.jpg";    // 이미지 파일 패스를 써준다. 
  //중요한 것은 유니티 프로젝트 Assets/Resource/ 폴더 이후의 경로를 써주는 것이다. 이 폴더는 맘대로 바꿀 수가 없다.
  texture = Resources.Load(PATH,typeof(Texture2D)) as Texture2D;  // 이미지 로드
  targetObject.mainTexture = texture;  // 타겟 오브젝트에 메인 텍스쳐를 넣어준다.

}

# System.File.IO로 직접 가져오기
Resource 폴더가 아니라 다른 폴더 특히 StreamingAssets에서 가져오려면

Resource.Load 함수를 쓰지 말고 직접 System.File.IO 로 가져와야 한다.
byte[] 로 가져온 다음에 Texture2D.LoadImage()를 사용하여 텍스쳐2D로 읽어오면 된다.



private void SystemIOFileLoad(){

byte[] byteTexture = System.IO.File.ReadAllBytes(Path); 
    if (byteTexture.Length > 0) 
    { 
        texture = new Texture2D(0, 0); 
        texture.LoadImage(byteTexture); 
    } 
}

# 원하는 경로/파일에 엑세스 하기


# StreamingAssets 폴더의 하위 폴더/파일에 접근해본다.
Path = System.IO.Path.Combine(Application.streamingAssetsPath, path); // path = 하위폴더 "하위폴더1/하위폴더2/file.png";


unity2D 기본

유니티2D 강좌 2 - Sprite 기본 세팅

두 번째 강좌입니다.

게임 그래픽에 사용되는 이미지에는 Sprite와 Texture로 2개가 존재합니다.

그리고 일반적으로 Sprite는 2D그래픽에, Texture는 3D그래픽에 사용되는 이미지를 말합니다.

즉, 우리는 2D게임을 제작할 예정이니 2D그래픽 전용인 Sprite에 대하여 배워 보도록 하겠습니다.

1. ​이미지 파일 불러오기

이전 강좌에서 배웠던 에셋 탐색기라고 불리는 공간에서 우클릭을 하여 Create -> Folder 를 통하여 폴더를 하나 만들고,

이름은 Sprites로 지어줍니다.

이 때, 우클릭을 하여 생성할 수 있는 공간은 아래처럼
왼쪽의 프로젝트 목록에서 폴더에 직접 우클릭을 하는 방법과,

에셋 탐색기의 빈 공간에서 우클릭을 하는 방법이 있습니다.


 또는 

이 때, 한 번 지은 이름은 Unity자체내에서는 수정할 수 없으니 주의합니다.

만약 잘못 지었을 경우, 외부에서 저장된 폴더를 열어 이름을 직접 바꾸거나, 폴더를 선택하고 Delete키를 눌러 삭제하고 다시 만들어 줍니다. 

  이렇게 폴더를 만들었으면, 만든 폴더를 더블 클릭하여 안으로 들어가줍니다.

sprites폴더 내에서 우클릭을 하여 Import New Asset을 눌러줍니다.

그럼 파일을 불러오는 창이 나오는데, 원하는 이미지를 하나 아무거나 불러옵니다. 만약 적당한 것이 없다면, 첨부파일에서 basic_ver02.png를 불러옵니다.

이런 화면이 나오면 성공입니다.

​2. 이미지 파일 기본 설정하기

오른쪽 위에 있는 Inspector, 즉 오브젝트 속성에 집중해주세요. 만약 빈칸으로 되어있다면, sprites폴더에 있는 이미지 파일을 선택하시면 됩니다.

그리고 아래의 이미지를 오른쪽 처럼 되도록 속성을 변경해주세요.

 ---> 

오브젝트 속성 일람 (밑줄 친 부분은 우리가 바꾸어야 하는 값)

 Texture Type : 이미지 파일의 타입을 결정합니다. sprite인지 Texture인지 등을 결정합니다.

 Sprite Mode :

   single - 이미지 원본 파일을 그대로 사용합니다.

   Multiple - 이미지 파일을 여러 조각으로 잘라서 사용합니다.

 Filter Mode :

   Billnear - 이미지를 약간 뭉게서 깨지는 부분을 부드럽게 바꾸어줍니다.

   Point (no Filter) - 이미지 원본 파일을 그대로 사용합니다.


여러 조각 조각난 이미지 파일을 굳이 한 파일에 합친 다음 프로그램 내에서 자르는 이유는, 여러개의 작은 이미지들 보다 하나의 큰 이미지가 용량이 더 적기 때문입니다. 특히 이미지의 가로 세로 사이즈가 2의 거듭제곱일 때 용량이 가장 적습니다.

이제 속성에서 Sprite Editor를 누르면 현재 상태를 적용하겠냐는 메시지 박스가 등장하는데, Apply를 눌러 오른쪽과 같은 창이 나오도록 합니다.

Slice를 눌러 화살표 친 순서대로 속성을 설정해 줍니다. 여기서 중요한건 Slice를 마지막에 눌러야 한다는 것입니다.

슬라이스 속성 일람 

 Type :

   Automatic - 유니티에서 자동으로 이미지를 인식하여 조각냅니다.

   Grid by Cell Size - 일정 크기를 입력하여 그 크기마다 이미지를 격자형으로 조각냅니다.

 Pivot : 이미지의 중심이 오는 지점을 선택합니다. 실제 게임에서 포지션의 중심이 되는 지점을 결정해줍니다.

마지막으로 Apply를 누르고 닫아줍니다.

이제 에셋 탐색기에서 원으로 표시한 부분을 눌러주세요. 

이렇게 우리는 이미지가 제대로 잘려있는 것을 확인할 수 있습니다. 

​3. 이미지 게임에 적용시키기 


이미지를 게임 내에 적용시키는 방법, 즉 오브젝트로 만드는 방법에는 크게 2가지가 있습니다.

첫번째 방법은 아래처럼 에셋탐색기에서 마우스로 드래그하여 작업 뷰포트로 옮기는 것입니다.

그리고 두번째 방법은 2가지 스탭으로 이루어집니다.

먼저 오브젝트 탐색기에서 우클릭을 하여 2D Object -> Sprite를 선택합니다.

그런 다음 아래처럼 에셋 탐색기에서 이미지를 끌어서 

오브젝트 속성 창의 Sprite Renderer -> Sprite의 None(sprite)속성에 드래그합니다.

그리고 오브젝트의 이름을 바꾸고 싶다면 오브젝트 탐색기에서 이름을 바꾸고자 하는 오브젝트를 우클릭 하고 Rename을 선택하여 이름을 바꿀 수 있습니다.

아래와 같은 화면이 되도록 하면 되겠습니다. 

이것으로 두 번째 강좌를 마치도록 하겠습니다.