54 lines
1.9 KiB
C#
54 lines
1.9 KiB
C#
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);
|
|
}
|
|
} |