Files
BABA_YAGA/Assets/Third Parties/Opsive/UltimateCharacterController/Demo/Scripts/Car/WheelEffects.cs
Scove 3e39117acc Consolidate third-party plugins into Assets/Plugins
Move and consolidate many third-party plugin files and metadata from various locations (notably Assets/Third Parties/Plugins 1 and scattered Opsive/Photon folders) into a unified Assets/Plugins directory. Includes DOTween, PrimeTween, Native/BackroomsNoise, Sirenix/Odin Inspector, and Opsive UltimateCharacterController/shared libs, plus updates to several .meta files and removal of obsolete installer/legacy files. This standardizes plugin layout and cleans up duplicate/obsolete assets.
2026-06-16 18:41:44 +07:00

96 lines
2.5 KiB
C#

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