Projext/Assets/5.TestScript/PlayerInteraction.cs
hydrozen1178 6e02e36997 기능 수정 본
회복 기능,적 아이템 드랍,등등
2026-01-30 01:11:10 +09:00

62 lines
2.0 KiB
C#

using UnityEngine;
public class PlayerInteraction : MonoBehaviour
{
[Header("--- 설정 ---")]
[SerializeField] private float interactRange = 3f;
[SerializeField] private LayerMask itemLayer;
[SerializeField] private Transform handSlot;
[SerializeField] private Stats playerStats;
private EquippableItem _currentWeapon;
public EquippableItem CurrentWeapon => _currentWeapon;
public void TryInteract()
{
Collider[] hits = Physics.OverlapSphere(transform.position, interactRange, itemLayer);
foreach (var hit in hits)
{
// 1. 무기 상호작용
if (hit.TryGetComponent<EquippableItem>(out var item))
{
if (playerStats.Strength >= item.Config.RequiredStrength)
{
EquipWeapon(item);
break;
}
else
{
// ⭐ [핵심 수정] 힘이 부족하면 카메라를 흔듭니다!
CinemachineShake.Instance?.ShakeNoNo();
Debug.Log($"힘 부족! 필요: {item.Config.RequiredStrength}, 현재: {playerStats.Strength}");
continue;
}
}
// 2. 포션 상호작용
if (hit.TryGetComponent<HealthPotion>(out var potion))
{
potion.Use(GetComponent<PlayerHealth>());
break;
}
// 3. 제단 상호작용
if (hit.TryGetComponent<HealthAltar>(out var altar))
{
altar.Use(GetComponent<PlayerHealth>());
break;
}
}
}
private void EquipWeapon(EquippableItem item)
{
if (_currentWeapon != null) _currentWeapon.OnDropped(transform.forward);
_currentWeapon = item;
_currentWeapon.OnPickedUp(handSlot);
playerStats.UpdateWeaponWeight(item.Config.RequiredStrength);
}
public void ClearCurrentWeapon() => _currentWeapon = null;
}