using System.Collections; using System.Collections.Generic; using UnityEngine; public class AddTrailer : MonoBehaviour { /// /// Префаб прицепа /// [SerializeField, Tooltip("Prefab trailer / Префаб прицепа")] private GameObject trailerPrefab; /// /// Координата относительно грузовика, в которой появится прицеп /// [SerializeField, Tooltip("Coordinates relative to the truck in which the trailer appears / Координата относительно грузовика, в которой появится прицеп")] private Vector3 trailerInitPosition; /// /// Прицеп /// public GameObject trailer; public WheelCollider[] wc; void Start() { Init(); trailer.transform.position = new Vector3(trailer.transform.position.x, trailer.transform.position.y + 0.3f, trailer.transform.position.z); } public void OnDestroy() { if(Application.isPlaying) Destroy(trailer); else { DestroyImmediate(trailer); } } /// /// Инициализация прицепа /// public void Init() { if(trailerPrefab == null) return; if (trailer == null) { //trailer = Instantiate(trailerPrefab, transform.TransformPoint(trailerInitPosition), transform.rotation); trailer = Instantiate(trailerPrefab, transform.TransformPoint(trailerInitPosition), transform.localRotation); } // установка ConfigurableJoint ConfigurableJoint cjTrailer = trailer.GetComponent(); cjTrailer.connectedBody = GetComponent(); SetIgnoreCollisions(); trailer.transform.rotation = transform.localRotation; ParentOfTrailer parOfTrailer = trailer.GetComponent(); parOfTrailer.PAR = gameObject; parOfTrailer.InitTag(); } /// /// Установка игноров для физики. Коллайдер прицепа не должен взаимодействовать с 1) колайдером авто, 2) с коллайдерами колёс этого авто /// private void SetIgnoreCollisions() { Collider[] trailerCollider = trailer.GetComponentsInChildren(); Collider[] colliders = gameObject.GetComponentsInChildren(); for (int i = 0; i < colliders.Length; i++) { for (int a = 0; a < trailerCollider.Length; a++) { Physics.IgnoreCollision(trailerCollider[a], colliders[i]); } } } void OnDrawGizmos() { // Рисуем точку в которую будет установлен трейлер Gizmos.color = Color.cyan; Gizmos.DrawWireSphere(transform.TransformPoint(trailerInitPosition), 0.05f); } }