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); } }