2017-11-19 20 views
0

私はスクリプトを持っています。CollisionEnter2Dにパーティクルがオブジェクトから放出され、ゲームが一時停止します。パーティクルも止まります。しかし、私は粒子を一時停止させたくありません。ゲームが一時停止していても、それらをプレイしてほしいです。これどうやってするの?ここでTime.timescaleでパーティクルを一時停止しない/影響しない

はスクリプトです:

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

答えて

1

昨日、ParticleSystem.Simulateが更新機能で使用されましたが、これは高価でした。それは多くのゲームを減速させた。 ユニティ2017.1から始まっ

は、新しいプロパティParticleSystem.MainModule.useUnscaledTimeは、それはあなたが好む行動だ場合0Time.timescaleを設定すると、粒子に影響を与えないようにこの問題を解決するために追加されました。

簡単な例:

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

//Use Unscaled Time 
main.useUnscaledTime = true; 

あなたがコードを介して、しかし、エディタを使用して、それを変更したくない場合は、それがデルタタイムドロップダウンオプションです。 、あなたの特定の問題について

enter image description here


以下のものにあなたの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(); 
    } 
} 
0

あなたのタイトルは少し混乱しています。 "Time.timeScale = 0はパーティクルを一時停止しない"と言うと、timeScale = 0に設定したときにパーティクルを一時停止したくないという質問があるので、パーティクルを再生したいと仮定していますあなたはパーティクルシステムは、タイムスケールを無視させるには、タイムスケール= 0 を設定したにも関わらず、あなたはすぐに再生やパーティクルシステム(複数可)を有効にした後

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

を使用しています。 https://docs.unity3d.com/ScriptReference/ParticleSystem.Simulate.html

関連する問題