05-01 11:31
Notice
Recent Posts
Recent Comments
«   2025/05   »
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 31
Archives
Today
Total
관리 메뉴

(주) 망나니 힘집

[탑다운] 초상화 본문

유니티 최고/Unity Game Making

[탑다운] 초상화

군포망나니 2022. 1. 20. 22:34

* 초상화 * 

 

전 글에서 Npc 인지 아닌지 구별한 이유 : 초상화 

 

sprite 를 갖고 와서 maltiple 로 변경, no fillter 로 변경 . pixel per size를 알맞게 변경하시고 에디터에 들어가 Grid by cell  size 로 변경하고 pixel size 를 알맞게 변경한 후 padding 에 1값을 넣어주는 것 등등 sprite 조정을 해주면 여러 이미지가 붙어 있던 것이 각각의 이미지로 구분이 됩니다. 

 

- 알맞게 조정을 해주신 다음 - 

 

대화창에 초상화가 들어갈 이미지를 하나 추가해줍니다. 이름을 potrait 라고 변경한 후 

GameManager 스크립트에 변수를 생성하고 할당해줍니다. 

 

//portrait 변수를 생성합니다. 
    public Image portraitImg; 

 

if(isNpc)
        {
            talkText.text = talkData;

            //npc일 때만 이미지를 보여준다. Color 맨뒤 매개변수는 투명도 
            portraitImg.color = new Color(1, 1, 1, 1);
        }
        else
        {
            talkText.text = talkData;
            portraitImg.color = new Color(1, 1, 1, 0);
        }

 

이렇게 코드를 짭니다. 

주의 : 스프라이트가 한 개가 아니고 대화에 따라 npc 의 표정이 변화되는 상태를 추가하여야 합니다. 

#TalkManager Script 

 

 //초상화 데이터를 저장한 Dic 변수 생성 
 Dictionary<int, Sprite> portraitData;
 //초상화 스프라이트를 저장한 배열 생성
 public Sprite[] portraitArr; 

 

>>>배열을 생성하면 TalkManager 에 배열이 생성된다. size 를 입력해서 스프라이트를 추가한다. 

 

// id + i 를 입력하고 배열에 넣어줍니다. 
       //id =1000 
       portraitData.Add(1000 + 0, portraitArr[0]);
       portraitData.Add(1000 + 1, portraitArr[1]);
       portraitData.Add(1000 + 2, portraitArr[2]);
       portraitData.Add(1000 + 3, portraitArr[3]);

       portraitData.Add(2000 + 0, portraitArr[4]);
       portraitData.Add(2000 + 1, portraitArr[5]);
       portraitData.Add(2000 + 2, portraitArr[6]);
       portraitData.Add(2000 + 3, portraitArr[7]);

 

//지정된 초상화 스프라이트를 반환할 함수를 생성한다. 

public Sprite GetPortrait(int id, int portraitIndex) 
    {
        return portraitData[id + portraitIndex]; 
    }

 

//여기서 NPC 표정은 문장과 1:1 매칭이기 때문에(문장마다 표정이 다르기 때문에)

//이런 식으로 뒤에 구분자를 만든다. 

talkData.Add(1000, new string[] { "안녕:0" , "반가워:1" });
talkData.Add(2000, new string[] { "누구야?:0" ,"말걸지마:1" });

 

//구분자를 쓰면 한 문장이 두문장이 되는 것이기 때문에 0번째 인덱스를 사용하여야 한다. 
talkText.text = talkData.Split(':')[0]; 

 

//Parse(): 문자열을 해당 타입으로 변환해주는 함수 -> 이유 talkData 가 string 이기 때문에 int 형으로 바꿔준다. 
portraitImg.sprite = talkManager.GetPortrait(id, int.Parse(talkData.Split(':')[1])); 

*주의: Parse() 는 문자열 내용이 타입과 맞지 않으면 오류가 발생한다. * 

 

그 후, GameManager 에 Portrait Img 에 Portrait 이미지를 집어넣는다. 

 

>>> 그렇다면 정상적으로 작동이 된다. 드디어 끝났다... 

 

https://www.youtube.com/watch?v=qJjfYvEYKiE 

복습 꾸준히 하자.