![](/img/trans.png)
[英]Is it possible to create a pause other than adjusting the Unity Time.timescale?
[英]Don't pause/affect particles with Time.timescale
我有一个脚本,其中在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();
}
}
}
过去,Update函数中使用了ParticleSystem.Simulate
,但这很昂贵。 它减慢了许多游戏的速度。
从Unity 2017.1开始,添加了新的属性ParticleSystem.MainModule.useUnscaledTime
来解决此问题,因此,如果您愿意,将Time.timescale
设置为0
不会影响粒子。
简单的例子:
ParticleSystem m_System = GetComponent<ParticleSystem>();
ParticleSystem.MainModule main = m_System.main;
//Use Unscaled Time
main.useUnscaledTime = true;
如果您不想通过代码而是通过编辑器进行更改,则可以使用“ 增量时间”下拉选项。 更改它扩展到未调整 :
对于您的特定问题,请将OnCollisionEnter2D
函数更改为以下内容:
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();
}
}
您的标题有点混乱。 您说“ Time.timeScale = 0不要暂停粒子”,那么您的问题是,当您设置timeScale = 0时您不想暂停粒子...所以我假设您要播放粒子即使已将timeScale设置为0,也要使粒子系统忽略timeScale,请使用
particleSystem.Simulate(Time.unscaledDeltaTime, true, false);
播放或启用粒子系统后立即。 https://docs.unity3d.com/ScriptReference/ParticleSystem.Simulate.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.