상세 컨텐츠

본문 제목

붕어빵 게임 06] 스크립팅_ 붕어빵 굽기

본문

이번장에서는 붕어빵을 클릭했을 때 붕어빵을 익혀보자

 

붕어빵을 관리하는 스크립트는 따로 만들어서 관리해보자.

 

스크립트를 boong으로 하나 만들고 

 

boongbread1으로 붕어빵을 빈오브젝트로 묶고 boong스크립트를 추가해주자.

 

 

 

1) 붕어빵이 클릭 당했을때 오브젝트 가져오기

 

오브젝트 가져오는 방법은 여러가지가 있겠지만 Mouse에서 사용했던 방법으로 오브젝트를 가져와보자.

 

FindObject() 함수를 가져와서 마우스 버튼을 클릭했을때 실행하도록 해보자.

간단하게 for문은 빼고 vecPo배열 대신에  new Vector3(1,1,0)로 바꿔 주었다.

여기에서 또하나 주의 해야할점은 장갑이나 주전자나 팥스푼 오브젝트는 마우스를 따라다닐때

레이아웃이 Water인 상태이다. 그래서 레이어마스크에는 Water로 지정해주어야한다.

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

   void Update()
    {
        if (Input.GetMouseButtonDown (0)) {
            FindObject();
        }

    }

 

    void FindObject()
    {
        Debug.DrawRay(transform.position, new Vector3(1,1,0), new Color(0,1,0));  
        RaycastHit2D hit = Physics2D.Raycast(transform.position,  new Vector3(1,1,0), 1f, LayerMask.GetMask("Water"));
        if(hit.collider != null)
            Debug.Log(hit.collider.name);
    }

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

 

실행해보면 마우스를 클릭했을때 아래와 같이 나온다.

 

클릭한 오브젝트 이름을 알아 올 수 있다. 

 

 

 

2) 오브젝트 이름별로 할일 배정하기 

 

마우스가 어떤 오브젝트를 들고 있느냐에 따라 붕어빵이 할 행동이 달라져야한다.

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

1. 장갑이 붕어빵을 클릭했을때

 - > 붕어빵 꺼내기

2. 주전자가 붕어빵 클릭햇을때

 - > 붕어빵 만들기

3. 팥스푼이 붕어빵을 클릭했을때

 - > 1단계면, 팥 추가

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

 

여기에서 붕어빵을 만들기 위해서 변수를 하나 추가하고

팥을 담기위해서도 변수를 하나 추가하자

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

public bool isBoogStart;
public bool isPotSpoon;

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

 

여기에서 붕어빵을 만들려면 isBoogStart가 true가 되고

붕어빵을 꺼내려면 isBoogStart가 false가 된다.

팥을 추가하기위해서는 isPotSpoon이 true가 되면 된다.

붕어가 클릭 당했을 때, 위에 세가지 경우에 따라 분배해주는 함수를 만들어보자.

 

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

 void FindObject() 
    { 
        Debug.DrawRay(transform.position, new Vector3(1,1,0), new Color(0,1,0));   
        RaycastHit2D hit = Physics2D.Raycast(transform.position,  new Vector3(1,1,0), 1f, LayerMask.GetMask("Water")); 
        if(hit.collider != null) {
            Debug.Log(hit.collider.name); 
            ClickBoonga(hit.collider.name);
        }
    }

 

 

void ClickBoonga(string str)
{
        if(str=="janggab"){                 //장갑클릭
            isBoogStart = false;
        }else if(str== "jujeonja"){         //주전자가 클릭했을때
            isBoogStart = true;
        }else if(str=="potThe"){            //팥스푼이 클릭했을때  
            isPotSpoon = true;
       }
}

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

 

플레이 버튼을 눌러보고

주전자가 마우스를 따라다니는 상태일때 붕어빵을 클릭했을때 isBoogStart 가 체크가 되는지,

팥스푼이 마우스를 따라다니는 상태일때 붕어빵을 클릭했을때 isPotSpoon 가 체크가 되어있으면 성공한 것이다.

 

 

 

 

 

3) 붕어빵 변수 판단하는 함수 만들기

붕어빵을 굽는 신호는 오직 isBoogStart 가 true일때만 실행이 되어야한다. 

그렇기 때문에 update부분에서 isBoogStart 이 true가 되었는지 체크하는 함수를 실행 시켜줘야한다.

여기에서 isBoogStart가 참일때와 참이아닐때 나눠주는 로직을 만들어보자.

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

void Update()
{
        if (Input.GetMouseButtonDown (0)) { 
            FindObject(); 
        }
        boogaBbangManager();
}

 

void boogaBbangManager()
{
        if(isBoogStart == true){
            //붕어빵 만들기
        }else if(isBoogStart == false){

            //붕어빵 꺼내기

        }
}

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

붕어빵은 어떻게 해야 만드는게 될까?

 

 

 

 

 

4) 붕어빵 굽기 함수 만들기 준비하기

여기에서 붕어빵을 만들기위해서 Time.deltaTime을 이해해야한다.

Time.deltaTime은 유니티에 시계라고 생각하면된다. 

변수를 하나 선언해서 시간이 지나면 수가 증가하도록 해보자.

 

보통 변수를 주고 아래와 같이 사용하면 시간이 쌓인다.

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

public float curbongTimer ;

 

curbongTimer += Time.deltaTime; 

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

 

붕어빵을 만들기위해서 타이머가 필요하다. 요리할때 타이머가 사용된다고 생각하면 될것같다.

정해진 시간이 지나면 준비해 놓은 붕어의 레벨이 바뀌면 되겠다.

붕어빵에 렌더러를 변경하기 위해서 다음과 같이 선언하고 초기화 해주자.

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

//붕어빵 선언

public SpriteRenderer[] boongaRenderer;

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

붕브레드 오브젝트를 보면 팥을 0번으로 두고, 나머지는 5개 레벨링이 있다.

 

그래서 벡터 사이즈를 6으로 지정하고, 각각 오브젝트를 매칭해서 초기화하자.

매칭이 되었다면 Start()부분에 렌더러를 전부 꺼주는 로직을 사용하자.

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

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

}

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

 

 

 

 

 

5) 붕어빵 굽기 함수 만들기 준비하기

일정시간별로 붕어빵 스프라이트 렌더러를 변경시키도록하자.

붕어빵이 5레벨이여서 각각을 아래와 같이 레벨을 나눠 보았다. 

 

*로직*

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

만약 curbongTimer 가 0~10 사이이면 스프라이트렌더러 벡터1번 켜기

아니면 만약 curbongTimer 가 10~15 사이이면 스프라이트렌더러 벡터2번 켜기

아니면 만약 curbongTimer 가 15~20 사이이면 스프라이트렌더러 벡터3번 켜기

아니면 만약 curbongTimer 가 20~25 사이이면 스프라이트렌더러 벡터4번 켜기

아니면 만약 curbongTimer 가 25~ 이면 스프라이트렌더러 벡터5번 켜기

=>

if( 0f< curbongTimer && curbongTimer <= 10f ){
            boongaRenderer[1].enabled = true; 
}else if( 10f< curbongTimer && curbongTimer <= 15f ){
            boongaRenderer[2].enabled = true; 
}else if(15f < curbongTimer && curbongTimer <= 20f){
            boongaRenderer[3].enabled = true; 
}else if(20f < curbongTimer && curbongTimer <= 25f){
            boongaRenderer[4].enabled = true; 
}else if(25f < curbongTimer ){
            boongaRenderer[5].enabled = true;    
}

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

 

함수 이름을 boongaBbangMake()로 정해보자.

스프라이트렌더러를 사용하는데 1번과 2번이 겹칠때가 있다. 그래서 사용한 스프라이트는 꺼주도록하자.

이 함수는 boogaBbangManager()함수에 isBoogStart==true일때 시간도 넣어주고 boongaBbangMake() 함수를 실행하도록 해보자. 

isBoogStart==false일때는 붕어빵을 꺼애야 하니, curbongTimer =0으로 하고, 스프라이트 렌더러를 전부 꺼주도록하자.

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

void boogaBbangManager() 

        if(isBoogStart == true){ 
            //붕어빵 만들기

            curbongTimer += Time.deltaTime; 
            boongaBbangMake();
        }else if(isBoogStart == false){ 
            //붕어빵 꺼내기

            curbongTimer = 0;
            for(int index=0; index<boongaRenderer.Length; index++){ //붕어빵 없애기
                boongaRenderer[index].enabled = false; 
            }
        } 
}

 

void boongaBbangMake(){

if( 0f< curbongTimer && curbongTimer <= 10f ){ 
            boongaRenderer[1].enabled = true;  
}else if( 10f< curbongTimer && curbongTimer <= 15f ){ 
            boongaRenderer[2].enabled = true;  

            boongaRenderer[1].enabled = false; 
}else if(15f < curbongTimer && curbongTimer <= 20f){ 
            boongaRenderer[3].enabled = true;  

            boongaRenderer[2].enabled = false;  
}else if(20f < curbongTimer && curbongTimer <= 25f){ 
            boongaRenderer[4].enabled = true;  

            boongaRenderer[3].enabled = false;  
}else if(25f < curbongTimer ){ 
            boongaRenderer[5].enabled = true;     

            boongaRenderer[4].enabled = false;  
}

}

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

 

플레이 버튼을 클릭하면 

붕어빵 틀에 붕어가 없고, 주전자를 클릭해서 주전자가 마우스를 따라오는 상태에서 붕어빵을 클릭하면

하얀 반죽이 생기고, curbongTimer 가 돌아가고 우리가 설정해준 시간대로 스프라이트 렌더러가 바뀌면 성공한거다.

 

그래고 적당한 타이밍에 장갑을 클릭하고 붕어빵을 클릭하면 붕어빵이 없어지면 성공이다.

 

 

 

 

6) 팥스푼으로 붕어빵 반죽 클릭하면 팥이 보이기

팥이 생길때는 마우스로 팥스푼을 선택하고, 붕어빵이 반죽상태(0레벨)을 클릭하면 팥 렌더러가 보여야한다.

이 조건을 전부 충족시키는 부분은 바로 

void boongaBbangMake()함수에서 0레벨일때이다. 

이때 if문으로 간단하게 팥이 켜저있으면 boongaRenderer[0].enabled을 켜주면된다.

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

if(isPotSpoon==true){
                boongaRenderer[0].enabled = true;
}

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

그리고 다음 레벨이되면, 팥스프라이트 렌더러를 끄고, isPotSpoon도 false로 돌려주면된다.

 

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

void boongaBbangMake()
    {
        if( 0f< curbongTimer && curbongTimer <= 10f ){ 
            boongaRenderer[1].enabled = true;  
            if(isPotSpoon==true){
                boongaRenderer[0].enabled = true;
            }
        }else if( 10f< curbongTimer && curbongTimer <= 15f ){ 
            boongaRenderer[2].enabled = true;  
            boongaRenderer[1].enabled = false; 
            boongaRenderer[0].enabled = false;
            isPotSpoon =false;
        }else if(15f < curbongTimer && curbongTimer <= 20f){ 
            boongaRenderer[3].enabled = true;  
            boongaRenderer[2].enabled = false;  
        }else if(20f < curbongTimer && curbongTimer <= 25f){ 
            boongaRenderer[4].enabled = true;  
            boongaRenderer[3].enabled = false;  
        }else if(25f < curbongTimer ){ 
            boongaRenderer[5].enabled = true;     
            boongaRenderer[4].enabled = false;  
        }
    }

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

 

위와 같이 코딩하고 플레이 버튼을 클릭하고

주전자로 반죽만들고, 팥스푼으로 반죽상태 클릭했을때 팥반죽이 나타나고

다음레벨때 팥반죽이 사라지면 성공했다!

 

 

7) 정리

 

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

 

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

public class boongtest : MonoBehaviour
{
    public SpriteRenderer[] boongaRenderer;

    public bool isBoogStart;
    public bool isPotSpoon;
    public float curbongTimer;

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

    
    void Update()
    {
        if (Input.GetMouseButtonDown (0)) { 
            FindObject(); 
        }
        boogaBbangManager();
    }

    void FindObject() 
    { 
        Debug.DrawRay(transform.position, new Vector3(1,1,0), new Color(0,1,0));   
        RaycastHit2D hit = Physics2D.Raycast(transform.position,  new Vector3(1,1,0), 1f, LayerMask.GetMask("Water")); 
        if(hit.collider != null) {
            Debug.Log(hit.collider.name); 
            ClickBoonga(hit.collider.name);
        }
    }

    void ClickBoonga(string str)
    {
        if(str=="janggab"){                 //장갑클릭
            isBoogStart = false;
        }else if(str== "jujeonja"){         //주전자가 클릭했을때
            isBoogStart = true;
}else if(str=="potThe"){            //팥스푼이 클릭했을때  
            isPotSpoon = true;
}
}

    void boogaBbangManager() 
    { 
        if(isBoogStart == true){ 
            //붕어빵 만들기
            curbongTimer += Time.deltaTime; 
            boongaBbangMake();
        }else if(isBoogStart == false){ 
            //붕어빵 꺼내기
            curbongTimer = 0;
            for(int index=0; index<boongaRenderer.Length; index++){ //붕어빵 없애기
                boongaRenderer[index].enabled = false; 
            }
        } 
    }

    void boongaBbangMake()
    {
        if( 0f< curbongTimer && curbongTimer <= 10f ){ 
            boongaRenderer[1].enabled = true;  
            if(isPotSpoon==true){
                boongaRenderer[0].enabled = true;
            }
        }else if( 10f< curbongTimer && curbongTimer <= 15f ){ 
            boongaRenderer[2].enabled = true;  
            boongaRenderer[1].enabled = false; 
            boongaRenderer[0].enabled = false;
            isPotSpoon =false;
        }else if(15f < curbongTimer && curbongTimer <= 20f){ 
            boongaRenderer[3].enabled = true;  
            boongaRenderer[2].enabled = false;  
        }else if(20f < curbongTimer && curbongTimer <= 25f){ 
            boongaRenderer[4].enabled = true;  
            boongaRenderer[3].enabled = false;  
        }else if(25f < curbongTimer ){ 
            boongaRenderer[5].enabled = true;     
            boongaRenderer[4].enabled = false;  
        }
    }
}

 

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

 

 

위와 같이 했다면 boongbread를 복제해서 붕어빵 틀에 맞춰서 배치해주자.

 

플레이 버튼을 누르고 붕어빵을 구워보자^^

 

다음시간에는 붕어빵을 꺼낼때 봉투에 붕어빵이 증가하도록 해봅시다!

 

관련글 더보기