
HolyKnights VS DarkLegion 은 식물 vs 좀비를 레퍼런스로 만든 2D 타워 디펜스 게임입니다.
플레이어는 유닛을 배치하며 공격해오는 적들을 막아야합니다.
전략적인 유닛 배치와 자원 관리가 핵심 요소이며, 웨이브 방식으로 점점 강해지는 적들을 상대하게 됩니다.
게임은 간단한 조작 방식과 직관적인 플레이 흐름을 제공하며, 다양한 유닛을 활용하여 적을 막아내는 재미를 제공합니다.
김효중 : 덱 정보 저장 및 불러오기 카드로 유닛 배치 기능 툴팁, 획득 UI
UI를 마우스를 이용하여 드래그 앤 드롭으로 월드상에 배치한다.
손을 땠을 때의 위치를 바탕으로 어느칸의 들어갈지와 그 중심 좌표를 구하여 유닛을 소환한다.
이미 있는 칸인 경우에는 소환을 하지 않고 덱 편집 중이라면 해당 카드를 패에서 제거한다.
IDragHandler, IEndDragHandler, IBeginDragHandler를 상속 받고 이를 구현하여 UI를 움직이고 뗀 좌표를 각 칸의 인덱스로 변환한다
// 좌표로 가장 가까운 인덱스 반환
public Vector2Int GetGridIndex(Vector3 pos)
{
// 가장 가까운 중심점 계산
// 좌표별 차이
float disX = startPos.x + pos.x;
float disY = startPos.y + pos.y;
// 0.5이상은 올리고 미만은 내림, 간격 추가
int indexX = (int)Mathf.Floor(disX / stepSize + 0.5f);
int indexY = (int)Mathf.Floor(disY / stepSize + 0.5f);
Debug.Log(indexX + " : " + indexY);
return new Vector2Int(indexX, indexY);
}
// 인덱스로 월드 좌표 반환
public Vector3 GetPosByGrid(int indexX, int indexY)
{
Vector3 pos = new Vector3();
// 범위 오버시 최소, 최대 적용
indexX = Mathf.Clamp(indexX, 0, tileSize.x - 1);
indexY = Mathf.Clamp(indexY, 0, tileSize.y - 1);
pos.x = startPos.x + stepSize.x * indexX;
pos.y = startPos.y + stepSize.y * indexY;
return pos;
}
게임 데이터의 저장 및 불러오기를 위해 Application.persistentDataPath와 JSON 직렬화(Serialization) 방식을 활용하였습니다. 이를 통해 게임 종료 후에도 플레이어의 진행 상태를 유지할 수 있으며, 플랫폼에 관계없이 안정적인 데이터 관리를 할 수 있습니다.
🔹 구현 방식
✅ Application.persistentDataPath를 사용하여 플랫폼별 저장 경로를 자동 지정
✅ JSON 직렬화를 활용하여 데이터를 읽고 쓸 때 가독성을 유지
✅ 파일 시스템(IO)을 최소화하기 위해 데이터 변경 시점에만 저장
🔹 저장 데이터 예시
{
"AllCard": [
{
"unitID": "PK_001",
"canUse": true
},
{
"unitID": "PK_002",
"canUse": true
}
],
"InHandCard": [
"PK_001",
"PK_002",
"PK_003"
],
"HandSize": 5
}
|데이터 저장 및 불러오기 구조|

|메인 화면|
|게임 플레이 장면|

|로딩|

|덱 편집|

👉 플레이하기
웹 브라우저에서 바로 플레이할 수 있습니다! 🎮