상세 컨텐츠

본문 제목

붕어빵 게임 08] 스크립팅_ 손님이 붕어빵 주문하기

본문

지난 시간에 붕어빵 구운것을 봉투에 담는 것을 했습니다.

이번에는 손님이 랜덤하게 붕어빵을 주문하고, 주문한 수량에 맞으면 하트를 주도록 스크립팅 해봅시다!

 

 

1) 말풍선 스프라이트를 게임오브젝트로 만들기

 

위와 같은 스프라이트를 게임오브젝트로 생성해서 적당히 배치합니다.

Sonnim.cs를 만들고 sonnim 오브젝트에 추가시킵니다.

 

 

2) 손님 스프라이트 렌더러 선언, 초기화

말풍선과 손님을 스프라이트에 선언, 초기화 해봅시다.

손님을 0번으로하고 말풍선1~5번까지 차례대로 넣어봅시다.

 

아래와 같이 스프라이트 렌더러를 배열로 선언하고,

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

public SpriteRenderer[] renderer;

 

void Start()
{
        for(int index =0; index<renderer.Length; index++){ 
              renderer[index].enabled = false; 
         }
        renderer[0].enabled = true; 

}

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

 

말풍선 오브젝트를 매칭시켜준다.

이렇게 하면 사용할 준비가 되었다.

 

 

3) 말풍선 랜덤 생성함수

말풍선이 1~5까지 있기 때문에 랜덤으로 숫자를 정해주는 랜덤함수를 만들어 보도록하자.

rand 변수를 int로 선언하고, 손님이 주문을 하면 rand수가 바뀌기 때문에 함수이름을 Oder로 정하고 

Oder가 호출될때 랜덤함수가 바뀌도록 해보자.

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

int rand;

void Order()
{
        rand = Random.Range(1, 6);
        Debug.Log("랜덤수"+rand);
}

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

저장하고 Order함수를 Update()문에 실행을 하면 랜덤수가 찍히는 것을 볼 수 있다.

 

여기에서 범위를 1~5까지로 정했다면 Random.Range는 1,6을 넣어 줘야한다.

마지막 숫자는 정수로 떨어지지않고 생성된다.

 

 

 

 

 

 

4) 말풍선이 rand 숫자에 따라서 나오는 함수를 만들자.

 

말풍선 숫자가 1이면 1번 렌더러만 켜지고 나머지는 꺼져야한다.

로직을 따져보면 다음과 같다.

 

*로직*

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

만약 rand==1이면 renderer[1].enabled = true; 나머지는 =false;

아니면 만약 rand==2이면 renderer[2].enabled = true; 나머지는 =false;

아니면 만약 rand==3이면 renderer[3].enabled = true; 나머지는 =false;

아니면 만약 rand==4이면 renderer[4].enabled = true; 나머지는 =false;

아니면 만약 rand==5이면 renderer[5].enabled = true; 나머지는 =false;

=>

if(rand==1){
            renderer[1].enabled = true;
            renderer[2].enabled = false;
            renderer[3].enabled = false;
            renderer[4].enabled = false;
            renderer[5].enabled = false;
}else if(rand==2){
            renderer[2].enabled = true;
            renderer[1].enabled = false;
            renderer[3].enabled = false;
            renderer[4].enabled = false;
            renderer[5].enabled = false;
}else if(rand==3){
            renderer[3].enabled = true;
            renderer[1].enabled = false;
            renderer[2].enabled = false;
            renderer[4].enabled = false;
            renderer[5].enabled = false;
}else if(rand==4){
            renderer[4].enabled = true;
            renderer[1].enabled = false;
            renderer[2].enabled = false;
            renderer[3].enabled = false;
            renderer[5].enabled = false;
}else if(rand==5){
            renderer[5].enabled = true;
            renderer[1].enabled = false;
            renderer[2].enabled = false;
            renderer[3].enabled = false;
            renderer[4].enabled = false;
}

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

 

MalPoongGen() 함수를 만들어서 Update()에서 실행시키자.

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

 void Update()
{
       MalPoongGen();
}

 

void MalPoongGen()
{
if(rand==1){
            renderer[1].enabled = true;
            renderer[2].enabled = false;
            renderer[3].enabled = false;
            renderer[4].enabled = false;
            renderer[5].enabled = false;
}else if(rand==2){
            renderer[2].enabled = true;
            renderer[1].enabled = false;
            renderer[3].enabled = false;
            renderer[4].enabled = false;
            renderer[5].enabled = false;
}else if(rand==3){
            renderer[3].enabled = true;
            renderer[1].enabled = false;
            renderer[2].enabled = false;
            renderer[4].enabled = false;
            renderer[5].enabled = false;
}else if(rand==4){
            renderer[4].enabled = true;
            renderer[1].enabled = false;
            renderer[2].enabled = false;
            renderer[3].enabled = false;
            renderer[5].enabled = false;
}else if(rand==5){
            renderer[5].enabled = true;
            renderer[1].enabled = false;
            renderer[2].enabled = false;
            renderer[3].enabled = false;
            renderer[4].enabled = false;
}
}

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

여기에서 저장하고 Update()에서 rand=4를 넣고 실행을 시켜보면

 

이렇게 말풍선이 나오면 성공한거다.

rand수를 바꿔가면서 잘 돌아가는지 확인해보자.

 

*더해보기

여기에서 rand수와 renderer[index]라고 했을때 index부분이 반복되는 것을 볼수 있다. 

이를 for문을 이용하여 간단하게 짜보자.

 

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

void MalPoongGen()
{
        for(int index=1; index<renderer.Length; index++){
            if(rand ==index){
                renderer[index].enabled = true;
            }else{ 
                renderer[index].enabled = false;
            }
       }
}

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

코딩을 하는게 익숙하지 않다면 처음부터 for문을 사용하는 것이 어려울 수있다.

그렇다면 if문으로 하나씩 매칭해보면 반복되는 부분이 보이고, 

이부분을 줄여보도록 연습하는 것도 좋은 방법중 하나이다.

 

 

 

 

5)클릭버튼을 처음 눌렀을때 주문함수 실행하기

손님이 와서 주문하는 경우는 어떤 경우일까?

두가지로 나눠서 생각할 수 있는데 처음에는 손님이 와서 주문할 경우이고,

두번째는 장갑으로 붕어빵 봉투를 클릭했을때 손님에게 붕어빵을 주고, 

다시 주문을 넣는 경우가 되겠다.

 

이외에도 여러가지 주문을 넣는 경우가 있겠지만 간단하게 두가지 경우에만 주문을 해보자.

 

처음에는 프로그램을 시작하고 마우스 버튼을 한번 클릭하면 손님이 주문 하도록해보자.

일단 클릭을 받는 변수를 isClick으로 bool형으로 선언해보자.

isClick버튼이 처음 상태를 정해주고, 마우스 버튼을 클릭하고 처음상태라면, Order()를 실행하도록하자.

말로만 하면 복잡하지만 코드를 보면 금방 이해가 갈것이다.

 

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

bool isClick;  //isClick 변수 선언

void Start()
{

        isClick = false; //처음 값을 false로 설정
}

 

void Update()
{
        if (Input.GetMouseButtonDown(0) && isClick==false) {   // 마우스 버튼을 클릭하고 isClick이 처음상태(false)일때만실행
            Order();
            isClick=true; // isClick상태를 바꿔서 이 구문이 다음에 실행되지 않도록해준다.
        }
}

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

 

 

 

 

6) 장갑이 붕어빵을 클릭했을때 실행하기

장갑이 봉투를 클릭했을 때는 Bongtoo.cs에서 ClickBongtoo()함수에 발생한다.

그렇다면 Sonnimscript.cs에 함수를 하나 만들어서 실행해 보도록하자.

여기에서 손님이 주문한 붕어빵 갯수와 봉투에 들어있는 붕어의 갯수가 동일하면 하트가 추가가 될것이다. 

그래서 HeartCal()를 public으로 만들고 여기에다가 실행하도록해보자.

 

Bongtoo.cs에서 Sonnimscript.cs를 사용하기 위해서 클래스를 선언, 초기화 후 사용해준다.

 

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

public Sonnimscript sonnimm;  // Sonnimscript 클래스 선언

 

void Start()
{

    sonnimm = GameObject.Find("sonnim").GetComponent<Sonnimscript>();  // Sonnimscript 클래스 초기화
}

 

void ClickBongtoo(string str)
{
        if(str=="janggab"){
            sonnimm.HeartCal(cntBongtoo);   //Sonnimscript 클래스에 있는 HeartCal을 봉투에 있는 붕어빵 갯수와 함께 넘겨줌
            cntBongtoo=0;
    }
}

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

 

 

 

Sonnimscript.cs에서 HeartCal() 정의

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

public void HeartCal(int cnt)
{
        if(cnt==rand){
            Debug.Log("하트추가");
        }
        Order();
}

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

 

HeartCal에서는 봉투에 있는 붕어빵 갯수를 매개변수로 받아서 붕어빵 갯수와 손님이 주문한 붕어빵 갯수(=rand)가 같으면 하트를 추가하도록 임시로 "하트추가"를 찍어보았다. 

하트를 추가하고 Order를 실행하면 랜덤 함수가 바뀌면서 손님이 다시 붕어빵을 주문하게 된다.

 

스크립팅을 마치고 플레이 버튼을 누르고 

손님이 주문한 붕어빵 갯수에 맞게 붕어빵을 굽고 봉투를 눌렀을때 "하트추가"가 Console에 찍히면 성공한 것이다.

 

 

 

 

7) 정리

손님 스크립트는 아래와 같이 된다.

 

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

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Sonnimscript : MonoBehaviour
{
    public SpriteRenderer[] renderer;
    int rand;
    bool isClick;
    public int heartCnt;

    void Start()
    {
        for(int index =0; index<renderer.Length; index++){ 
              renderer[index].enabled = false; 
         }
        renderer[0].enabled = true; 
        isClick = false;
    }

    void Update()
    {
        if (Input.GetMouseButtonDown(0) && isClick==false) { 
            Order();
            isClick=true;
        }
        MalPoongGen();
    }

    void Order()
    {
        rand = Random.Range(1, 6);
        Debug.Log("랜덤수"+rand);
    }
 
    void MalPoongGen()
    {
        for(int index=1; index<renderer.Length; index++){
            if(rand ==index){
                renderer[index].enabled = true;
            }else{ 
                renderer[index].enabled = false;
            }
       }
    }

    public void HeartCal(int cnt)
    {
        Debug.Log("HeartCal"+cnt);
        if(cnt==rand){
            Debug.Log("하트추가");
        }
        Order();
    }
}
==========================

 

 

참고로 Debug.Log()함수는 test 할때 잘 작동하는지 확인하고,

바로 지워주는 것이 좋다.

그래야 쓸때없이 Console창에 메세지가 많이 찍혀서 필요한 부분을 확인 못할 수 있기 때문이다.

 

 

다음 시간에는 하트를 만들어서 화면에 찍어보자.

관련글 더보기