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