Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unity3d 统一粒子系统问题_Unity3d_Particle System - Fatal编程技术网

Unity3d 统一粒子系统问题

Unity3d 统一粒子系统问题,unity3d,particle-system,Unity3d,Particle System,我正在做一个赛车游戏,希望在你越野时轮胎上会有岩石飞出。 我遇到的问题是粒子系统没有在它应该点火的时候点火。 我用它在地面上触发枪炮,枪炮开火很好 using System.Collections; using System.Collections.Generic; using UnityEngine; public class GroundEffect : MonoBehaviour { public void OnTriggerEnter(Collider other) { i

我正在做一个赛车游戏,希望在你越野时轮胎上会有岩石飞出。 我遇到的问题是粒子系统没有在它应该点火的时候点火。 我用它在地面上触发枪炮,枪炮开火很好

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;
    }
 }
}

Unity的粒子系统有时会有点不稳定,我相信你现在已经发现了。我过去使用的一个解决方案是将麻烦的粒子系统设置为“唤醒时播放”。然后,不要在粒子上使用
Play
Stop
,而是使用粒子的游戏对象,并分别使用
SetActive
true和false。

你的助推带粒子在经过助推时是否在玩?或者没有粒子系统工作?这是奇怪的部分,我的其他粒子系统都工作得很好,我有它们在轮子和排气管上,它们使用相同的“foreach”工作得很好。所以在这个例子中,我试着播放排气粒子,而不是地面粒子,它们以同样的奇怪行为运行。下面有人建议我看看unity是否认为粒子系统正在进行调试,我就是这么做的。它显示它正在播放,但它不是。我把它录了下来,这样你就能看到奇怪的行为。它认为它正在播放,但没有播放,然后当我撞到一个物体时,它就会开始播放。youtube.com/watch?v=8m7ehxw006aa在视频的开头,你可以看到我的漂移粒子系统发射的很好。如果你不想看整件事,岩石会在20秒开始工作。明白了。我在视频中注意到的一点是,不仅仅是当你撞到障碍物时,而且当你撞到障碍物时,你似乎得到了一些空气。当你在地面上驾驶时,
正在工作
调试打印每一帧吗?您的地面是否贴有标签和/或分层,与您进行地面检查的方式是否相符?你的粒子系统工作起来似乎很好,这是一些逻辑,引导到粒子的
开始
。首先,谢谢你的帮助!空气的事情也是如此,所以我把代码改为只检查“if(isOnGround)”,现在如果我去掉这个,粒子系统将不停地播放,但不会出错。我将对上面的内容进行编辑,以显示我当前的代码和一个新的视频,该视频将显示正在发生的事情。我还做了一个默认的部分sys,它仍然有相同的bug。我不能升级,因为我没有15个或更多的声誉,但你帮了我很多。谢谢别担心。我回答问题的主要原因是为了防止其他人也有同样的问题。只要它被检查为答案,就足以让某人理解它是解决方案。
    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();
        }
    }

}