Files
PIM_8/Assets/_Scripts/InteractableObject.cs
T
2026-06-04 15:45:39 +03:00

50 lines
1.4 KiB
C#

using UnityEngine;
using UnityEngine.Events;
public class InteractableObject : MonoBehaviour
{
public Transform player;
public float interactionRadius = 2.4f;
public string promptText = "Нажмите E, чтобы осмотреть статую";
public float promptDuration = 1.2f;
public bool interactOnce = true;
public UnityEvent onInteract = new UnityEvent();
private bool hasInteracted;
private float nextPromptTime;
private void Update()
{
if (player == null)
{
GameObject playerObject = GameObject.FindGameObjectWithTag("Player");
player = playerObject != null ? playerObject.transform : null;
}
if (player == null || (interactOnce && hasInteracted))
{
return;
}
bool isNear = Vector3.Distance(transform.position, player.position) <= interactionRadius;
if (!isNear)
{
return;
}
if (Time.time >= nextPromptTime)
{
// Repeated short prompts keep the interaction readable while the player stays nearby.
HintManager.Instance?.ShowHint(promptText, promptDuration);
nextPromptTime = Time.time + promptDuration + 0.25f;
}
if (Input.GetKeyDown(KeyCode.E))
{
hasInteracted = true;
onInteract?.Invoke();
}
}
}