본문으로 바로가기





안녕하세요 피슈입니다.


오늘은 저번시간에 이어 클릭커 게임을 마무리 지어 보도록 하겠습니다.


첫번째 강좌를 하나의 포스팅으로 짧게 끝내려고 했는데 의도치 않게 길어졌네요


저번시간에 이어 간단하게 클릭커 게임이 완성되는 모습을 보여드리겠습니다.


하나씩 차근차근 따라해 주세요





1. 변수등록



게임에서 유저가 포켓볼을 터치 할 때마다 컴퓨터는 유저가 몇번을 터치했는지를 기억해야합니다.


그래서 여러분이 설정한 목표 수치에 도착했을 때 어떤 이벤트를 발생시킬 수 있는 것이지요.



그래서 myNum이라는 변수를 등록해야합니다.


start() 위에 


int myNum;





이라고 써줍니다.


변수라는 것이 무엇이냐??


변하는 수를 변수라고 합니다.


우리가 저장해야할 숫자 또는  문자 데이터를 담는 그릇이라고 생각하시면 됩니다.


그릇에는 이것저것 옮겨서 담을 수 있듯이, 변수에는 여러 데이터를 담을 수 있습니다. 


myNum 앞에 int라는 것이 붙는데요 이게 뭐야?? 


int는 integer의 약자로 정수를 뜻합니다.


0, 1, 2, 3, 이렇게 소수점이 없는 숫자인 정수를 말합니다.


그래서 myNum 이라는 변수의 형은 int형이라는 것을 지정해준다는 의미로


int myNum; 


이렇게 적어준것입닌다.


그리고 문자이 끝났을 때 세미콜론   '   ;  ' 이걸 빼먹지 않는것 꼭 기억해주세요!!



myNum 이라는 변수를 설정해준다음


이 변수는 Click할 때마다 1씩 증가하여야 합니다.


그래서 저번시간에 만든 Click() 이라는 함수 안에가서


다음과 같이 써줍니다.





myNum++;



이것은 myNum 을 1씩 증가시키겠다는 뜻입니다.


그리고 Debug.Log("myNum : " + myNum);


이렇게 해주면  클릭할 때 마다 myNum 값을 출력해줄것입니다. 




그래서 실행하면 콘솔창에 다음과 같이 나오는 것을 확인 하실 수 있습니다. 









2. 목표 설정


여기까지 됬다면  목표를 설정할 차례 입니다.


게임의 특성상 유저는 이 게임의 목표가 모를 것입니다. 하지만 우리는 유저가 목표치까지 도달 하였을 때


이벤트를 발생시켜야 하기 때문에 목표를 설정해 주어야 합니다.


myNum 변수를 설정해 준 밑에


public int pichaNum;


이라고 써줍니다.




피카츄가 등장하기 때문에 변수명을 pichaNum이라고 쉽게 써주었습니다.


이름은 여러분이 나름대로 쓰셔도 상관없습니다. 


앞에 public을 붙인 이유는 Unity 상에서 변수값을 직접 입력해 주거나 또는 변수의 값을 볼 수 있게 하기 위해서 입니다.



이렇게 해주고


유니티로 돌아가서 Canvas의 인스펙터 창으로 가보면 아래와 같이 pichaNum이 등장하는 것을 볼 수 있습니다. 




아 그리고 설명을 안했는데 Start() 안에 


pichaNum = 10;


하고 피카넘에 10이라는 숫자를 넣어 주었습니다.


10번 클릭했을 때 이벤트를 주기 위해서 입니다.



역시 유니티에서 실행후 Canvas의 인스펙터창을 살펴보면


아래와 같이 pichaNum에 0에서 10으로 바뀌어 있는 것을 확인 하실 수 있습니다. 





유니티에서는  void Start() 함수를 최초로 실행합니다.


따라서 어떠한 설정이나, 오브젝트를 지정할 때에는 Start() 함수 안에서


미리 지정을 해놓고 사용하면 게임의 부하를 줄일 수 있습니다. 




다음은 포켓볼과 피카츄 이미지를 스크립트로 연결하는 것을 해보도록 하겠습니다. 



pichaNum을 적어준 아래에


다음과 같이 적어줍니다. 





이번에는 int 형이 아닌 GameObject라고 써주었습니다. 


GameObject는 유니티의 모든 오브젝트를 아우르는 객체 형태입니다. 


이미지, 버튼 등등 모든 속성이 GameObject에 해당된다고 보시면 됩니다. 


GameObject는 우리가 자주 사용하는 객체형태이므로 앞으로 계속 등장 하니깐 이런 것이 있구나 정도로 이해하시면 됩니다. 





public을 선언해 주었기 때문에 역시 Unity Canvas 인트펙터 창으로 가면 아래와 같이 변수가 보일 것입니다. 





변수로 선언은 했지만. 어떠한 값도 넣어주지 않았기 때문에 None이라고 되어 있습니다.


참 아까 int myNum도 값을 안넣어 주었는데요?


int는 기본적으로 0이라는 기본값을 가지고 있습니다.


그리서 0 으로 보였던 것입니다. 




인스펙터에 ball 옆에 동그랗게 생긴 버튼을 클릭하면 창이 하나 뜰것입니다.


scene 탭을 누르면 현태 hierachy 창에 있는 오브젝트 목록이 뜰것입니다. 





거기서 btn_pocket을 선택합니다.


피카츄도 동일하게 go_pichachu 로 선택해 줍니다. 



















3. 이벤트 발생



유저가 터치를 열심히 해서 우리가 설정한 목표값에 도달했을 때


포켓볼이 사라지고 피카츄가 짠하고 등장하게 하는 이벤트를 발생 시켜 줄 것입니다. 


그렇다면 클릭할 때마다 1씩 증가하는 


myNum 값과 pichaNum이 같은지를 비교 해주어야 합니다.


따라서 Click() 함수에서 이를 비교하는 명령을 작성해 줄 것입니다. 





비교문이 처음 등장합니다.



if  : 만약에 ~ 하다면



if 하고 괄호 () 안에 조건을 써줍니다. 


()안에 조건이 참일 때  중괄호 {   } 안에 명령어를 수행 할 것입니다. 



myNum == pichaNum


myNum 과 pichaNum 이 같을 때


같다는 것을 프로그래밍에서는 == 이꼬르를 두개를 써줍니다.


수학과 다르지요? 프로그래밍에서 이꼬르 =  하나는 입력, 대입 을 뜻하기 떄문에


비교 문에서는  항상 이꼬르 두개를 써줍니다.




그렇다면 같지 않다는 무엇일까요?



!=


느낌표 + 이꼬르


이렇게 사용 할 때 같지 않다가 됩니다. 



myNum != pichaNum


이렇게 하면 myNum과 pichaNum 이 같이 않을 때가 되는 것입니다. 



그다음 아래에 


pichachu.SetActive(true);

ball.SetActive(false);


이렇게 적어주었습니다. 


피카츄를 보이게 하고, 볼을 사라지게 해주는 명령어 입니다. 




실행해보면, 10번 클릭 했을 때 피카츄가 등장하는 것을 확인 할 수 있을 것입니다.






4. Text  객체




원작 게임에서 터치할 때마가 숫자가 1씩 증가하는 것을 보셨을 것입니다.


우리도 포켓볼을 누를 때마다 게임 화면에서 숫자가 증가하는 것을 표시해 볼까 합니다. 



hierachy 창에 create -> UI -> Text 해줍니다.


그리고 이름을 


txt_score라고 써줍니다.



이것은 반드시 Canvas안에 위치시켜야 합니다. 





그리고 아래화면같이 텍스트 창의 위치를 지정해 줍니다. 






텍스트가 검정색이고 글씨 크기가 작어서 잘 안보이네요


텍스트의 인스펙터창으로 가서


FontSize 50


Color 를 흰색으로 지정해 줍니다.


그리고 RectTransform 으로 가서


width 500,  height 300으로 지정해 줍니다. 








그럼 이렇게 되었을 것입니다. 

 

이제 좀 잘 보이네요~





포켓볼과 피카츄를 미리 등록해 준것처럼


텍스트도 미리 등록을 해줄 것입니다. 







public Text numTxt;


라고 피카츄 변수 밑에 써줍니다.


참!!! 여기서 중요한 것이 있는데


Text는 유니티의 UI 속성을 사용하는 것입니다. 


따라서 스크립트 상단에


using UnityEngine.UI;


라는 것을 꼭 입력해 주어야 합니다!!


필수입니다!!!!!




public으로 지정을 했기 때문에 인스펙터창에 numTxt라고 보이는 것을 확인할 수 있습니다. 





피카츄를 지정해 준것처럼


numTxt 옆에 동그라미를 누른후


txt_score라고 hierachy 창에서 만들어준 오브젝트를 선택해 줍니다. 






그다음 이제 스크립트로 돌아와서



start() 함수 안에


numTxt.text =  "0";


이라고 써줍니다. 





시작과 동시에 txt_score에서 0이라고 표시를 해주기 위해서 입니다.


왜 0은  쌍따옴표 안에 써주었나요?


쌍따옴표 안에 있는 것은 문자열입니다. 숫자도 문자열로 간주합니다. 


텍스트 객체에는 정수값을 넣을 수 없습니다. 따라서 쌍따옴표 안에 넣어 준 것입니다. 


numTxt.text


뒤에 .text 를 붙여 준것은


Text 객체에 문자열을 넣을 때


.text를 붙여야  text 객체에 문자열 값을 넣을 수 있습니다. 




이렇게 Start() 함수에 0을 넣어 준다음에 


클릭 할 때마다 숫자가 올라가는 것을 표시을 해주어야 합니다.


클릭 할 때마다 myNum  값이 변하므로


numTxt에 myNum 을 넣어 주면 되겠다 하고 예상하실 수 있으실 것입니다.




근데 제가 위에서 Text 객체에는 정수값을 넣어줄 수 없다고 했죠~


그럼 어떻게 해야 하나??








myNum.ToString();


이렇게 해주면


실수형 변수를 문자열로 바꿀 수있습니다.


간단하지요??



자 실행하면









클릭할 때마다 화면 상단에 배치한  텍스트 필드의 숫자가 올라가는 것을 확인 할 수 있으실 것입니다.










10이 되면 짠!!!!!













자 이렇게 해서 


클릭커 게임을 2번에 걸쳐서 배워 보았습니다. 



오늘 배운 것들 정리를 해보면



1. 변수설정

2. 스크립트와 게임 오브젝트 연결

3. 비교문

4. 텍스트 객체 





처음 스크립트를 접해서 많이 당황하기도 하고, 이해가 잘 되지 않을 수도 있을 거 같습니다.


모르시는 부분은 반복해서 작성해서 습득하시고, 강좌를 계속 보다보면 자연스럽게 습득이 되므로


너무 어렵게 생각 안하셔도 될거 같습니다.



그럼 다음 강좌에서 찾아 뵙겠습니다.


뿅~~












댓글을 달아 주세요

  1. 김병희 2017.08.12 16:07

    좋은 강좌 ... 아쉽네요.

  2. Pid 2017.09.04 09:46

    유용한 강좌 정말 잘봤습니다 :) 감사합니다.
    적당히 라이트하게 설명 잘 해주셔서 정말 쉽게 이해할 수 있었네요~
    3매칭 퍼즐 게임도 강의해주실 수 없나요? ㅎㅎㅎ

  3. 서동희 2018.01.01 23:46

    이번 강좌도 잘 봤습니다. 감사합니다.

  4. 옥색바다 2018.11.01 16:56

    감사히 잘 봤습니다.

  5. 감자 2018.12.23 15:27

    감자합니다

  6. 한이리 2020.04.23 00:05

    정말 감사합니다 ㅠㅠ 유니티 처음 만져보는데 유튜브 한참 봤을땐 못따라갔었거든요.
    그런데 이거 보고서 다 해냈어요 ㅠㅠ 정말 감사합니다