본문 바로가기
AI 게임 제작/AI 코딩

스킬 강화 - 관통 효과 구현

by Yuriring 2025. 9. 28.

원시 프롬프트

다음 스킬 강화를 구현해보자! 이번에는, 기본 마법 투사체에 관통이 들어가는거야.
* 몬스터에게 충돌해서 몬스터를 소멸시킨 투사체가 사라지지 않고 멀리까지 간다. 단, 투사체 유지 시간까지만.
* CardItem의 Effect 컬럼에 PIERCE라고 쓴 카드를 선택하면 이 효과를 받게 된다.
프롬프트를 짜줘

프롬프트

Unity 2D 탑뷰 로그라이크 프로젝트에서 ‘기본 마법 투사체(Projectile)’에 관통(Pierce) 강화를 추가해줘. 요건은 아래와 같다.

[요구사항]
1) CardItem 테이블에서 플레이어가 카드를 선택했을 때,
   - Effect 컬럼 값이 "PIERCE" 인 카드를 선택하면 관통 효과가 활성화된다.
   - "PIERCE"는 수치가 필요 없는 토글형 효과다(있으면 ON).
   - 기존 카드 선택 흐름(예: CardSelectUI → ApplyCardEffect 또는 SkillManager/PlayerStats 연동)에 맞춰 구현하되, 
     최소한 아래 공개 API를 제공해: PlayerPassive.SetPierceEnabled(bool enabled).

2) 관통 효과 설명
   - 관통 활성화 시, 투사체가 적과 충돌하더라도 **즉시 소멸하지 않는다**.
   - 투사체는 기존과 동일하게 ‘유지 시간(lifetime)’이 끝나면 소멸한다.
   - 벽/지형 등 환경 충돌(Obstacle/Wall 레이어) 시에는 기존 로직 그대로 소멸한다.
   - 동일 적에게 다중 히트가 중복으로 들어가지 않도록 OnTriggerEnter2D 기반 단발 판정으로 처리한다 
     (또는 필요 시 최근 타격한 대상 해시셋을 둬서 중복 방지).

3) 대미지
   - 투사체 대미지는 기존과 동일하게 PlayerStats.Attack(혹은 AttackPower) 을 사용한다.
   - 적에게 충돌하면 Damageable/EnemyHealth 컴포넌트에 대미지를 가한다.

4) 인스펙터/설정
   - 투사체 프리팹(Projectile)에는 bool pierceEnabled 필드가 있고, 기본값은 false.
   - 발사 시에 PlayerPassive 의 설정을 읽어 투사체.pierceEnabled 를 셋업한다.
   - 기존 speed, lifetime 등은 현행 그대로 사용.

[구현 지시]
A. PlayerPassive.cs (신규 또는 기존)
   - public void SetPierceEnabled(bool enabled)
   - public bool HasPierce { get; private set; }
   - 게임 시작 시 false, "PIERCE" 카드 적용 시 true.

B. Card 적용부 (예: CardEffectApplier.cs 또는 SkillManager.cs)
   - CardItem.Effect == "PIERCE" 를 인식하여 PlayerPassive.SetPierceEnabled(true) 호출.

C. Projectile.cs (기존 수정)
   - public bool pierceEnabled;
   - 발사 시 Shooter(또는 Player)에서 PlayerPassive.HasPierce 값을 받아 pierceEnabled 세팅.
   - OnTriggerEnter2D(Collider2D other):
       * if (other.CompareTag("Enemy")) { 
           enemy.TakeDamage(attackPower); 
           if (!pierceEnabled) Destroy(gameObject); 
         }
       * if (other.CompareTag("Obstacle") || other.CompareTag("Wall")) { Destroy(gameObject); }
   - lifetime 초과 시 Destroy(gameObject).

D. 테스트 시나리오
   - PIERCE 카드 미적용: 적 히트 즉시 투사체 소멸(기존과 동일).
   - PIERCE 카드 적용: 적 히트 후에도 투사체 유지되며 lifetime 동안 계속 진행, 
     다른 적도 타격 가능. 벽 충돌 또는 lifetime 종료 시 소멸.

E. 데이터 연동(예시)
   - CardItem(Effekt, Value)에서 Effect=="PIERCE"를 발견하면 Value는 무시.
   - 카드 선택 UI → 선택 확정 시 위 B 로직 호출.

위 내용을 반영해 필요한 스크립트(예: PlayerPassive.cs, Projectile.cs 수정, 카드 적용부 수정)를 생성/수정하고,
인스펙터에 필요한 필드를 노출해줘. 주석은 한국어로 친절하게 달아줘.

 

무난하게 성공!