using UnityEngine; public class CarPartMountZone : MonoBehaviour, IInteractable { private CarPart targetPart; private Collider zoneCollider; public void Initialize(CarPart part) { targetPart = part; gameObject.layer = part.gameObject.layer; // В точности копируем параметры оригинального коллайдера детали Collider sourceCollider = part.GetComponent(); if (sourceCollider is BoxCollider sourceBox) { BoxCollider box = gameObject.AddComponent(); box.center = sourceBox.center; box.size = sourceBox.size; box.isTrigger = true; zoneCollider = box; } else if (sourceCollider is MeshCollider sourceMesh) { MeshCollider meshCol = gameObject.AddComponent(); meshCol.sharedMesh = sourceMesh.sharedMesh; meshCol.convex = true; meshCol.isTrigger = true; zoneCollider = meshCol; } else { // Универсальный запасной вариант SphereCollider sphere = gameObject.AddComponent(); sphere.radius = 0.6f; sphere.isTrigger = true; zoneCollider = sphere; } } public string GetPrompt() { PlayerHands hands = FindAnyObjectByType(); // Показываем надпись ТОЛЬКО если игрок держит именно эту деталь if (hands != null && hands.IsHolding && hands.CurrentPart == targetPart) { return $"Установить {targetPart.Data.partName} (E)"; } return string.Empty; } public void Interact(GameObject interactor) { PlayerHands hands = interactor.GetComponent(); if (hands == null) hands = interactor.GetComponentInParent(); if (hands != null && hands.IsHolding && hands.CurrentPart == targetPart) { hands.ClearHandAfterInstall(); targetPart.Install(); Destroy(gameObject); // Убираем зону после установки } } // Рисует зеленый контур зоны в окне Scene во время игры private void OnDrawGizmos() { Gizmos.color = Color.green; if (zoneCollider is BoxCollider box) { Gizmos.matrix = transform.localToWorldMatrix; Gizmos.DrawWireCube(box.center, box.size); } else { Gizmos.DrawWireSphere(transform.position, 0.5f); } } }