C# Don';t使用Time.timescale暂停/影响粒子

C# Don';t使用Time.timescale暂停/影响粒子,c#,unity3d,C#,Unity3d,我有一个脚本,其中在CollisionEnter2D上,粒子从一个对象发射,游戏暂停。粒子也停止了。但我不想暂停粒子。我希望他们即使在游戏暂停时也能玩。我该怎么做 下面是一个脚本: using UnityEngine; public class MovingPlayer : MonoBehaviour { public float playerSpeed; public float maxPos = 2.7f; Vector3 position; publi

我有一个脚本,其中在
CollisionEnter2D
上,粒子从一个对象发射,游戏暂停。粒子也停止了。但我不想暂停粒子。我希望他们即使在游戏暂停时也能玩。我该怎么做

下面是一个脚本:

using UnityEngine;

public class MovingPlayer : MonoBehaviour
{

    public float playerSpeed;
    public float maxPos = 2.7f;

    Vector3 position;
    public uiManager ui;

    Rigidbody2D rb;

    public GameObject particleSystemPrefab;

    void Awake ()
    {
        rb = GetComponent<Rigidbody2D>();
    }

    // Use this for initialization
    void Start ()
    {
        position = transform.position;
    }

    ......

    void OnCollisionEnter2D (Collision2D col)
    {
        if (col.gameObject.tag == "CubeObstacle") {
            foreach(ContactPoint2D contact in col.contacts)
            {
                Instantiate(particleSystemPrefab, contact.point, Quaternion.identity);
            }
            Time.timeScale = 0;
            ui.gameOverActivated();
            am.playerSound.Stop();
            PlayerPrefs.SetInt("score", score);
            PlayerPrefs.Save();
        }
    }
}
使用UnityEngine;
公共类移动玩家:单一行为
{
公众花车运动员速度;
公共浮点数maxPos=2.7f;
矢量3位置;
公共用户界面;
刚体2d rb;
公共游戏对象particleSystemPrefab;
无效唤醒()
{
rb=GetComponent();
}
//用于初始化
无效开始()
{
位置=变换位置;
}
......
空心OnCollisionInter2D(碰撞2D列)
{
如果(col.gameObject.tag==“立方体障碍”){
foreach(col.contacts中的ContactPoint2D触点)
{
实例化(particleSystemPrefab、contact.point、Quaternion.identity);
}
Time.timeScale=0;
ui.gameOverActivated();
am.playerSound.Stop();
PlayerPrefs.SetInt(“分数”,分数);
PlayerPrefs.Save();
}
}
}

你的标题有点让人困惑。你说“Time.timeScale=0不要暂停粒子”,但你的问题是当你设置timeScale=0时你不想暂停粒子。。。因此,我假设您希望播放粒子,即使您已将timeScale设置为0。 要使粒子系统忽略时间刻度,请使用

particleSystem.Simulate(Time.unscaledDeltaTime,true,false)

播放或启用粒子系统后立即播放。

在过去,更新功能中使用了ParticleSystem.Simulate
,但这很昂贵。它减慢了许多比赛的速度

从Unity 2017.1开始,添加了一个新属性来解决此问题,以便将
Time.timescale
设置为
0
不会影响粒子(如果这是您喜欢的行为)

简单的例子:

ParticleSystem m_System = GetComponent<ParticleSystem>();
ParticleSystem.MainModule main = m_System.main;

//Use Unscaled Time
main.useUnscaledTime = true;
void OnCollisionEnter2D(Collision2D col)
{
    if (col.gameObject.tag == "CubeObstacle")
    {
        foreach (ContactPoint2D contact in col.contacts)
        {

            GameObject obj = Instantiate(particleSystemPrefab, contact.point, Quaternion.identity);
            ParticleSystem m_System = obj.GetComponent<ParticleSystem>();
            ParticleSystem.MainModule main = m_System.main;
            //Use Unscaled Time
            main.useUnscaledTime = true;

        }
        Time.timeScale = 0;
        ui.gameOverActivated();
        am.playerSound.Stop();
        PlayerPrefs.SetInt("score", score);
        PlayerPrefs.Save();
    }
}