LegendNinja.1.mp4
LegendNinja는 로그라이크 스타일의 액션 게임으로, 강력한 닌자가 되어 몰려오는 적들을 물리치는 게임입니다. 다양한 스킬과 무기를 조합해 생존을 목표로 합니다. 빌드 링크
- 팀장 : 김태겸
- 팀원 : 배연두, 손효정, 이정구
- 제작기간 : 2025.02.21 ~ 2025.02.28 (7일)
-
에셋 무료 타일셋
-
장애물 스포너 맵에 장애물을 소환
랜덤하게 장애물 배치
public void SpawnObstacles(Vector2 position, int prefabIndex) { if (obstaclePrefabs.Length == 0) return; prefabIndex = Mathf.Clamp(prefabIndex, 0, obstaclePrefabs.Length - 1); GameObject obstacle = Instantiate(obstaclePrefabs[prefabIndex], position, Quaternion.identity); spawnedObstacles.Add(obstacle); //생성된 장애물을 리스트에 추가 } Vector2 GetRandomPosition() { float x = Random.Range(-mapSize.x / 2, mapSize.x / 2); float y = Random.Range(-mapSize.y / 2, mapSize.y / 2); return new Vector2(x, y); }장애물끼리 겹치는지 확인
private bool IsPositionOccupied(Vector2 position,List<Vector2> _spawnedPosition) { foreach (Vector2 spawnedPosiotion in _spawnedPosition) { if (Vector2.Distance(position, spawnedPosiotion) < 4f) { return true; } } return false; }
[주요기능] 가장 가까운 적 탐지 로직
Transform FindCloseMonster()
{
GameObject[] monsters = GameObject.FindGameObjectsWithTag("Monster");
Transform ClosestEnemy = null;
float MaxDistance = 50f;
float ClosestDistance = MaxDistance;
Vector2 PlayerPos = transform.position;
foreach (GameObject monster in monsters)
{
float Distance = Vector2.Distance(PlayerPos, monster.transform.position);
if (Distance < ClosestDistance)
{
ClosestDistance = Distance;
ClosestEnemy = monster.transform;
}
}
return ClosestEnemy;
}
- 몬스터 태그를 가진 오브젝트를 찾습니다.
- 가장 가까운 적 오브젝트를 저장할 변수를 만들고 처음엔 없으니 Null로 지정합니다.
- 처음에 볼 거리를 50f로 설정합니다. (탐색할 최대거리)
- 가장 가까운 거리를 처음에 탐색할 최대거리로 초기화 시킵니다.
- 플레이어의 위치를 받아옵니다.
- foreach문을 돌려서 플레이어와 적 사이의 거리를 Distance를 통해 계산합니다.
6-1. 만약 지금까지 저장된 가장 가까운 거리보다 작으면
6-2. 그 거리를 새로운 가장 가까운 거리로 다시 저장합니다.
6-3. 그 해당 적의 transform을 저장합니다. - 가장 가까운 적을 반환합니다. (없으면 Null을 반환합니다.)
- SkillData 클래스는 개별 스킬의 데이터를 저장합니다. 이 클래스는 스킬의 ID, 이름, 타입, 값, 설명, 스프라이트 경로 등을 포함합니다.
- SkillManager 클래스는 스킬 데이터를 관리하고, 스킬을 적용하는 역할을 합니다. 주요 메서드는 다음과 같습니다.
- GetSkillList(): 스킬 리스트를 반환합니다.
- ApplySkill(int skillId): 주어진 스킬 ID에 해당하는 스킬을 적용합니다.
- AddweaponList(SkillData skill): 무기 리스트에 스킬을 추가합니다.
- SkillSelectionUI 클래스는 스킬 선택 UI를 관리합니다. 주요 메서드는 다음과 같습니다.
- SetupSkillButtons(): 스킬 선택 UI를 설정하고 3개의 랜덤한 스킬을 표시합니다.
- SelectSkill(SkillData skillData): 선택한 스킬을 적용하고 패널을 닫습니다.
- OpenPanel(): 스킬 선택 패널을 열고 스킬 버튼을 초기화합니다.
- 각 웨이브에 등장 가능한 몬스터 종류와 개수를 WaveDataTable에서 관리합니다. 데이터를 로드해서 웨이브 정보 내에서 랜덤하게 몬스터를 스폰합니다.
- 몬스터 데이터는 MonsterDataTable에서 관리하고, 로드된 데이터로 기본 능력치를 설정합니다.
| 근접 몬스터 | 원거리 몬스터 | 보스 몬스터 |
|---|---|---|
![]() |
![]() |
![]() |
스테이지 구성
- 총 2개의 스테이지, 각 스테이지는 5개의 웨이브 포함
- 맵의 모든 몬스터를 처치하면 웨이브 클리어
- 5웨이브마다 보스 몬스터 등장, 클리어 시 다음 스테이지로 이동 가능
- 웨이브가 진행될수록 난이도 증가 (장애물 개수 증가, 몬스터 종류/마리 수 증가)



