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

| 날짜 | 내용 |
|---|---|
| 02.21 (금) | 역할 분담 및 와이어 프레임 작성 |
| 02.22 (월) | 스켈레톤 코드 작성 후 기본 기능 개발 |
| 02.23 (화) | 1차 병합 및 레벨 디자인 구성 |
| 02.24 (수) | 2차 병합 후 수정 사항 피드백 |
| 02.25 (목) | 지속적으로 피드백과 디버깅, 3차 병합 및 최종 테스트 |
| 02.26 (금) | 최종 완성 및 프로젝트 결과 발표 |
원거리 무기 데이터 구현 및 구성,
스킬 업그레이드 구현,
보스몬스터 구현
원거리 무기의 원본 데이터 값을 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());
}