오늘부터 약 5개월 간의 내일배움캠프의 1일차 시작!
첫 주차에서 해야할 일은 깃의 활용방법을 익히기 위한 미니 팀프로젝트예요.
미니프로젝트로 사전캠프동안 들었던 강의에서 만들었던 같은그림 맞추기 게임에 추가기능들을 구현하는 것인데 사전캠프 동안에는 TIL작성을 안했더니 관련 자료가 없네요 😂😂
이렇게 뒤집혀진 카드들에서 같은 그림을 찾는 게임이었어요!
프로젝트에서 추가 해야할 기능들은 아래와 같습니다.

여기서 제가 오늘 추가한 기능은 타이머 시간이 촉박할 때 게이머에게 경고하는 기능과 결과에 매칭 시도 횟수 표시 2가지에요.
경고 기능 추가하기
먼저 시간을 나타내주던 텍스트에 경고를 위한 애니메이션을 만들어 줬어요.

이렇게 애니메이션 창에서 크기가 커졌다 작아졌다 하고 색이 빨간색으로 변하도록 만져준 뒤 실행해보면

텍스트가 콩닥 거리는게 엄청 긴박해 보이죠?
그런 다음 애니메이터에서


트리거 하나를 만들어 주고 AlertIdle에서 Alert로 넘어가는 트랜지션에 트리거를 추가해주면 애니메이션 작업은 끝이에요.
Has Exit Time은 진행중이던 애니메이션이 다 끝난 뒤 다음 애니메이션이 실행될지 묻는 것인데 꺼주시면 돼요.
이제 시간 초가 얼마 남지 않았을 때 이 애니메이션을 동작 시켜주도록 스크립트를 작성해 볼게요.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Alert : MonoBehaviour
{
private Animator anim;
private void Awake()
{
if(!TryGetComponent<Animator>(out anim))
{
Debug.Log("Alert.cs - Awake() - anim 참조 실패");
}
}
public void AlertTime()
{
anim.SetTrigger("Alert");
}
}
Alert 스크립트를 만들고 애니메이터 컴포넌트를 받아와 호출이 되면 아까 만들어놓았던 트리거를 작동시키도록 스크립트를 짰어요.
스크립트와 애니메이터를 시간을 나타내 주는 텍스트에 넣어준 뒤 GameManager 스크립트를 수정해줘요.
private Alert alert;
private void Awake()
{
if(Instance == null)
{
Instance = this;
}
if(obj = GameObject.Find("TimeTxt"))
{
if (!obj.TryGetComponent<Alert>(out alert))
{
Debug.Log("GameManager.cs - Awake() - alert 참조 실패");
}
}
}
우선 TimeTxt 오브젝트를 찾아와 그 안의 Alert 스크립트를 참조해 준 뒤
void Update()
{
time -= Time.deltaTime;
timeTxt.text = time.ToString("N2");
if (time > 0.0f && time <= 5.0f)
{
alert.AlertTime();
}
else if (time <= 0.0f)
{
GameOver();
}
}
Update함수에서 시간이 5초 이하로 남았을 때 AlertTime 함수를 호출 하도록 해주면 완성!

잘 되죠?
긴박한 음악은 적당한 BGM을 찾으면 추가할 예정이에요.
매칭 시도 횟수 표시 추가
GameManager 스크립트를 수정해 줄게요.
int matchCount = 0;
public Text matchTxt;
// Start is called before the first frame update
void Start()
{
Time.timeScale = 1.0f;
matchCount = 0;
audioSource = GetComponent<AudioSource>();
}
matchCount 변수와 matchTxt 텍스트를 선언해 주고 게임이 시작되면 matchCount가 0이 되도록 초기화 해줘요.
public void Matched()
{
if(firstCard.idx == secondCard.idx)
{
audioSource.PlayOneShot(clip);
firstCard.DestroyCard();
secondCard.DestroyCard();
cardCount -= 2;
if(cardCount == 0)
{
GameOver();
}
}
else
{
firstCard.CloseCard();
secondCard.CloseCard();
}
matchCount++;
firstCard = null;
secondCard = null;
}
카드를 열었을 때 두 카드를 비교하는 함수에서 두 카드가 열렸을때 matchCount가 1씩 증가하도록 해줘요.
그런 뒤에 게임이 종료 되었을때
void GameOver()
{
Time.timeScale = 0.0f;
matchTxt.text = "매칭 시도 : " + matchCount.ToString();
endTxt.gameObject.SetActive(true);
}
게임화면에 matchCount의 값을 UI로 보여주도록 하면 완성!

잘 나오네요 😎
마무리
오늘은 이렇게 2가지 기능을 구현해봤어요.
팀원들과 깃을 활용하면서 자잘한 오류가 발생했었는데 금방 문제점을 발견하고 해결할 수 있었던 문제들이라 다행인 하루였어요.
내일도 이런저런 기능들을 추가 할 수 있도록 노력해보겠습니닷!