質問: pObject.GetComponent (); particle.gameObject.SetActive(false); } void Update() { if (Input.GetKeyDown ("f") && particle.isStopped) { particle.gameObject.SetActive (true); particle.Simulate (4.0f, true, true); //追記。 particle.Play (); //追記。 StartCoroutine (delay (particleDelayTime, () => { particle.gameObject.SetActive (false); })); //for Debug Debug.Log ("A"); } } IEnumerator delay(float waitTime, UnityAction action) { yield return new WaitForSeconds(waitTime); action(); } ```
回答: [追記]ご指摘いただきました「指定した再生位置でパーティクルを表示する」という内容を踏まえてソースを少し修正しました。 > > Fキーを押した瞬間だけ、パーティクルを表示する。それ以外の時はパーティクルは非表示。 > > > それだけでよければ以下コードでいけます。適当なオブジェクトに以下コードをアタッチしてインスペクタ上から該当パーティクルを指定してください。 ※パーティクルが設定されたオブジェクトに以下スクリプトをアタッチしても動かないと思うので、パーティクルが指定されたオブジェクト以外にアタッチしてください。 ### 実装のポイント パーティクルシステムをplay / stopしなくても、オブジェクトを非表示にすると勝手に止まります。その状態で再表示すると勝手に始まります。それを利用した実装になります。 ``` using UnityEngine; using System.Collections; using UnityEngine.Events; public class particleForFkey : MonoBehaviour { //他で使うかもしれないのでParticleSystemを指定してますが以下コードで問題なければGameObjectに書き直してもいいです。 [SerializeField] ParticleSystem pObject; //ここでパーティクルが停止される時間を指定 float particleDelayTime = .2f; void Awake() { pObject.gameObject.SetActive(false); } void Update() { if (Input.GetKeyDown(KeyCode.F) && pObject.isStopped){ pObject.gameObject.SetActive(true); pObject.Simulate(4.0f, true, false); //追記 pObject.Play(); //追記 StartCoroutine(delay(particleDelayTime,()=>{ pObject.gameObject.SetActive(false); })); //for Debug Debug.Log ("A"); } } IEnumerator delay(float waitTime,UnityAction action) { yield return new WaitForSeconds(waitTime); action(); } } ```