유니티 미로 찾기 게임 4

Inyeong Kang·2022년 5월 5일
0

미로 맵 만들기

Scene 스크린의 축을 돌려서 상단에서 맵을 볼 수 있도록 전환한다.

빈 게임오브젝트를 생성하여 WallGroup이라고 이름 짓고 Wall들을 모아 넣는다.

Ctrl+C와 Ctrl+V를 하여 벽을 생성한다.

왼쪽 상단에 크기 조절 버튼을 누르고 벽 크기를 조절한다.

왼쪽 상단에 이동버튼을 누르고 미로를 적절하게 배치한다.

물리법칙

Rigidbody 적용

Player를 클릭하고 Add Component를 클릭한 뒤에 Rigidbody를 검색하여 추가한다.

Capsule Collider도 추가한다. 그리고 Center의 Y값을 0.5, Radius값을 0.2로 수정하여 캡슐을 Player의 크기에 맞춘다.

설정한대로 실행을 하면 벽에 캐릭터가 부딫힐 때에 쓰러져서 빙글뱅글~ 돌아버린다.
Player의 Rigidbody에 있는 Constraints에 Freeze Rotation X, Y, Z를 체크한다.

(짤) 이제는 벽에 부딫혀도 쓰러지지 않는다.
캐릭터의 팔 일부가 벽을 통과하므로 Capsule Colllider의 Radius를 0.3으로 키워준다.

더하여

Edit의 Project Settings를 클릭한다.

Physics에 들어가서 보면 여러 물리법칙들을 설정할 수 있다.

열쇠 에셋

Asset Store에서 key를 검색하여 무료 에셋을 Download한 뒤 Scene은 제외하여 Import한다.

key_gold라는 이름의 Prefabs를 Hierarchy창에 추가하고 Transform을 Reset한다.

에셋의 크기가 너무 크므로 크기를 조정하기 위해서 key의 모델을 찾아보자. 상자모양에 흰색 종이가 붙어있는 녀석이다.

Scale Factor의 값을 0.2로 수정하고 Apply를 클릭한다.

열쇠의 크기가 작아진 것을 확인할 수 있다. 그런데 실행을 해보면 벽은 통과하지 않지만 열쇠는 통과한다.


이를 해결하기 위해서는 (Rigidbody는 Player에게 있으니 상관 없고) Collider를 key에도 추가해줘야 한다. 먼저, key_gold에 Add Component로 Sphere Collider를 추가하고 Center의 X, Y, Z값과 Radius 값을 수정한다.

충돌 이벤트

Is Trigger 작동

오브젝트의 Collider에 Is Trigger는 원래 비활성화 상태임.

  • Is Trigger 체크 X
    void OnCollisionEnter : 두 물체 간의 충돌이 일어나기 시작했을 때
    void OnCollisionStay : 두 물체 간의 충돌이 지속될 때
    void OnCollisionExit : 두 물체가 서로 떨어졌을 때
  • Is Trigger 체크 O
    void OnTriggerEnter : 두 물체 간의 충돌이 일어나기 시작했을 때
    void OnTriggerStay : 두 물체 간의 충돌이 지속될 때
    void OnTriggerExit : 두 물체가 서로 떨어졌을 때

열쇠 활용하기

Control 스크립트에 아래의 코드를 추가한다.

private void OnCollisionEnter(Collision collision)
    {
        Destroy(collision.gameObject);
    }

(짤)
실행을 하면 캐릭터가 바닥 아래로 꺼진다. 바닥과 닿아서 바닥이 사라진 것이기 때문이다. 열쇠만 제거할 수 있도록 코드를 수정해야 한다.

Inspector 창에서 key_gold의 Tag 설정 중 Add Tag...를 선택한다.

Tags에 있는 + 버튼을 클릭하고 이름을 KEY라고 지은 뒤 Save한다.

다시 열쇠를 선택한 후 Tag에서 KEY를 찾아 클릭한다. 즉, 열쇠는 KEYY라는 별명을 얻게 된 것이다.

private void OnCollisionEnter(Collision collision)
    {
        if(collision.gameObject.tag == "KEY")
        {
            Destroy(collision.gameObject);
        }
        
    }

부딫힌 물체의 태그가 KEY인 경우에만 사라지도록 수정한 코드이다.

여러 열쇠에 적용하기

빈 게임 오브젝트를 생성하여 key_gold를 넣어주고, 복사 붙여넣기하여 2개의 열쇠를 추가로 생성한 뒤 배치해 준다.

private int key=0;

private void OnCollisionEnter(Collision collision)
    {
        if(collision.gameObject.tag == "KEY")
        {
            Destroy(collision.gameObject);
            key += 1;
            Debug.Log("Key : " + key.ToString());
        }
        
    }

스크립트에 열쇠와 부딫혔을 때 key라는 변수의 숫자를 증가시 로그에 해당 값이 출력되도록 코드를 추가한다.

Cube 오브젝트를 생성하면 Box Collider가 자동으로 들어가 있는 것을 확인할 수 있다.
BOX라는 태그를 추가로 생성해준다.
Cube에 BOX태그를 넣어준다.

private void OnCollisionEnter(Collision collision)
    {
        if (collision.gameObject.tag == "KEY")
        {
            Destroy(collision.gameObject);
            key += 1;
            Debug.Log("Key : " + key.ToString());
        }

        if (collision.gameObject.tag == "BOX")
        {
            if (key < 3)
            {
                Debug.Log("3개의 열쇠를 찾아오세요!");
            }
            else
            {
                Debug.Log("탈출 성공!");
            }
        }
    }  

스크립트를 수정하면 캐릭터가 열쇠를 3개 다 사라지게 만들어서 변수 key 값을 3으로 만들었을 때에만 탈출 성공 메세지를 로그로 출력할 수 있다. 3보다 작으면 3개의 열쇠를 찾아오라는 로그가 출력된다.

profile
안녕하세요. 강인영입니다. GDSC에서 필요한 것들을 작업하고 업로드하려고 합니다!

0개의 댓글