using System.Collections; using UnityEngine; namespace UnityStandardAssets.Vehicles.Car { [RequireComponent(typeof(AudioSource))] public class WheelEffects : MonoBehaviour { public Transform SkidTrailPrefab; public static Transform skidTrailsDetachedParent; public ParticleSystem skidParticles; private AudioSource m_AudioSource; private Transform m_SkidTrail; private WheelCollider m_WheelCollider; public bool skidding { get; private set; } public bool PlayingAudio { get; private set; } private void Start() { skidParticles = base.transform.root.GetComponentInChildren(); if (skidParticles == null) { Debug.LogWarning(" no particle system found on car to generate smoke particles", base.gameObject); } else { skidParticles.Stop(); } m_WheelCollider = GetComponent(); m_AudioSource = GetComponent(); PlayingAudio = false; if (skidTrailsDetachedParent == null) { skidTrailsDetachedParent = new GameObject("Skid Trails - Detached").transform; } } public void EmitTyreSmoke() { skidParticles.transform.position = base.transform.position - base.transform.up * m_WheelCollider.radius; skidParticles.Emit(1); if (!skidding) { StartCoroutine(StartSkidTrail()); } } public void PlayAudio() { m_AudioSource.Play(); PlayingAudio = true; } public void StopAudio() { m_AudioSource.Stop(); PlayingAudio = false; } public IEnumerator StartSkidTrail() { skidding = true; m_SkidTrail = Object.Instantiate(SkidTrailPrefab); while (m_SkidTrail == null) { yield return null; } m_SkidTrail.parent = base.transform; m_SkidTrail.localPosition = -Vector3.up * m_WheelCollider.radius; } public void EndSkidTrail() { if (skidding) { skidding = false; m_SkidTrail.parent = skidTrailsDetachedParent; Object.Destroy(m_SkidTrail.gameObject, 10f); } } } }