2026-05-19 무기추가
진행중인 사항 - InputManager + .inputactions: WeaponSlot1/2/3 액션 추가, 키 1/2/3 매핑 PlayerController 통합: Player에 PlayerWeaponInventory 컴포넌트 자동 부착 OnWeaponChanged 구독 → idle/walk State 이름 동적 교체 OnPunchInput 분기: 무장 시 weapon.AttackRootNode 사용 WeaponSlot 입력 핸들러 3개 추가 (EquipUnarmed / EquipSlot(0) / EquipSlot(1))
This commit is contained in:
58
Assets/02_Scripts/Combat/WeaponPickup.cs
Normal file
58
Assets/02_Scripts/Combat/WeaponPickup.cs
Normal file
@@ -0,0 +1,58 @@
|
||||
using UnityEngine;
|
||||
|
||||
// ============================================================================
|
||||
// WeaponPickup
|
||||
// ----------------------------------------------------------------------------
|
||||
// 월드에 떨어진 무기. 플레이어가 트리거 영역에 들어오면 자동으로 인벤토리에 추가되고 사라짐.
|
||||
//
|
||||
// 두 가지 사용 패턴:
|
||||
// 1) 씬에 미리 배치 → Inspector에서 _weapon 할당 → 자동 표시
|
||||
// 2) 코드로 동적 스폰 → Initialize(WeaponData)로 무기 주입 (Enemy.HandleDeath)
|
||||
// ============================================================================
|
||||
[RequireComponent(typeof(Collider2D))]
|
||||
[RequireComponent(typeof(SpriteRenderer))]
|
||||
public class WeaponPickup : MonoBehaviour
|
||||
{
|
||||
[SerializeField] private WeaponData _weapon;
|
||||
|
||||
private SpriteRenderer _spriteRenderer;
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
_spriteRenderer = GetComponent<SpriteRenderer>();
|
||||
|
||||
// 픽업은 물리 충돌 아닌 트리거. 플레이어가 통과하면서 줍게.
|
||||
Collider2D col = GetComponent<Collider2D>();
|
||||
col.isTrigger = true;
|
||||
|
||||
ApplyVisual();
|
||||
}
|
||||
|
||||
// 코드로 동적 스폰 시 호출. Enemy.HandleDeath에서 사용.
|
||||
public void Initialize(WeaponData weapon)
|
||||
{
|
||||
_weapon = weapon;
|
||||
ApplyVisual();
|
||||
}
|
||||
|
||||
private void ApplyVisual()
|
||||
{
|
||||
if (_spriteRenderer == null || _weapon == null) return;
|
||||
if (_weapon.PickupSprite != null)
|
||||
_spriteRenderer.sprite = _weapon.PickupSprite;
|
||||
}
|
||||
|
||||
// 플레이어가 트리거 영역에 진입 시 발화.
|
||||
// Player(또는 자식)에 PlayerWeaponInventory 컴포넌트가 있어야 픽업 됨.
|
||||
// 이미 보유 중이면 Pickup이 false 반환 → pickup 오브젝트 그대로 유지.
|
||||
private void OnTriggerEnter2D(Collider2D other)
|
||||
{
|
||||
if (_weapon == null) return;
|
||||
|
||||
PlayerWeaponInventory inventory = other.GetComponentInParent<PlayerWeaponInventory>();
|
||||
if (inventory == null) return;
|
||||
|
||||
if (inventory.Pickup(_weapon))
|
||||
Destroy(gameObject);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user