using UnityEngine; public class PlayerInteractor : MonoBehaviour { [Header("Настройки луча")] [SerializeField] private float interactRange = 3f; [SerializeField] private LayerMask interactableLayer; [Header("Клавиши управления")] [SerializeField] private KeyCode primaryKey = KeyCode.E; // Работа с деталью (открыть/взять) [SerializeField] private KeyCode secondaryKey = KeyCode.R; // Снять деталь [SerializeField] private KeyCode enterVehicleKey = KeyCode.F; // Сесть в машину [Header("Ссылки")] [SerializeField] private UIManager uiManager; private void OnDisable() { if (uiManager != null) uiManager.HidePrompt(); } 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(); // Ищем скрипт автомобиля в родительских объектах VehicleInteraction vehicle = hit.collider.GetComponentInParent(); if (interactable != null || vehicle != null) { // Формируем комбинированную подсказку string prompt = ""; if (vehicle != null && !vehicle.isPlayerInside) { prompt += "[F] Сесть в авто "; } if (interactable != null) { string partPrompt = interactable.GetPrompt(); if (!string.IsNullOrEmpty(partPrompt)) { prompt += partPrompt; } } if (!string.IsNullOrEmpty(prompt) && uiManager != null) { uiManager.ShowPrompt(prompt); } // 1. Посадка в авто на F if (Input.GetKeyDown(enterVehicleKey) && vehicle != null) { vehicle.Interact(transform.root.gameObject); if (uiManager != null) uiManager.HidePrompt(); return; } // 2. Основное действие с деталью на E (Открыть/Закрыть) if (Input.GetKeyDown(primaryKey) && interactable != null) { interactable.Interact(transform.root.gameObject); } // 3. Вторичное действие с деталью на R (Снять в руки) if (Input.GetKeyDown(secondaryKey)) { ISecondaryInteractable secondary = hit.collider.GetComponentInParent(); secondary?.SecondaryInteract(transform.root.gameObject); } return; } } if (uiManager != null) { uiManager.HidePrompt(); } } }