저번 포스트에서 타임어택을 설정하였습니다.

 

[Unity] 2D 미로찾기 게임 만들기 #04 - 타임어택 적용하기

이전 포스터에서는 타일맵 스프라이트를 조정하여 오류를 잡았었습니다. [Unity] 2D 미로찾기 게임 만들기 #03 - 타일맵 스프라이트 크기 조정지난 포스트에서 플레이어 조작법에 대해 알아보았습

hya68.tistory.com

 

이번에는 클리어 조건 중 하나인 키 획득 설정을 추가하려고 합니다.

 

제가 만들 미로찾기의 클리어 조건은 2가지입니다.

1. 정해진 수량의 키 획득 (전부 얻지 못하면 끝나는 지점에 도착해도 클리어 불가)

2. 제한 시간 내에 클리어 (타임어택)

 

타임어택은 만들었으니 이제 키 획득에 관한 설정을 만들어 봅시다.

키 이미지 및 이름

위의 사진처럼 맵에서 키를 획득하면 아래 키 그림이 채워지는 방식입니다.

변수명

- 맵에 나타나는 키 이미지 : KeyItem

- 맵 아래에 나타나는 비어있는 키 카운트 : KeyCount

- 맵 아래에 나타나는 채워진 키 카운트 : KeyCountFull (비활성화)

 


플레이어와 키 이미지 충돌 처리

먼저 맵에 나타나는 키 이미지에 충돌 처리를 적용하기 위해 circle collider2D를 적용시킵니다.

키 이미지에 circle collider2D 적용

그 후 스크립트를 통해 충돌 처리를 적용시킵니다.

충돌 처리를 위해 OnTriggerEnter2D 메소드를 사용합니다.

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

    public class Key : MonoBehaviour
    {
        // 플레이어와 키 아이템 충돌 감지
        private void OnTriggerEnter2D(Collider2D other) {
            // 키와 충돌한 오브젝트의 태그가 Player이고 해당 키의 태그가 KeyItem이면
            if (other.gameObject.tag == "Player" && gameObject.tag == "KeyItem") {
                gameObject.SetActive(false); // 플레이어와 충돌한 키를 비활성화 한다.
            }
        }
    }

위의 Key 스크립트를 모든 키 오브젝트에 추가합니다.

플레이어가 맵 밖으로 나가는 걸 막기 위해 box collider2D가 적용된 오브젝트를 배치했습니다.

따라서 플레이어는 맵 안에서의 키하고만 충돌 처리가 일어납니다.

 

여기까지 하셨을 때 게임 플레이 화면입니다.

맵에서 플레이어가 키를 획득하면 키 이미지가 사라지는 것이 확인되었습니다.

이제 맵 아래의 키 카운트를 적용시키겠습니다.


키 획득 시 카운트 적용

저는 시작 지점에서 가까운 순으로 키 순서를 정했습니다.

카운트 또한 해당 키 순서에 맞게 채워질 예정입니다.

 

즉, 만약 플레이어가 KeyItem2를 획득한다면

KeyCount2는 비활성화, KeyCountFull2는 활성화되는 것을 구현하면 됩니다.

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

    public class Key : MonoBehaviour
    {
        // 플레이어와 키 아이템 충돌 감지
        private void OnTriggerEnter2D(Collider2D other) {
            // 키와 충돌한 오브젝트의 태그가 Player이고 해당 키의 태그가 KeyItem이면
            if (other.gameObject.tag == "Player" && gameObject.tag == "KeyItem") {
                gameObject.SetActive(false); // 플레이어와 충돌한 키를 비활성화 한다.
               
                // 플레이어와 충돌한 키 이름의 마지막 숫자
                int kLastName = int.Parse(gameObject.name.Substring(gameObject.name.Length-1, 1));

                // 채워진 키 카운트 활성화시키기
                GameObject.Find("KeyCountFull").transform.GetChild(kLastName-1).gameObject.SetActive(true);

                // 빈 키 카운트 비활성화시키기
                GameObject.Find("KeyCountBlank").transform.GetChild(kLastName-1).gameObject.SetActive(false);
            }
        }
    }

KeyCountFull 이미지들이 비활성화되어 있기 때문에 스크립트에서 직접 이미지를 찾는 것은 불가능합니다.

따라서 부모 폴더를 활용하여 코드를 작성하면 아래와 같이 잘 동작하게 됩니다.

+ Recent posts