원시 프롬프트
목표: 아이템 획득 범위 증가
* 경험치 구슬 등을 포함한 몬스터가 드랍한 모든 아이템의 획득 범위가 N배 증가한다.
* 즉, 평소보다 더 멀리 있는 아이템도 플레이어에게 흡수될 수 있다.
* 현재는 몬스터가 경험치 구슬만 드랍하고 있지만 추후 다른 아이템을 드랍하게 될 수도 있으니 해당 아이템까지 미리 포함할 수 있도록 확장성 있게 개발한다.
* CardItem 테이블의 Effect 컬럼에 MAGNET이라 입력한 카드를 선택하면 이 효과를 받는다.
* N이라는 수치는 CardItem의 Value 값에 입력할 것 (예: 150 = 1.5배, 200 = 2배)
프롬프트
플레이어의 아이템 흡수(자석) 범위를 N배로 확장하는 스킬 강화 효과를 추가해줘.
효과/데이터 연동
- CardItem 테이블의 Effect 값이 "MAGNET"인 카드를 선택하면 본 효과가 활성화된다.
- 배율 N은 CardItem.Value(정수)에서 가져온다. 해석: N% → 배율 (예: 150 → 1.5배, 200 → 2배).
- 동일 효과를 여러 장 획득하면 배율이 곱연산으로 누적된다. 예: 150%(1.5x) + 200%(2x) 동시 보유 → 총 3.0x.
동작 정의
- “아이템”은 경험치 구슬을 포함해 몬스터가 드랍하는 모든 흡수형 드랍을 의미한다. (추후 코인, 재화, 체력 구슬 등 추가 예정)
- 플레이어의 기본 자석 반경(baseMagnetRadius)을 기준으로, 실제 반경 = baseMagnetRadius × 누적배율 로 계산한다.
- 자석 반경 안에 있는 아이템은 플레이어 쪽으로 끌려오고, 반경 밖은 영향 없음.
- 아이템 흡수는 2D 기준(Trigger/Overlap)으로, 물리 충돌을 사용하지 않고도 부드럽게 끌려오게 한다.
설계/구현 요구사항
1) 구조
- PlayerEffects(또는 PlayerStats) 모듈에 magnetMultiplier(float)를 추가하고 기본값 1.0으로 둔다.
- 카드 선택 시 Effect=="MAGNET"이면 Value를 읽어 배율 factor = Value / 100f 로 변환 후 magnetMultiplier *= factor.
- 플레이어 쪽에 MagnetController(또는 ItemAttractor) 컴포넌트를 두고, 현재 자석 반경 = baseMagnetRadius * magnetMultiplier 로 관리한다.
2) 아이템 확장성
- 모든 드랍 아이템에 IPickup(인터페이스) 또는 공통 컴포넌트(PickupItem)를 붙여 “자석 적용 가능” 속성을 가지게 한다.
- 태그/레이어("Pickup")로도 필터링 가능하게 해 두고, 추후 새 아이템이 추가돼도 같은 인터페이스/레이어만 붙이면 자동 지원되도록.
3) 탐지/성능
- 일정 간격(예: FixedUpdate 또는 0.05~0.1초 타이머)마다 OverlapCircleNonAlloc 등으로 "Pickup" 레이어만 스캔한다.
- 결과 목록에 대해 거리 체크 후, 자석 반경 이내면 아이템에 ‘흡수 이동’을 적용한다.
- 대량 드랍 상황을 대비해 리스트 재사용, GC 최소화.
4) 끌림(흡수) 이동
- 아이템 쪽에서 MoveTowards/Lerp 로 플레이어 위치를 향해 이동시키되, attractionSpeed(초당 유닛) 파라미터로 조절 가능하게 한다.
- 거리에 따라 가속 옵션을 둘 수 있지만 기본은 일정 속도로.
- 플레이어와 일정 거리 이하(예: 0.2~0.3유닛)로 접근하면 픽업 처리(OnPicked / AddExp 등)를 호출하고 삭제.
5) 상태 변경 반영
- MAGNET 카드 추가 획득 시 즉시 반경 재계산.
- magnetMultiplier는 1.0 미만 값은 허용하지 않고(감소는 미지원), 잘못된 입력(Value ≤ 0)은 무시.
- 디버그용으로 현재 반경을 기즈모로 표시할 수 있게 옵션 제공(개발 빌드에서만).
6) 의존성/안전성
- 물리 설정(2D)과 충돌 레이어 충돌 매트릭스를 확인하고 "Pickup" 레이어는 플레이어와 충돌하지 않도록 한다.
- TimeScale(레벨업 일시정지 등) 0 상황에서도 자석 이동을 멈출지 여부는 옵션으로 둔다. 기본은 일시정지 시 정지.
- N 계산은 float로 처리, NaN/Infinity 방지.
테스트 시나리오
- 기본 반경 = 2.0, MAGNET(150) 1장 → 반경 3.0에서 흡수되는지 확인.
- MAGNET(200) 1장 → 반경 4.0에서 흡수되는지 확인.
- MAGNET(150) + MAGNET(200) → 누적 3.0x, 반경 6.0 되는지 확인.
- 반경 경계선 바로 밖/안에 있는 아이템의 흡수 여부 검증.
- 일시정지(TimeScale=0) 시 자석 이동 정지 옵션 동작 확인.
처음에는 안 됐는데 하이어라키의 Player 오브젝트에 Player Magnet Controller 추가해서 해결.
코덱스는 개발자가 추가로 유니티에서 뭘 세팅해야하는지 말도 안해준다 ㅜ-ㅜ

'AI 게임 제작 > AI 코딩' 카테고리의 다른 글
| 필요 경험치 테이블 구현 (0) | 2025.09.27 |
|---|---|
| 스킬 강화 - 공격력 강화 효과 구현 (0) | 2025.09.27 |
| 스킬 강화 - 투사체 증가 효과 구현 (0) | 2025.09.27 |
| 스킬 강화 랜덤풀 데이터 테이블 구현 (0) | 2025.09.27 |
| 레벨 업 카드 선택지 구현 (0) | 2025.09.27 |