回答編集履歴

11 誤字を修正

IShix

IShix score 1487

2016/09/29 02:00  投稿

[追記]
指定した再生位置でパーティクルを表示するという内容を見落としていただのでソースを少し修正しています。
[追記]ご指摘いただきました「指定した再生位置でパーティクルを表示する」という内容を踏まえてソースを少し修正しました。
> Fキーを押した瞬間だけ、パーティクルを表示する。それ以外の時はパーティクルは非表示。
それだけでよければ以下コードでいけます。適当なオブジェクトに以下コードをアタッチしてインスペクタ上から該当パーティクルを指定してください。
※パーティクルが設定されたオブジェクトに以下スクリプトをアタッチしても動かないと思うので、パーティクルが指定されたオブジェクト以外にアタッチしてください。
###実装のポイント
パーティクルシステムをplay / stopしなくても、オブジェクトを非表示にすると勝手に止まります。その状態で再表示すると勝手に始まります。それを利用した実装になります。
```C#
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();
   }
}
```
10 ソースを修正

IShix

IShix score 1487

2016/09/29 01:59  投稿

[追記]
指定した再生位置でパーティクルを表示するという内容を見落としていただのでソースを少し修正しています。
> Fキーを押した瞬間だけ、パーティクルを表示する。それ以外の時はパーティクルは非表示。
それだけでよければ以下コードでいけます。適当なオブジェクトに以下コードをアタッチしてインスペクタ上から該当パーティクルを指定してください。
※パーティクルが設定されたオブジェクトに以下スクリプトをアタッチしても動かないと思うので、パーティクルが指定されたオブジェクト以外にアタッチしてください。
###実装のポイント
パーティクルシステムをplay / stopしなくても、オブジェクトを非表示にすると勝手に止まります。その状態で再表示すると勝手に始まります。それを利用した実装になります。
```C#
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();
           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();
   }
}
```
9 ソースを修正

IShix

IShix score 1487

2016/09/29 01:54  投稿

[追記]
指定した再生位置でパーティクルを表示するという内容を見落としていただのでソースを少し修正しています。
> Fキーを押した瞬間だけ、パーティクルを表示する。それ以外の時はパーティクルは非表示。
それだけでよければ以下コードでいけます。適当なオブジェクトに以下コードをアタッチしてインスペクタ上から該当パーティクルを指定してください。
※パーティクルが設定されたオブジェクトに以下スクリプトをアタッチしても動かないと思うので、パーティクルが指定されたオブジェクト以外にアタッチしてください。
###実装のポイント
パーティクルシステムをplay / stopしなくても、オブジェクトを非表示にすると勝手に止まります。その状態で再表示すると勝手に始まります。それを利用した実装になります。
```C#
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("f") && pObject.isStopped){
       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();
   }
}
```
8 スクリプトを訂正

IShix

IShix score 1487

2016/09/29 01:40  投稿

[追記]  
指定した再生位置でパーティクルを表示するという内容を見落としていただのでソースを少し修正しています。  
 
> Fキーを押した瞬間だけ、パーティクルを表示する。それ以外の時はパーティクルは非表示。
それだけでよければ以下コードでいけます。適当なオブジェクトに以下コードをアタッチしてインスペクタ上から該当パーティクルを指定してください。
※パーティクルが設定されたオブジェクトに以下スクリプトをアタッチしても動かないと思うので、パーティクルが指定されたオブジェクト以外にアタッチしてください。
###実装のポイント
パーティクルシステムをplay / stopしなくても、オブジェクトを非表示にすると勝手に止まります。その状態で再表示すると勝手に始まります。それを利用した実装になります。
```C#
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("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();
   }
}
```
7 誤字を修正

IShix

IShix score 1487

2016/09/28 01:06  投稿

> Fキーを押した瞬間だけ、パーティクルを表示する。それ以外の時はパーティクルは非表示。
それだけでよければ以下コードでいけます。適当なオブジェクトに以下コードをアタッチしてインスペクタ上から該当パーティクルを指定してください。
※パーティクルが設定されたオブジェクトに以下スクリプトをアタッチしても動かないと思うので、パーティクルが指定されたオブジェクト以外に設定してください。
※パーティクルが設定されたオブジェクトに以下スクリプトをアタッチしても動かないと思うので、パーティクルが指定されたオブジェクト以外にアタッチしてください。
###実装のポイント
パーティクルシステムをplay / stopしなくても、オブジェクトを非表示にすると勝手に止まります。その状態で再表示すると勝手に始まります。それを利用した実装になります。
```C#
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("f") && pObject.isStopped){
           pObject.gameObject.SetActive(true);
           StartCoroutine(delay(particleDelayTime,()=>{
               pObject.gameObject.SetActive(false);
           }));
           //for Debug
           Debug.Log ("A");
       }
   }
   IEnumerator delay(float waitTime,UnityAction action)
   {
       yield return new WaitForSeconds(waitTime);
       action();
   }
}
```
6 注意を追加

IShix

IShix score 1487

2016/09/28 01:05  投稿

> Fキーを押した瞬間だけ、パーティクルを表示する。それ以外の時はパーティクルは非表示。
それだけでよければ以下コードでいけます。適当なオブジェクトに以下コードをアタッチしてインスペクタ上から該当パーティクルを指定してください。
 
※パーティクルが設定されたオブジェクトに以下スクリプトをアタッチしても動かないと思うので、パーティクルが指定されたオブジェクト以外に設定してください。  
 
###実装のポイント
パーティクルシステムをplay / stopしなくても、オブジェクトを非表示にすると勝手に止まります。その状態で再表示すると勝手に始まります。それを利用した実装になります。
```C#
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("f") && pObject.isStopped){
           pObject.gameObject.SetActive(true);
           StartCoroutine(delay(particleDelayTime,()=>{
               pObject.gameObject.SetActive(false);
           }));
           //for Debug
           Debug.Log ("A");
       }
   }
   IEnumerator delay(float waitTime,UnityAction action)
   {
       yield return new WaitForSeconds(waitTime);
       action();
   }
}
```
5 ソースの修正

IShix

IShix score 1487

2016/09/28 01:02  投稿

> Fキーを押した瞬間だけ、パーティクルを表示する。それ以外の時はパーティクルは非表示。
それだけでよければ以下コードでいけます。適当なオブジェクトに以下コードをアタッチしてインスペクタ上から該当パーティクルを指定してください。
###実装のポイント
パーティクルシステムをplay / stopしなくても、オブジェクトを非表示にすると勝手に止まります。その状態で再表示すると勝手に始まります。それを利用した実装になります。
```C#
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("f") && pObject.isStopped){
           pObject.gameObject.SetActive(true);
           StartCoroutine(delayTime(particleDelayTime,()=>{
           StartCoroutine(delay(particleDelayTime,()=>{
               pObject.gameObject.SetActive(false);
           }));
           //for Debug
           Debug.Log ("A");
       }
   }
   IEnumerator delayTime(float waitTime,UnityAction action)
   IEnumerator delay(float waitTime,UnityAction action)
   {
       yield return new WaitForSeconds(waitTime);
       action();
   }
}
```
4 表現を修正

IShix

IShix score 1487

2016/09/28 00:52  投稿

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

IShix

IShix score 1487

2016/09/28 00:50  投稿

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

IShix

IShix score 1487

2016/09/28 00:48  投稿

> Fキーを押した瞬間だけ、パーティクルを表示する。それ以外の時はパーティクルは非表示。
それだけでよければ以下コードでいけます。適当なオブジェクトに以下コードをアタッチしてインスペクタ上から該当パーティクルを指定してください。
 
###実装のポイント  
パーティクルシステムをplay / stopしなくても、オブジェクトを非表示にすると勝手に止まります。その状態で再表示すると勝手に始まります。それを利用した実装になります。  
```C#
using UnityEngine;
using System.Collections;
using UnityEngine.Events;
public class particleForF : MonoBehaviour {
   //他で使うかもしれないのでParticleSystemを指定してますが以下コードで問題なければGameObjectに書き直してもいいです。
   [SerializeField]
   ParticleSystem pObject;
   //ここでパーティクルが表示される時間を指定
   float particleDelayTime = .2f;
   void Awake()
   {
       pObject.gameObject.SetActive(false);
   }
   void Update()
   {
       if (Input.GetKeyDown("f") && pObject.isStopped){
           pObject.gameObject.SetActive(true);
           StartCoroutine(delayTime(particleDelayTime,()=>{
               pObject.gameObject.SetActive(false);
           }));
           //for Debug
           Debug.Log ("A");
       }
   }
   IEnumerator delayTime(float waitTime,UnityAction action)
   {
       yield return new WaitForSeconds(waitTime);
       action();
   }
}
```
1 引用がおかしかったので修正

IShix

IShix score 1487

2016/09/28 00:43  投稿

書いてみました。
> Fキーを押した瞬間だけ、パーティクルを表示する。それ以外の時はパーティクルは非表示。
> Fキーを押した瞬間だけ、パーティクルを表示する。それ以外の時はパーティクルは非表示。  
それだけでよければ以下コードでいけます。適当なオブジェクトに以下コードをアタッチしてインスペクタ上から該当パーティクルを指定してください。
```C#
using UnityEngine;
using System.Collections;
using UnityEngine.Events;
public class particleForF : MonoBehaviour {
   //他で使うかもしれないのでParticleSystemを指定してますが以下コードで問題なければGameObjectに書き直してもいいです。
   [SerializeField]
   ParticleSystem pObject;
   //ここでパーティクルが表示される時間を指定
   float particleDelayTime = .2f;
   void Awake()
   {
       pObject.gameObject.SetActive(false);
   }
   void Update()
   {
       if (Input.GetKeyDown("f") && pObject.isStopped){
           pObject.gameObject.SetActive(true);
           StartCoroutine(delayTime(particleDelayTime,()=>{
               pObject.gameObject.SetActive(false);
           }));
           //for Debug
           Debug.Log ("A");
       }
   }
   IEnumerator delayTime(float waitTime,UnityAction action)
   {
       yield return new WaitForSeconds(waitTime);
       action();
   }
}
```

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る