WheelEffects.cs 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. using System.Collections;
  2. using UnityEngine;
  3. namespace UnityStandardAssets.Vehicles.Car
  4. {
  5. [RequireComponent(typeof (AudioSource))]
  6. public class WheelEffects : MonoBehaviour
  7. {
  8. public Transform SkidTrailPrefab;
  9. public static Transform skidTrailsDetachedParent;
  10. public ParticleSystem skidParticles;
  11. public bool skidding { get; private set; }
  12. public bool PlayingAudio { get; private set; }
  13. private AudioSource m_AudioSource;
  14. private Transform m_SkidTrail;
  15. private WheelCollider m_WheelCollider;
  16. private void Start()
  17. {
  18. skidParticles = transform.root.GetComponentInChildren<ParticleSystem>();
  19. if (skidParticles == null)
  20. {
  21. Debug.LogWarning(" no particle system found on car to generate smoke particles", gameObject);
  22. }
  23. else
  24. {
  25. skidParticles.Stop();
  26. }
  27. m_WheelCollider = GetComponent<WheelCollider>();
  28. m_AudioSource = GetComponent<AudioSource>();
  29. PlayingAudio = false;
  30. if (skidTrailsDetachedParent == null)
  31. {
  32. skidTrailsDetachedParent = new GameObject("Skid Trails - Detached").transform;
  33. }
  34. }
  35. public void EmitTyreSmoke()
  36. {
  37. skidParticles.transform.position = transform.position - transform.up*m_WheelCollider.radius;
  38. skidParticles.Emit(1);
  39. if (!skidding)
  40. {
  41. StartCoroutine(StartSkidTrail());
  42. }
  43. }
  44. public void PlayAudio()
  45. {
  46. m_AudioSource.Play();
  47. PlayingAudio = true;
  48. }
  49. public void StopAudio()
  50. {
  51. m_AudioSource.Stop();
  52. PlayingAudio = false;
  53. }
  54. public IEnumerator StartSkidTrail()
  55. {
  56. skidding = true;
  57. m_SkidTrail = Instantiate(SkidTrailPrefab);
  58. while (m_SkidTrail == null)
  59. {
  60. yield return null;
  61. }
  62. m_SkidTrail.parent = transform;
  63. m_SkidTrail.localPosition = -Vector3.up*m_WheelCollider.radius;
  64. }
  65. public void EndSkidTrail()
  66. {
  67. if (!skidding)
  68. {
  69. return;
  70. }
  71. skidding = false;
  72. m_SkidTrail.parent = skidTrailsDetachedParent;
  73. Destroy(m_SkidTrail.gameObject, 10);
  74. }
  75. }
  76. }