0807부터 유니티, 깃헙을 활용한 팀별 게임 개발 프로젝트를 0811까지 진행한다.
개발 목표는 지난 사전캠프의 마지막 강의 내용 "카드 뒤집기" 게임에 더 많은 내용을 담아 보다 몰입할 수 있는 게임으로 발전시키는 것이다.
주어진 과제는 다음과 같다. 내가 담당한 과제는 ★표시한다.
매칭 성공 시, 팀원의 이름 표시 / 실패 시 실패 표시 (종료 시 끝! 나타나는 것처럼)
카드 뒤집기에서 실제로 카드가 뒤집어지는 모습 연출하기
★ 클릭할 때(카드 뒤집을 때), 시작할 때, 진행 중일 때 성공 실패 소리 넣어보기
★ 타이머 시간이 촉박 할 때 게이머에게 경고하는 기능 작성해보기(시간이 붉게 변하거나 긴박한 배경음악으로 변경)
★ 실패할 때 마다 시간 감소 효과 넣어보기
스테이지 선택과 현재 해금한 스테이지가 구분 가능한 시작 화면 만들기, 플레이 중 해당 스테이지의 최단 기록 띄워주기
한 번씩 뒤집은 카드는 색을 다르게 표시하기 (옅은 회색 등)
결과에 매칭 시도 횟수 표시
firstCard 고르고 5초 간 카운트 다운 - 안 고르면 다시 닫기
현재 스테이지(또는 난도)에 따라 카드 배열 증가시켜보기
결과에 점수 표시 → 남은 시간, 매칭 시도한 횟수 등을 점수로 환산
사실, 딱 봐도 제일 쉬운 과제 3개다. 실제로 해 보니 코드 몇줄 추가 밖에 할게 없다. 심지어 오늘 다 했다.
다른 조원이 담당한 과제의 상세는 따로 작성한다.
★ 클릭할 때(카드 뒤집을 때), 시작할 때, 진행 중일 때 성공, 실패 소리 넣어보기 & 배경음악 추가
카드 클릭 시, 뒤집은 두 장의 카드가 일치할(서로 다를) 때 소리 총 3개의 음향효과(SE)를 추가했다.
게임 실행과 동시에 재생되는 BGM을 추가했다.
다음은 사용한 SE와 코드다.

draw : 카드 클릭
bell : 카드 일치
error : 카드 불일치
Lazy Day v0_9 : BGM
다음은 카드 버튼에 OpenCard() 할당이다.

draw는 카드 스크립트에서 작성한다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class card : MonoBehaviour
{
public AudioSource audioSource;
public AudioClip draw;
public void OpenCard()
{
audioSource.PlayOneShot(draw);
}
} // 관련 없는 코드는 전부 생략
bell, error는 GM에서 작성한다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Linq;
using UnityEngine.UI;
using System.IO;
public class gameManager : MonoBehaviour
{
public Animator anim; // timeTxt 애니메이션 전환
public AudioSource audioSource; // GM오디오소스
public AudioClip matchedSound; // 카드 두개가 일치할 때 소리
public AudioClip unmatchedSound; // 카드 두개가 다를 때 소리
public void IsMatched()
{
string firstCardImage = firstCard.transform.Find("front").GetComponent<SpriteRenderer>().sprite.name;
string secondCardImage = secondCard.transform.Find("front").GetComponent<SpriteRenderer>().sprite.name;
if (firstCardImage == secondCardImage)
{
audioSource.PlayOneShot(matchedSound);
}
else
{
audioSource.PlayOneShot(unmatchedSound);
}
firstCard = null;
secondCard = null;
}
}
Lazy Day v0_9는 AudioManager(AM)에서 작성한다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class audioManager : MonoBehaviour
{
public AudioSource audioSource;
public AudioClip bgm;
void Start()
{
audioSource.clip = bgm;
audioSource.Play();
}
}
★ 타이머 시간이 촉박 할 때 게이머에게 경고하는 기능 작성해보기(시간이 붉게 변하거나 긴박한 배경음악으로 변경)
제한 시간이 10초 이하일 때, 제한시간 텍스트가 빨갛게 점멸하고, 제한시간이 0이 됐을 때 텍스트 색을 빨갛게 처리한다.
다음은 위의 기능을 추가한 게임 화면이다.

다음은 제한시간 텍스트의 Animation과 Animator다.

각 애니메이션의 Transition 조건은 under10seconds이다.
다음은 애니메이션 기능을 추가한 GM의 코드다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Linq;
using UnityEngine.UI;
using System.IO;
public class gameManager : MonoBehaviour
{
public Text timeTxt;
public Animator anim; // timeTxt 애니메이션 전환
void Update()
{
time -= Time.deltaTime;
timeTxt.text = time.ToString("N2");
if (time <= 10.0f) // 제한시간 10초 이하일 경우
{
anim.SetBool("under10seconds", true); // 조건은 true, timeTxtblinking 동작
ShowMeTheHint();
}
if (time <= 0.0f) // 제한시간 0초 이하일 경우
{
GameEnd();
}
}
void GameEnd()
{
anim.SetBool("under10seconds", false); // 조건은 false, timeTxtbGameOver 동작
Time.timeScale = 0.0f;
endTxt.SetActive(true);
time = 0f;
}
}
★ 실패할 때 마다 시간 감소 효과 넣어보기
뒤집힌 두 장의 카드가 서로 다를 경우, 제한 시간에서 3초를 빼고, 제한시간 텍스트 옆에 "-3" 텍스트를 일시적으로 표시한다.
다음은 -3텍스트의 속성, 애니메이션이다.

timePenalty : Empty Object / timePenaltyTxt : Text
timePenaltyTxt는 생성 이후 위로 올라감과 동시에 페이드아웃 되어 사라진다.
다음은 GM에서 동작하는 timePenaltyTxt의 코드다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Linq;
using UnityEngine.UI;
using System.IO;
public class gameManager : MonoBehaviour
{
public GameObject timePenalty; // 카드 두개가 다를 때 시간 까는 패널티
public Animator anim; // timeTxt 애니메이션 전환
public void IsMatched()
{
if (firstCardImage == secondCardImage)
{
}
else
{
time -= 3.0f;
GameObject penalty = Instantiate(timePenalty); // 제한시간에서 3초 까기
Destroy(penalty, 0.5f);
}
Text는 GameObject가 아닌 UI다. 따라서 생성된 Text를 GameObject에 할당해야 destroy함수 동작 시 오류가 발생하지 않는다.
만약 위의 할당을 하지 않고 Destroy(timePenaltyTxt) 동작 시도 했을 경우,
destroying assets is not permitted to avoid data loss 오류 메세지가 출력된다.
튜터에게의 질문 : 게임 시작 후 일정 시간이 지나면 BGM의 재생 속도를 조절하고 싶다. 어떻게 하면 되는가?
답변 : AUDIO MIXER라는 기능이 있다. 지금 진도에서 이 기능을 사용해도 되는지 논의해 보고 추가 답변하겠다.
github DESKTOP 앱의 사용으로 GIT&GITHUB의 활용을 무난하게 할 수 있게 됐다.
이에 관한 상세는 사용 숙련도가 안정되면 기록한다.
'UNITY' 카테고리의 다른 글
| UNITY_20230810[팀 프로젝트_3] (0) | 2023.08.10 |
|---|---|
| UNITY_20230809[팀 프로젝트_2] (0) | 2023.08.09 |
| UNITY_20230802[카드 짝 맞추기] (0) | 2023.08.03 |
| UNITY_20230728[고양이밥줘서내쫓기] (0) | 2023.08.01 |
| UNITY_TIL최적화를 위한 규칙 (0) | 2023.07.31 |