스파르타 내배캠 2일차 TIL
👊 c1조_시작이 반이다!
TIL 수정
아주 작은 실수로 하루를 날려버릴 수 있다는 것을 오랜만에 느끼는 하루였다😂
깃허브에 관한 것이라서 어제 TIL에 추가로 수정해서 올렸다.
https://rollingball-coding.tistory.com/19
깃과 깃허브, 유니티 협업
스파르타 내배캠 1일차 TIL 👊 c1조_시작이 반이다! 협업에 있어 가장 필요한 것이 무엇일까? 하면 대부분은 소통이라고 생각할 것이다. 하지만 개발자의 입장에서 생각한다면 소통 이외에 중요
rollingball-coding.tistory.com
c1조_프로젝트
내배캠 첫 주는 미니 프로젝트를 통해 사전캠프 때 배웠던 내용을 복습하고 팀원들과 협업에 대해 배우는 주간이다. 프로젝트는 목요일까지 제출해야 하고 금요일에 5분 정도 발표 시작이 준비되어 있다.
현재 작업하고 있는 게임은 카드 뒤집기 게임이다. 사전캠프 때 스파르타에서 제공하였던 강의 중 마지막 주차의 내용이었다. 그래서 우리는 기능을 세세하게 나누어 각자 개발 후 합치기로 하였다.
나는 그 중에 가장 기본이 되는 카드 배치와 추가 기능인 카드 색 변경, 씬 매지징, 인트로 화면을 맡아 진행하였다.
카드 배치
void Start()
{
int[] arr = { 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5 };
// 카드 섞기
arr = arr.OrderBy(x => Random.Range(0, arr.Length)).ToArray();
for (int i = 0; i < 12; i++)
{
GameObject go = Instantiate(card, this.transform);
float x = (i % 3) * 1.4f - 2.1f;
float y = (i / 3) * 1.4f - 3.0f;
go.transform.position = new Vector2(x, y);
go.GetComponent<Card>().Setting(arr[i]);
}
}
위에 있는 코드는 강의를 참고하여 작성한 코드이다. 배치할 카드를 한 쌍으로 생각하고 배열에 임의로 인덱스를 지정한다. 그리고 0부터 배열 길이 중 랜덤한 숫자를 이용하여 배열을 정렬한다. 강의와 다르게 3x4 카드 배열을 위해 x, y 좌표를 3으로 나눠 1.4f만큼의 간격으로 위치를 지정한다.
하지만 새로운 미니 프로젝트인 만큼 주요 코드를 변경하는 것이 의미가 있을 것 같아 이 부분을 수정했다.
void InitBoard()
{
int[] arr = { 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5};
// 카드 섞기 로직2
for (int i = 0; i < arr.Length; i++)
{
//배열 섞기
int j = Random.Range(i, arr.Length);
if (i != j)
{
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
// 카드 프리팹 생성
GameObject go = Instantiate(card, this.transform);
// 프리팹 위치 지정
float x = (i % 3) * 1.6f - 1.6f;
float y = (i / 3) * 1.6f - 3.5f;
go.transform.position = new Vector2(x, y);
go.GetComponent<Card>().Setting(arr[i]);
}
GameManager.instance.cardCount = arr.Length;
}
첫번째 코드와 크게 다르지 않다. OrderBy를 사용하지 않고 하드 코딩을 했다고 표현할 수 있다. 대표적인 Sort 알고리즘인데 랜덤 숫자가 for문 인덱스와 다를 때 해당되는 인덱스의 값을 변경하는 것이다. 결국 위와 같이, 랜덤으로 정렬하는 것이다. 의도는 같지만 쓰는 로직이 다른 예시가 될 것 같다.
카드 색상 변경
void CloseCardInvoke()
{
anim.SetBool("isOpen_1", false);
front.SetActive(false);
back.SetActive(true);
anim.SetBool("isOpen", false);
//카드 색 변경
backImage.color = new Color(backImage.color.r - 0.1f, backImage.color.g - 0.1f, backImage.color.b - 0.1f);
}
카드를 뒤집을 때마다 색상이 변경되어 눌러본 카드인지 확인할 수 있다. 코드는 아주 간단했다. 두 장의 카드를 뒤집어 같은 카드가 아니라면 카드가 닫힌다. 이때, 색상의 r, g, b를 0.1f씩 줄인다. 그러면 흰색인 카드가 맞추기를 실패했을 때마다 어두워진다.
씬 매니징
using UnityEngine.SceneManagement;
public class LoadSceneManager : MonoBehaviour
{
public void StartGame()
{
SceneManager.LoadScene("MainScene");
}
public void ExitGame()
{
SceneManager.LoadScene("StartScene");
}
}
이 기능도 아주 간단하다. (왜이렇게간단한코드만진행했지..?) SceneManagement 패키지의 SceneManager를 사용하여 씬을 불러온다.
스타트 화면(인트로, 로비)
씬 매니징을 하면서 팀만의 특별한 인트로가 있으면 좋을 것 같아 작업하였다. 주먹과 팀명이 적힌 로고는 ChatGPT의 DEll.e를 이용하여 생성하였다. 유료 버전에 이미지 생성 기능이 있다는 얘기를 듣고 오늘 처음 결제하여 작업 해보았다. 만족스러운 결과물을 만들려면 깊이있게 요구해야 했던 것 같다.
마무리하며
팀장을 맡은 내가 기능을 종류 별로 나누어 가지게 했다면 발표 때 자기가 맡은 부분은 확실히 어필할 수 있을 거라는 생각을 너무 늦게 해버려 아쉬움이 남는다. 하지만 이것 또한 협업의 첫 단계라고 생각하고 앞으로 기능을 맡을 때 그 부분까지 생각해서 나누려고 한다. 아쉬운 점이 많은 하루였지만 개발자는 삽질하며 크는 거라고 생각하기 때문에 후회는 없다.
'Unity > TIL' 카테고리의 다른 글
2주차 시작 +error (1) | 2024.04.22 |
---|---|
시작이 반이다! 팀의 최종 마무리 (1) | 2024.04.19 |
내용 없는 TIL (1) | 2024.04.18 |
간단한 게임 레벨, 해금 시스템 (0) | 2024.04.17 |
깃과 깃허브, 유니티 협업 (0) | 2024.04.15 |