어제에 이어 기존 스테이지에 기능 몇가지를 추가했고 이어서 기존의 스테이지뿐만 아니라
히든 스테이지를 추가해보는 시간을 가졌다.
기능 추가
기능 추가에서 내 역할은 타이머 아래에 슬라이더를 추가하고 시간이 경과됨에 따라 색을 변화시켜
긴박한 느낌이 들도록 하는 것이었다.
색의 변화는 Color.Lerp를 이용해 부드럽게 점차 변하도록 할 수 있었다.
Color.Lerp를 사용하기 위해서 작성해야 할 것에는 시작색, 종료색, 시간이 필요하다.
tSlider.value = time;
float t = Mathf.Clamp01(time / maxTime);
sliderFill.color = Color.Lerp(Color.yellow, Color.red, t);
timeTxt.color = Color.Lerp(Color.yellow, Color.red, t);
(오늘부터는 코드 블럭이라는 기능을 알게됐으니 번거롭게 캡쳐해서 넣는 짓은 그만해야겠다..)
히든씬
팀원 분 중에 '헬 테이커'라는 게임의 리소스를 갖고 계신분이 있어서
비록 멤버에 관련된 이미지는 아니지만 추가로 해보는 활동이라 해당 리소스를 이용해
상반된 느낌의 히든 스테이지를 만들었다.
히든 씬에서는 변경되는 각 오브젝트들의 배치와 게임 성공 실패 여부에 따른 캐릭터 애니메이션을 담당했다.
오브젝트 배치는 기존 단계의 구성을 가져와 리소스들을 변경해서 적용했고
각 단계는 CurLevel을 1, 2, 3 세개를 각각 Normal, Hard, Hidden으로 두어 관리하면서
if문으로 성공과 실패 로직을 관리하였다.
// Normal, Hard 단계
if (GameManager.Instance.CurLevel == 1 || GameManager.Instance.CurLevel == 2)
{
// 성공
if (GameManager.Instance.IsFinished)
{
clearTxt.SetActive(true);
normalSuccessPanel.SetActive(true);
timeTxt.enabled = false;
board.SetActive(false);
pauseBtn.SetActive(false);
tSlider.gameObject.SetActive(false);
AudioManager.Instance.SFXList.Clear();
if (GameManager.Instance.CurLevel == 1)
{
GameManager.Instance.NomarlClear = true;
}
else if (GameManager.Instance.CurLevel == 2)
{
GameManager.Instance.HardClear = true;
}
}
// 실패
else if (time >= maxTime)
{
timeTxt.text = 30f.ToString("N2");
Time.timeScale = 0f;
failTxt.SetActive(true);
timeTxt.enabled = false;
board.SetActive(false);
tSlider.gameObject.SetActive(false);
pauseBtn.SetActive(false);
AudioManager.Instance.SFXList.Clear();
}
}
2일차에서 봤듯 성공 시에는 화면의 모든 오브젝트를 비활성화 하고
클리어 텍스트 및 팀원의 이미지와 돌아가기 버튼이 활성화 되도록 했다.
실패 시에도 동일하게 모든 오브젝트를 비활성화 하고 실패 버튼이 활성화 되도록 했고
누르면 StartScene으로 되돌아 가도록 구현했다.
// Hidden 단계
else if (GameManager.Instance.CurLevel == 3)
{
// 실패
if (time >= maxTime)
{
failTxt.SetActive(true);
timeTxt.enabled = false;
board.SetActive(false);
pauseBtn.SetActive(false);
tSlider.gameObject.SetActive(false);
AudioManager.Instance.SFXList.Clear();
hero.PlayDeathAnim();
}
// 성공
else if (GameManager.Instance.IsFinished)
{
clearTxt.SetActive(true);
timeTxt.enabled = false;
board.SetActive(false);
pauseBtn.SetActive(false);
tSlider.gameObject.SetActive(false);
AudioManager.Instance.SFXList.Clear();
hero.PlaySuccessAnim();
}
}
public class Hero : MonoBehaviour
{
public Animator anim;
public void PlayDeathAnim()
{
anim.SetTrigger("Fail");
}
public void PlaySuccessAnim()
{
anim.SetTrigger("Success");
}
}
히든은 다른 부분은 동일하고 팀원의 이미지를 보여주는 SuccessPanel 대신
Hero 스크립트의 애니메이션 트리거 파라미터를 작동하는 메소드를 호출하는 부분에서 차이가 있다.
오늘의 회고
1. 깃허브에서 협업할 때 병합하는 과정에서 스크립트끼리 충돌이 생기면 고칠 방법이 있지만 여러명이 하나의 씬을 동시에 작업해서 생긴 충돌은 해결할 수 없다는 것을 배우게 되었다. 물론 숙련자들에겐 방법이 있지만 아직 우리에게는 버거운 수준이라고 한다. 앞으로는 역할을 분담할 때 최대한 서로의 씬을 건들지 않고 기능을 확실하게 나누어야 하고
가장 중요한 점은 메인에 바로 병합하는 것이 아니라 내 브랜치에 먼저 메인을 끌어와서 확인한 다음 정상이라면 내 브랜치를 메인에 붙이는 방식으로 진행해야 한다.
그리고 병합을 하는 사람은 다른 사람과 겹치지 않도록 꼭 본인이 하겠다고 얘기하고 끝나고도 알려줘야 한다는 점이다. 이렇게만 잘 지킨다면 웬만해서는 충돌날 일이 없을 것 같다.
2. Button 컴포넌트는 UI 오브젝트에 생성해야 클릭이 감지된다는 점이다. 카드 프리펩을 복제해서 히든에서 사용하려는 과정에서 텍스트 오브젝트를 지우고 그 위의 일반 오브젝트에 생성 했더니 클릭이 되질 않아서 한참 삽질을 했다. 복제를 할거면 있는 그대로 쓸 것..
'게임 개발 공부 기록' 카테고리의 다른 글
5일차 - 멤버 카드 뒤집기 마무리 (0) | 2025.01.24 |
---|---|
4일차 - 멤버 카드 뒤집기 3 (0) | 2025.01.23 |
2일차 - 멤버 카드 뒤집기 (0) | 2025.01.21 |
1일차 - Git과 Github (0) | 2025.01.20 |
르탄이 카드 뒤집기 (0) | 2025.01.16 |