상세 컨텐츠

본문 제목

붕어빵 게임 07] 스크립팅_ 봉투담기

본문

붕어빵을 구웠으니 붕어빵을 꺼낼때마다 봉투에 담기도록해봅시다.

 

봉투를 스크립팅하기 위해서 새로 만들어서 따로 해보겠습니다.

스크립트 이름을 Bongtoo.cs로 하고 저장해봅니다.

 

먼저 다른 오브젝트들과 마찬가지로 장갑에게 봉투가 클릭당했을때만 로직이 발동하도록

사물을 감지하는 오브젝트부터 가져오도록 합시다.

 

1) 봉투가 클릭 당했을때  클릭한 오브젝트 이름 가져오기

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

레이어마스크는 붕어빵과 마찬가지로 Water로 지정해줘야 하기때문에 붕어빵에서 FindObject()함수를 그대로 복사해준다.

 

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

   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);
    }

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

저장하고 플레이 했을때 봉투를 클릭한 오브젝트 :  janggab오브젝트가 뜨면 성공했습니다.

 

 

 

2) 클릭한 오브젝트가 장갑일때

장갑이 봉투를 클릭한 상황은 봉투에 있는 붕어빵을 손님에게 주는 상황입니다.

봉투에 붕어빵을 세는 변수를 선언, 초기화 해주고, 

장갑이 봉투를 클릭했을때 붕어빵이 없도록해줍니다.

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

public int cntBongtoo;

 

if(str=="janggab"){
            cntBongtoo=0;
}

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

 

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

public int cntBongtoo;

 

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); 
            ClickBongtoo(hit.collider.name);
        }
}

void ClickBongtoo(string str)
{
        if(str=="janggab"){
            Debug.Log("장갑이 봉투 클릭"+ cntBongtoo); 
            cntBongtoo=0;
        }
}

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

 

저장하고 플레이 했을때 

붕어빵을 하나 굽고 장갑으로 봉투를 클릭해보면 

장갑이 봉투 클릭 1 이 나오면 성공한거다.

 

 

3) 봉투 렌더링 선언, 초기화

붕어빵 봉투를 일괄적이여서 스프라이트 렌더러를 배열로 선언하고 초기화 해보자.

 

스프라이트 렌더러 선언

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

public SpriteRenderer[] spriteRenderer;

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

 

스프라이트 렌더러 초기화 : Size를 6개로 하고 게임오브젝트를 매칭 시켜주자.

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

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

        spriteRenderer[0].enabled = true; 
}

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

스프라이트 렌더러를 처음 실행했을때는 모두 꺼준다.

0번은 빈봉투라 켜준다.

 

4) cntBongtoo에 따라 렌더러 변경하는 함수

봉투매니저를 만들어서 cntBongtoo가 0일때, 0번켜고 1번일때 1번켜고 해보자.

 

*로직*

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

만약 cntBongtoo가 0이면 렌더러0번 켜라

아니면 만약 cntBongtoo가 1이면 렌더러1번 켜고, 렌더러 0번 꺼라

아니면 만약 cntBongtoo가 2이면 렌더러2번 켜고, 렌더러 1번 꺼라

아니면 만약 cntBongtoo가 3이면 렌더러3번 켜고, 렌더러 2번 꺼라

아니면 만약 cntBongtoo가 4이면 렌더러4번 켜고, 렌더러 3번 꺼라

아니면 만약 cntBongtoo가 5이면 렌더러5번 켜고, 렌더러 4번 꺼라

=>

if(cntBongtoo==0){
            spriteRenderer[0].enabled = true;
}else if(cntBongtoo==1){
            spriteRenderer[1].enabled = true;
            spriteRenderer[0].enabled = false;
}else if(cntBongtoo==2){
            spriteRenderer[2].enabled = true;
            spriteRenderer[1].enabled = false;
}else if(cntBongtoo==3){
            spriteRenderer[3].enabled = true;
            spriteRenderer[2].enabled = false;
}else if(cntBongtoo==4){
            spriteRenderer[4].enabled = true;
            spriteRenderer[3].enabled = false;
}else if(cntBongtoo>=5){
            spriteRenderer[5].enabled = true;
            spriteRenderer[4].enabled = false;
}

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

 

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

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

 

 

void bongtooManager()
{
        if(cntBongtoo==0){
            spriteRenderer[0].enabled = true;
    }else if(cntBongtoo==1){
            spriteRenderer[1].enabled = true;
            spriteRenderer[0].enabled = false;
    }else if(cntBongtoo==2){
            spriteRenderer[2].enabled = true;
            spriteRenderer[1].enabled = false;
    }else if(cntBongtoo==3){
            spriteRenderer[3].enabled = true;
            spriteRenderer[2].enabled = false;
    }else if(cntBongtoo==4){
            spriteRenderer[4].enabled = true;
            spriteRenderer[3].enabled = false;
    }else if(cntBongtoo>=5){
            spriteRenderer[5].enabled = true;
            spriteRenderer[4].enabled = false;
    }
}

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

 

* 더해보기

cntBongtoo와 spriteRenderer의 index부분을 보면 중복되는 부분이 많다. 

이 부분을 간단히 해볼 수는 없을까?

 

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

    void bongtooManager()
    {
        for(int index=0; index<spriteRenderer.Length; index++){
            if(cntBongtoo ==index){
                spriteRenderer[index].enabled = true;
                if( index > 0){
                    spriteRenderer[index-1].enabled = false;
                 }
            }
         }
    }

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

위와 같이 하면 됩니다....^^;

 

 

5) 붕어빵을 꺼낼때 마다 붕어빵 1증가하기

붕어빵을 꺼내는것은 boong.cs에서 합니다.

붕어빵을 더해주는 것은 bongtoo.cs에서 하면 좋겠습니다.

그려면 붕어빵을 꺼내는 상황이 발생하면 붕어빵을 더해주는 bongtoo.cs에서 함수를 만들어서 값을 증가하도록 해봅시다.

 

다른 오브젝트 클래스 변수/함수 접근은 아래에서 살펴보독 합시다.

https://allaboutmaker.tistory.com/40

 

*boong.cs에서 bongtoo.cs 사용할 수 있도록 클래스 선언, 초기화하기

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

public Bongtoo bongtooo;

void Start(){

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

         bongtooo = GameObject.Find("bongtoo").GetComponent();

}

 

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

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

 

bongtoo.cs에서 CntBongtooo() 만들기

다른 오브젝트에서 접근을 하기위해서는 public으로 선언해주어야 합니다.

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

public void CntBongtooo()
{
        cntBongtoo++;
}

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

 

 

저장하고 붕어빵을 꺼낼때 붕어빵 카운터가 증가하면 성공했습니다!

 

 

 

 

 

다음 시간에는 손님이 붕어빵을 주문하는 것을 해봅시다@

관련글 더보기