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);
}
}