using UnityEngine; [RequireComponent(typeof(CarController))] public class VehicleInteraction : MonoBehaviour, IInteractable { [Header("Cameras & Setup")] [SerializeField] private GameObject carCamera; // Камера от 3-го лица для авто [SerializeField] private Transform exitPoint; // Точка, где спавнится игрок при выходе (возле левой двери) private CarController carController; private GameObject playerInstance; private bool isPlayerInside = false; private void Awake() { carController = GetComponent(); carCamera.SetActive(false); // Выключаем камеру авто на старте } // Реализация интерфейса IInteractable public void Interact(GameObject interactor) { if (!isPlayerInside) { EnterVehicle(interactor); } } public string GetPrompt() { return "Сесть в машину (E)"; } private void EnterVehicle(GameObject player) { isPlayerInside = true; playerInstance = player; // Отключаем игрока (тело, скрипты, его камеру) playerInstance.SetActive(false); // Включаем камеру машины carCamera.SetActive(true); } private void ExitVehicle() { isPlayerInside = false; // Останавливаем машину при выходе carController.ProcessInput(0f, 0f, true); // Включаем камеру игрока и отключаем камеру машины carCamera.SetActive(false); CharacterController charController = playerInstance.GetComponent(); if (charController != null) { charController.enabled = false; } // 2. Перемещаем игрока playerInstance.transform.position = exitPoint.position; // 3. Включаем CharacterController обратно if (charController != null) { charController.enabled = true; } playerInstance.SetActive(true); playerInstance = null; } private void Update() { if (!isPlayerInside) return; // Если игрок в машине, читаем ввод float vertical = Input.GetAxis("Vertical"); float horizontal = Input.GetAxis("Horizontal"); bool isBraking = Input.GetKey(KeyCode.Space); // Передаем управление в физику машины carController.ProcessInput(vertical, horizontal, isBraking); // Обработка выхода из машины if (Input.GetKeyDown(KeyCode.E)) { ExitVehicle(); } } }