using UnityEngine; public class PlayerInteractor : MonoBehaviour { [SerializeField] private float interactRange = 3f; [SerializeField] private LayerMask interactableLayer; // Создайте слой "Interactable" в Unity [SerializeField] private KeyCode primaryKey = KeyCode.E; [SerializeField] private KeyCode secondaryKey = KeyCode.R; [Header("References")] [SerializeField] private UIManager uiManager; private void Update() { // Пускаем луч из центра экрана Ray ray = new Ray(transform.position, transform.forward); if (Physics.Raycast(ray, out RaycastHit hit, interactRange, interactableLayer, QueryTriggerInteraction.Collide)) { IInteractable interactable = hit.collider.GetComponentInParent(); if (interactable != null) { if (!string.IsNullOrEmpty(interactable.GetPrompt()) && uiManager!=null) { uiManager.ShowPrompt(interactable.GetPrompt()); } else if (uiManager != null) { uiManager.HidePrompt(); } if (Input.GetKeyDown(primaryKey)) { interactable.Interact(transform.root.gameObject); } if (Input.GetKeyDown(secondaryKey)) { ISecondaryInteractable secondary = hit.collider.GetComponentInParent(); secondary?.SecondaryInteract(transform.root.gameObject); } return; } } if (uiManager != null) { uiManager.HidePrompt(); } } private void OnDisable() { if (uiManager != null) { uiManager.HidePrompt(); } } }