Projext/Assets/Scripts/Player/Interaction/Heal/HealthAltar.cs

54 lines
1.9 KiB
C#
Raw Normal View History

2026-02-02 08:30:23 +00:00
using UnityEngine;
public class HealthAltar : MonoBehaviour
{
[Header("--- 회복 설정 ---")]
[SerializeField] private float healAmount = 50f; // 상호작용 시 즉시 회복량
[SerializeField] private float interactRange = 3.5f; // 상호작용 가능 거리
[Header("--- 시각 효과 ---")]
[SerializeField] private ParticleSystem healEffect;
// ⭐ [핵심 수정] PlayerInteraction에서 던져주는 'PlayerHealth' 자료형을 직접 받습니다!
//
public void Use(PlayerHealth playerHealth)
{
if (playerHealth == null) return;
// 플레이어의 Transform 정보 추출
Transform interactor = playerHealth.transform;
// 규칙: 실제 몸통 중심점($Center$)과의 거리 계산
float distance = Vector3.Distance(transform.position, interactor.position);
if (distance <= interactRange)
{
ApplyHeal(playerHealth); // 컴포넌트 자체를 넘겨줌
}
else
{
Debug.Log($"[제단] 너무 멉니다! (거리: {distance:F1} / 제한: {interactRange})");
}
}
private void ApplyHeal(PlayerHealth targetHealth)
{
// ⭐ 캡슐화 규칙: 플레이어의 Health 스크립트에 있는 기능을 호출합니다.
// 유저님의 프로젝트에 정의된 회복 함수 이름을 사용하세요 (예: RestoreHealth, AddHealth 등)
// targetHealth.RestoreHealth(healAmount); //
if (healEffect != null)
{
healEffect.transform.position = targetHealth.transform.position;
healEffect.Play();
}
Debug.Log($"[제단] {targetHealth.gameObject.name} 상호작용 성공! {healAmount} HP 회복.");
}
private void OnDrawGizmosSelected()
{
Gizmos.color = Color.cyan;
Gizmos.DrawWireSphere(transform.position, interactRange);
}
}