티스토리 뷰

반응형

이번에 만들어볼 게임은 미로찾기이다. 간단할 것 같지만, 처음해보는 부분들을 추가하여 진행해볼 예정이다. 일단, 이번에 할 부분은 기존에 한 것들을 응용하는 것이라 어렵지 않았다.

 

Gamelog 22. 미로찾기 게임 만들기(1)

Gamelog 22_1. 만들고자 하는 것을 정리한다.

  1. 맨 아래에서 미로 시작
  2. 미로
    1. 곳곳에 열쇠가 숨겨져 있음
    2. 벽을 통과할 수 없음
    3. 처음과 끝이 뚫려있음
    4. 미로 바깥으로 이동하지 못함
  3. 캐릭터
    1. 키보드로 움직일 수 있음
    2. 캐릭터시 시야가 한정되어 있음
    3. 열쇠 3개를 모아야 보물을 획득할 수 있음
  4. 보물
    1. 열쇠 3개를 모은 캐릭터가 접근해야 사라짐
    2. 보물 습득시 게임이 종료됨
    3. 보물 습득시 게임 종료화면으로 이동함
  5. 다시시작 버튼을 누르면 바로 미로 게임이 시작됨

 

Gamelog 22_2. 시작하기

유니티 화면 크기 설정

세로로 긴 미로를 만들기 위해 기존 사용하던 1024x768이 아닌 768x1024의 화면크기를 새로 생성해준다.

유니티 sorting layers

그리고 Sorting Layer도 기존과 같이 3개를 분리하여 설정해주었다.

 

Gamelog 22_3. 미로만들기

유니티 미로그리기

이제 미로를 그릴 차례이다. 미로를 한땀한땀 그려줘야 하므로, 미로 예시이미지를 바탕에 깔아주고 진행한다.
한 2~3번 그려봤는데 이 방식이 훨씬 편했다.

유니티 미로 벽 설정

미로로 사용할 패턴이 있는 블록 오브젝트를 선택한 뒤 Tiled로 설정해준다.
이 설정이 있어야 블록 크기를 변형했을 때 모양이 변형되지 않는다.

유니티 미로찾기게임

블록의 이름은 wall로 지정하여 복사하며 그려주고,
Empty Game Object를 생성하여 walls로 묶어 정리해준다.

유니티 미로찾기 게임 만들기

그리고 샘플로 사용했던 미로 이미지를 제거하고
미로 배경으로 사용할 이미지를 넣어준다.
이때, 배경이미지의 Sorting LayerBackGround로 설정한다.

유니티 미로 Box Collider

모든 wall에 Box Collider 2D 컴포넌트를 추가한다.
그리고 이제 노가다가 시작되는데, 모든 Sprite Renderer에 있는 Size와 Box Collider 2D에 있는 Size을 동일하게 만들어준다.

유니티 미로 Box Collider

그러면 이렇게 전체 미로벽이 Box Collider로 감싸지게 된다.
이거 굉장히 힘든 작업이었는데 다른 방법이 있는지 잘 모르겠다.

 

Gamelog 22_4. 캐릭터만들기

유니티 캐릭터 선정

이번에는 개구리를 캐릭터로 해준다.
우물안 개구리의 탈출 느낌으로 배경을 다시 바꿀까 라는 생각이 문득 든다.
애니메이션을 만들기 위해 3개의 이미지를 선택한 후 드래그한다.

유니티 애니메이션 만들기

애니메이션을 저장해준다.

유니티 미로찾기 게임만들기

개구리를 아래에 배치해주고 실행을 하여 애니메이션 움직임을 확인한다.

유니티 캐릭터 움직이기

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

// 키를 누르면 스프라이트가 이동한다
public class OnKeyPress_MoveSprite : MonoBehaviour
{

    public float speed = 2; // 속도:Inspector에 지정

    float vx = 0;
    float vy = 0;
    bool leftFlag = false;

    void Update()
    { // 계속 시행한다
        vx = 0;
        vy = 0;
        if (Input.GetKey("right"))// 만약 오른쪽 키가 눌리면
        { 
            vx = speed; // 오른쪽으로 나아가는 이동량을 넣는다
            leftFlag = false;
        }
        if (Input.GetKey("left"))// 만약 왼쪽 키가 눌리면
        { 
            vx = -speed; // 왼쪽으로 나아가는 이동량을 넣는다
            leftFlag = true;
        }
        if (Input.GetKey("up"))// 만약 위 키가 눌리면
        { 
            vy = speed; // 위로 나아가는 이동량을 넣는다
        }
        if (Input.GetKey("down"))// 만약 아래 키가 눌리면
        { 
            vy = -speed; // 아래로 나아가는 이동량을 넣는다
        }
    }
    void FixedUpdate()// 계속 시행한다(일정 시간마다)
    { 
      // 이동한다
        this.transform.Translate(vx / 50, vy / 50, 0);
        // 왼쪽 오른쪽 방향을 바꾼다
        this.GetComponent<SpriteRenderer>().flipX = leftFlag;
    }
}

이제 캐릭터가 움직이는 스크립트를 적용해준다.
위의 스크립트를 사용할 경우 캐릭터 좌우 전환을 하며 키보드로 움직일 수 있다.

유니티 캐릭터 Box Collider

이제 개구리에도 Box Collider를 적용한다.
Box Collider는 2개로 머리와 몸통을 따로따로 설정하여 정확도를 높여주었다.

유니티 미로찾기 게임

이제 그러면 미로벽에 부딪히며 개구리 캐릭터를 키보드로 움직일 수 있게 되었다.

 

Gamelog 22_4. 보물상자 만들기

유니티 보물상자 만들기

이제 보물상자를 상단에 완료표시로 배치해주고, Box Collider를 설정해준다.

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

public class OnCollision_StopGame : MonoBehaviour {

    public string targetObjectName; // 목표 오브젝트 이름 : Inspector에 지정

    void Start() {
        Time.timeScale = 1;
    }

    void OnCollisionEnter2D(Collision2D collision) { 
      // 만약 충돌한 것의 이름이 목표 오브젝트였다면
        if (collision.gameObject.name == targetObjectName) {
            // 시간을 멈춘다
            Time.timeScale = 0;
        }
    }
}

보물상자에 캐릭터가 도달했을 때, 게임이 종료되게 하기 위해
Time.timeScale=0 스크립트를 적용한다.

유니티 미로찾기 게임

미로찾기 게임은 이렇게 완성을 할 수도 있지만, 이건 너무 간단하기 때문에 앞서 말한 열쇠와 시야제한을 다음 게시글에 해본다.

반응형
댓글