팀프로젝트 : Back_to_the_Gungeon

김효중·2025년 2월 28일

깃허브 : https://github.com/hn7093/Back_to_the_Gungeon

Back_to_the_Gungeon - TopDown 2D Shooter

프로젝트 개요

  • 프로젝트명 : Back_to_the_Gungeon
  • 개발환경 : C#, Unity
  • 프로젝트 기간 : 7일 - 2025.02.21 ~ 2025.02.28
  • 개발 인원 : 파이브아이즈(Five I's) 10조 5명
    • 김효중, 황희돈, 박규태, 남태현, 이준범

개발 타임라인

날짜내용
02.21 (금)역할 분담 및 와이어 프레임 작성
02.22 (월)스켈레톤 코드 작성 후 기본 기능 개발
02.23 (화)1차 병합 및 레벨 디자인 구성
02.24 (수)2차 병합 후 수정 사항 피드백
02.25 (목)지속적으로 피드백과 디버깅, 3차 병합 및 최종 테스트
02.26 (금)최종 완성 및 프로젝트 결과 발표

주요 기능

  • 전투 시스템 : 무기, 투사체, 적 AI, 보스전
  • 레벨 디자인 : 랜덤 맵 생성, 방 기반 전투
  • UI 및 UX : 체력바, 적 조준 인터페이스

주요 업무

원거리 무기 데이터 구현 및 구성,
스킬 업그레이드 구현,
보스몬스터 구현

주요 업무

원거리 무기의 원본 데이터 값을 ScriptableObject를 이용하여 저장하였다.

[CreateAssetMenu(fileName = "WeaponData", menuName = "WeaponSO/WeaponData")]
public class WeaponSO : ScriptableObject

이를 무기의 사용을 관리하는 WeaponHandler에서 해당 데이터를 불러와 초기화를 진행하였다.

// 데이터 복사 후 세팅
public virtual void Setup(WeaponSO weaponData)
{
    Delay = weaponData.delay;
    ...
    attackSoundClip = weaponData.attackSoundClip;
}

해당 방법을 통해 WeaponHandler의 내부 변수를 설정하도록 하였다.
이를 통해 다른 스크립트를 통해 내부변수가 변경 되어도 원본 데이터를 수정하지 않고 변경하여 업그레이드를 구현할 수 있다.

또한 발사체에 대하여 인덱스를 통해 접근하여 데이터별로 다른 발사체를 발사 할 수 있도록하였다.
numberofProjectilesPerShot로 발사 수를,multipleProjectilesAngel, multipleDelay, spread를 통해 단발, 연발, 산탄, 집중탄등을 간단히 연출 할 수 있다.
Attack를 호출함으로써 WeaponHandler에서를 상속 받는 클래스는 언제든 공격 할 수 있다.

	public override IEnumerator Attack()
    {
    	// 애니메이션, 파티클 실행
        StartCoroutine(base.Attack());
        // 발사 갯수에 따른 판 퍼짐 각도
        float minAngle = -(numberofProjectilesPerShot / 2f) * multipleProjectilesAngel + 0.5f * multipleProjectilesAngel;

        for (int i = 0; i < numberofProjectilesPerShot; i++)
        {
            float angle = minAngle + multipleProjectilesAngel * i;
            float randomSpread = Random.Range(-spread, spread);
            angle += randomSpread;
            // 탄환 생성
            CreateProjectile(Controller.LookDirection, angle);
            yield return new WaitForSeconds(multipleDelay);
        }
    }

보스등의 몬스터의 경우는 고유의 행동 로직을 통해 무기별 Attack을 호출하여 패턴을 구현할 수 있었다.

	protected IEnumerator Acition3()
    {
        actionDuration = 7.0f;
        StartCoroutine(weaponHandlers[3].Attack());
        yield return new WaitForSeconds(4f);
        StartCoroutine(weaponHandlers[1].Attack());
    }

트러블슈팅

1 총알(투사체)의 충돌 누락

  • 문제: 총알의 충돌이 누락되는 현상 발생
  • 원인: 총알의 RigidBody의 충돌검사 방식 설정 오류로 인해 총알이 충돌되지 않았음
  • 해결: RigidBody의 충돌검사 방식을 Continuous로 변경하여 총알의 충돌을 개선함
profile
도전하는 개발자

0개의 댓글