상세 컨텐츠

본문 제목

[Unity] 유니티 이미지, 이미지 path, 스프라이트 불러와 넣기 등등 관련

게임엔진관련/유니티 엔진

by AlrepondTech 2019. 5. 16. 00:19

본문

반응형

 

 

 

 

=======================

=======================

=======================

 

 

 

 

 

 

 

 

 

 

 

출처: https://dlgnlfus.tistory.com/81

 

Resources.Load기능

http://docs.unity3d.com/ScriptReference/Resources.Load.html

 

 

GameObject a = Instantiate(Resources.Load("A", typeof(GameObject)))as GameObject;

GameObject a = Instantiate(Resources.Load<GameObject>("A");

 

리소스 파일에 있는 리소스들은 메모리에 올려놓은 상태라 많이 사용하면 좋치않음.

애셋번들을 사용해야함.

 

 

 

 



출처: https://dlgnlfus.tistory.com/81 [게임 개발 일기장]

 

 

 

=======================

=======================

=======================

 

 

 

 

 

 

출처: http://blog.kpaper.com/2017/02/unity3d.html

 

Unity3D 외부 리소스 가져오기

 

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

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

# 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"; 

 

 

 

 

=======================

=======================

=======================

 

 

 

 

 

출처: https://is03.tistory.com/52

 

Unity UI 에서 Image 객체를 찾고,

스크립트 내에서 Image의 Sprite 교체하는 방법

 

 

 

 

Canvas - Panel - Image 사용한다고 가정합니다.

 

 

 

1. 스크립트 내에서 Image 변수에 컴포넌트를 할당하고 싶을 경우,

 

 

- Image 에 userTag1 태그가 되어있다고 가정합니다

 

public class A : MonoBehaviour
{
    public GameObject imageObj;
    public Image myImage;
 
    Start()
    {
        imageObj = GameObject.FindGameObjectWithTag("userTag1");
        myImage = imageObj.GetComponent();
    }
}

 

 

 

2. 스크립트 내에서  Image 그림을 바꾸고 싶을 경우,

 

 

 

 

 

 

 

 

Image 안의 Image(Script) 부분 컴포넌트입니다.

 

그림을 바꿔주고 싶을 때 Source Image 부분을 바꿔줘야하는데,

 

.png 이미지는 Sprite(2D and UI) 로 설정해두었습니다.

 

 

 

위의 코드에서 추가하였습니다.

 

public class A : MonoBehaviour
{
    public GameObject imageObj;
    public Image myImage;
 
    Start()
    {
        imageObj = GameObject.FindGameObjectWithTag("userTag1");
        myImage = imageObj.GetComponent();
    }
 
 
 
    void Update()
    {
        if(Input.GetKeyDown(KeyCode.Space))
        {
            Func();
        }
    }
 
 
    void Func()
    {
        mySkimyImage.sprite = 
                        Resources.Load("SkillIcons/Sword_Skill") 
                        as Sprite;
    }
}

 

 

 

 

 

반응형

 

728x90

 

 



출처: https://is03.tistory.com/52 [code wins arguments]

 

 

 

=======================

=======================

=======================

 

 

 

 

 

 

출처: http://lab.gamecodi.com/board/zboard.php?id=GAMECODILAB_QnA_etc&page=1&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=hit&desc=asc&no=3981

 





유니티 Sprite를 사용하고 있는데요
Multiple입니다.


이름으로써 SpriteRenderer의 Sprite를 교체해주고 싶은데요..


일반 파일이라면 Resource.Load("이름", typeof(sprite)); 로 교체가 가능한데.
Multiple은 안되네요...
어떻게 읽어와야 할지.. 답변좀 부탁드립니다.

--------------------------------------------------------------------------------------------------------------------------------------------------

 

Sprite[] sprites = Resources.LoadAll<Sprite>("MultipleSpriteFile");

위와같은식으로 받아서 사용하시면 됩니다.

 

 

 

 

=======================

=======================

=======================

 

 

 

 

 

 

출처: http://blog.naver.com/PostView.nhn?blogId=verge1379&logNo=220185586898&parentCategoryNo=&categoryNo=28&viewDate=&isShowPopularPosts=false&from=postView

 

4.6 UI] 스프라이트 시트(Sprite - multiple설정)에서 특정 스프라이트 가져오기

 

  

  

 

 좌측은 스프라이트 시트로 제작할 그림파일의 Inspector 세팅이며,  우측은 스프라이트 시트로 조각낸 결과물이다.

 

특히 UI 제작에 있어 nGUI의 시스템을 채용하여 uGUI 시스템을 도입한 4.6 데모버전에서, 활용할 수 있는 부분이 더욱 늘어났다.

 

UI Image를 스프라이트 시트에서 한번 가져온 후, 코드를 통해 특정 상황에서 스프라이트 시트의 다른 이미지로 교체해야할 일이 

 

생길 수가 있는데, 이 때 스크립트를 통하여 스프라이트 시트의 특정 파트의 스프라이트 하나만을 가져와서 사용할 수 있는가? 

 

하는 점에서 OK. 개편된 UI 시스템 중, 웬만한 건 다 스크립트를 통해 컨트롤 할수 있었다.

 

 

 int row = 스프라이트시트 행 수;

 int col = 스프라이트시트 열 수;

 int x = 가져올 스프라이트의 x 좌표;

 int y = 가져올 스프라이트의 y 좌표; 

 

 Sprite[] sprites = Resources.LoadAll<Sprite>("스프라이트 시트 파일의 위치");

 Sprite pSprite = sprites[row * xcol * y];

 

 

이렇게 간단한 방법으로 pSprite 에 원하는 스프라이트를 가져을 수 있었다.

 

4.6 Ui 시스템을 여러가지로 실험해본 결과, 하나하나 코드로 다 제어해야 했었던 기존방식에 비한 장점들을 나열하자면...

 

1. UI의 Pivot / Rect세팅을 통해 해상도에 따른 배치를 하기 간편하다.

2. 애니메이션 제작 및 삽입을 통해 상호작용 시의 효과를 좀 더 다양하고 효과적으로 줄 수가 있다.

3. 자주 사용되는 스크롤, 버튼 일부, 텍스트 세팅을 프리팹으로 구축해두는 등, 약간의 준비단계를 거치면 드래그앤 드롭 후 수치만 조금 

   조정하면 되는 효율적인 UI 작업을 할 수 있다.

 

라는 점이다. 

 

 

 

=======================

=======================

=======================

 

 

 

 

 

 

출처: https://hakurei.tistory.com/m/265?category=738717

 

 

Sprite를 여러개 생성한 뒤, 객체를 동적으로 생성해서 입혀야 할 일이 생겼다.

 

Sprite Editor를 이용해서, 통 이미지를 split해서 Sprite까지는 생성했는데, 실제 폴더 경로에서는 파일들이 보이지 않고 Unity Editor상에서만 확인이 가능하지만, 아래와 같은 코드를 이용하면 Sprite를 배열형태로 가져와서 활용이 가능하다.

 

private Sprite[] sprites;

void Start() {

sprites = Resources.LoadAll<Sprite>("Sprite가 위치한 폴더명");

}

 

이전 포스팅(http://hakurei.tistory.com/264)에서 언급했던 것과 마찬가지로, Resources의 함수를 사용하기 때문에, Resources 폴더 밑에 위치해야 하며, 폴더명만 적어주면 Sprite 형태의 객체들을 배열형태로 잘 가져와준다.

 

 

 

=======================

=======================

=======================

 

 

 

 

 

 

#기타관련링크

https://m.blog.naver.com/PostView.nhn?blogId=gold_metal&logNo=220546695023&proxyReferer=https%3A%2F%2Fwww.google.co.kr%2F

 

https://rgy0409.tistory.com/297

 

https://rucya.tistory.com/130

 

 

 

 

=======================

=======================

=======================

 

 

 

반응형


관련글 더보기

댓글 영역