You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			83 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C#
		
	
			
		
		
	
	
			83 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C#
		
	
using System.Collections;
 | 
						|
using System.Collections.Generic;
 | 
						|
using UnityEngine;
 | 
						|
 | 
						|
namespace Valve.VR.InteractionSystem.Sample
 | 
						|
{
 | 
						|
    public class WheelDust : MonoBehaviour
 | 
						|
    {
 | 
						|
        private WheelCollider col;
 | 
						|
 | 
						|
        public ParticleSystem p;
 | 
						|
 | 
						|
        public float EmissionMul;
 | 
						|
 | 
						|
        public float velocityMul = 2;
 | 
						|
 | 
						|
        public float maxEmission;
 | 
						|
 | 
						|
        public float minSlip;
 | 
						|
 | 
						|
        [HideInInspector]
 | 
						|
        public float amt;
 | 
						|
 | 
						|
        [HideInInspector]
 | 
						|
        public Vector3 slip;
 | 
						|
 | 
						|
        private float emitTimer;
 | 
						|
 | 
						|
 | 
						|
        private void Start()
 | 
						|
        {
 | 
						|
            col = GetComponent<WheelCollider>();
 | 
						|
            StartCoroutine(emitter());
 | 
						|
        }
 | 
						|
 | 
						|
        private void Update()
 | 
						|
        {
 | 
						|
            slip = Vector3.zero;
 | 
						|
            if (col.isGrounded)
 | 
						|
            {
 | 
						|
                WheelHit hit;
 | 
						|
                col.GetGroundHit(out hit);
 | 
						|
 | 
						|
                slip += Vector3.right * hit.sidewaysSlip;
 | 
						|
                slip += Vector3.forward * -hit.forwardSlip;
 | 
						|
                //print(slip);
 | 
						|
            }
 | 
						|
            amt = slip.magnitude;
 | 
						|
            //print(amt);
 | 
						|
        }
 | 
						|
 | 
						|
        private IEnumerator emitter()
 | 
						|
        {
 | 
						|
            while (true)
 | 
						|
            {
 | 
						|
                while (emitTimer < 1)
 | 
						|
                {
 | 
						|
                    yield return null;
 | 
						|
                    if (amt > minSlip)
 | 
						|
                    {
 | 
						|
                        emitTimer += Mathf.Clamp((EmissionMul * amt), 0.01f, maxEmission);
 | 
						|
                    }
 | 
						|
                }
 | 
						|
                emitTimer = 0;
 | 
						|
                DoEmit();
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        private void DoEmit()
 | 
						|
        {
 | 
						|
            p.transform.rotation = Quaternion.LookRotation(transform.TransformDirection(slip));
 | 
						|
 | 
						|
#if UNITY_2017_1_OR_NEWER
 | 
						|
            ParticleSystem.MainModule mainModule = p.main;
 | 
						|
            mainModule.startSpeed = velocityMul * amt;
 | 
						|
#else
 | 
						|
            p.startSpeed = velocityMul * amt;
 | 
						|
#endif
 | 
						|
 | 
						|
            p.Emit(1);
 | 
						|
        }
 | 
						|
    }
 | 
						|
} |