[PlayerAttack && interface 구현]
작업 일자:2025_05_14 ~ 2025_05_15
주요 작업:플레이어의 Attack 과 Interface
진행도:플레이어 의 40%
1. 작업 요약
- 플레이어의 InputHandler와 Movement 작성
2. 상세 작업 내역
항목내용
추가 메서드/클래스 | PlayerAttack,Projectile |
삭제/리팩토링 | PlayerController(삭제) / PlayerInputHandler, PlayerMovement |
2-1. 주요 코드 요약
(1) 각종 인터페이스
- Enemy를 중심으로 공용으로 사용할 적대적 개체의 Interface 설계 및 플레이어 또한 적용할만한 것들은 적용
public interface IDamageable
{
void TakeDamage(float amount);
bool IsDead { get; }
}
(현재는 인터페이스의 스크립트들이 굉장히 적으나 차후 추가될 가능성 염두)
(2) 기능명
- PlayerAttack
- 플레이어의 공격을 처리
- 근접무기의 경우 2D 라는 점을 살려 가상의 영역을 만들어 Layer 검사 유저 입장에선 애니메이션 효과로 인하여 공격하는것처럼 느낌
- 원거리 무기의 경우 Projectile을 발사하며 최대 3발까지 공전가능 공격력 또한 0.8배율
void SwapWeapon()
{
//삼항 연산자를 이용한 대입 현재무기에 대입한다 현재무기가 Melee 라면 Ranged 를 아니라면 Melee를 무기가 2개일때만 가능한 스왑(최대 2개 장착으로두고 1번 무기 2번무기로도 가능)
currentWeapon = currentWeapon == WeaponType.Melee ? WeaponType.Ranged : WeaponType.Melee;
}
IEnumerator Swing()
{
isAttacking = true;
yield return new WaitForSeconds(0.1f); // 공격 딜레이(선딜)
Debug.Log("근접 공격");
Vector2 center = transform.position; // 플레이어 의 위치
float direction = transform.localScale.x > 0 ? 1f : -1f; // 바라보고있는 방향이 + 방향이라면 1f 를 아니라면 -1f 반환
center += Vector2.right * direction * hitboxSize.x * 0.5f; // 현재 위치에서 이동한다 Vector2.right( X 좌표 + 값 / 우측) * 방향 * hitbox * 0.5f(기존 크기의 0.5배)
Collider2D[] hits = Physics2D.OverlapBoxAll(center, hitboxSize, 0f, enemyLayer); // 콜라이더2D 배열에 담는다 영역에 들어온 EnemyLayer객체들을
foreach (var hit in hits) // 피격당한 객체에 대미지를준다 (인터페이스를 통해 피격 처리 IDamageable)
{
hit.GetComponent<IDamageable>()?.TakeDamage(playerStat.damage);
}
yield return new WaitForSeconds(meleeCooldown); // 근접공격속도에 맞춰 Return 그후 어택 false
isAttacking = false;
}
핵심 기능 스왑 과 공격방식
(현재 스왑기능 활성화 애니메이션 진척도에따라 변경 가능)
3. 작업 중 변경사항
- PlayerController 삭제
- 서로 참조가 많이 없어 프로젝트 규모를 생각해 삭제하였다
- 연결자 역할을 하지만 다른 스크립트에서 거의 사용하지 않았음을 고려
4. 소요 시간
항목시간
예상 소요 시간 | 3시간 |
실제 소요 시간 | 5시간 |
5. 작업 중 애로사항
- 근접공격의 구현방식 실제 오브젝트를 만들고 그 오브젝트를 휘두르는 식의 구현을 처음에 생각하였으나 2D기준 자연스러운 연출을 구현할 방법이 떠오르지 않았고 애니메이션을 받는다면 무엇이 더 깔끔할지 고민하다 특정 구역 공격 방식으로 문제 해결
6. 예상되는 문제점
- Enemy 01의 구성 첫번째 적대적 개체인만큼 다른 Enemy 객체에 영향을 많이 줄것을 고려 확장성을 최대한 좋게 만들어내려하지만 코드가 지저분해질까 걱정이된다
7. 다음 작업 계획
- PlayerStat과 PlayerAnim
'개인개발기록 > 게임개발프로젝트' 카테고리의 다른 글
2025_05_16_플랫포머_게임개발_연습_프로젝트 (0) | 2025.05.17 |
---|---|
2025_05_15_플랫포머_게임개발_연습_프로젝트 (0) | 2025.05.16 |
2025_05_08_플랫포머_게임개발_연습_프로젝트 (0) | 2025.05.08 |
2025_05_05_플랫포머_게임개발_연습_프로젝트 (1) | 2025.05.06 |
2025_05_01_플랫포머_게임개발_연습_프로젝트 (0) | 2025.05.01 |