I'm making a racing game and want there to be rocks that fly off the tires when you go offroad. The problem I'm having is with the particle system not firing when it should. I use this for the ground to trigger a bool and the bool fires fine.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GroundEffect : MonoBehaviour
{
public void OnTriggerEnter(Collider other)
{
if (other.gameObject.CompareTag("Player"))
{
other.transform.root.GetComponentInChildren<KartController>().isOnGround = true;
}
}
public void OnTriggerExit(Collider other)
{
if (other.gameObject.CompareTag("Player"))
{
other.transform.root.GetComponentInChildren<KartController>().isOnGround = false;
}
}
}
The weird thing is, the debug logs fire but the particle system doesn't. I've tried putting it all under the ground script, I've put it under the "isOnGround" under the "!isOnBoostStrip", and even though the acceleration swap works the particles don't I tried having no "p.Stop();" and just have it not loop and still no luck, although when I did that it did a weird thing where it would fire but only when I touched an obstacle.
Any help is most appreciated, I'm not sure where I'm going wrong.
Edit: In this video, I show the plane settings and the error with my current rocks system and with a default particle system. It also only checks if "IsOnGround" is true which seems to work just fine. Here is the video - https://www.youtube.com/watch?v=P6TfacNZZxE Here's the code I'm using in the video.
void Update()
{
//Follow Collider
transform.position = sphere.transform.position - new Vector3(0, 0.4f, 0);
if (!isOnBoostStrip)
{
//Accelerate
if (Input.GetButton("Fire1"))
{
speed = curAccel;
}
//Reverse
if (Input.GetButton("Fire2"))
{
speed = -curAccel / 3;
}
if (!isOnGround)
{
curAccel = zAcceleration;
}
if (isOnGround)
{
curAccel = zAcceleration / 2;
}
}
else if (isOnBoostStrip)
{
speed = zAcceleration * boostStripSpeed;
foreach (ParticleSystem p in exhaustParticles)
{
if (!isDrifting)
{
c = turboColors[0];
}
var pmain = p.main;
pmain.startColor = c;
p.Play();
}
}
//Rocks
if (isOnGround)
{
foreach (ParticleSystem p in groundParticles)
{
Debug.Log(isOnGround);
p.Play();
}
}
}
isWorkingdebug printing every frame? Is your ground tagged and/or layered properly to how you are doing your ground check? Your particle systems seem fine as they work, it is some logic leading up to and looping through on theStartof the particles. - TEEBQNE