質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

1177閲覧

パーティクルシステムが終了した瞬間が知りたい

sakuramoti

総合スコア20

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2018/09/23 10:57

編集2018/09/24 16:35

###実現したいこと
Unityでパーティクルシステムの寿命が切れたときを知るにはどうしたらよいでしょうか。

以下のようなソースコードでstartLifetimeを10秒間に設定しています。
パーティクルの表示が10秒後に終わるのですがこれを知るための変数や、関数はありますか?

lang

1public class TapEffect : MonoBehaviour { 2 [SerializeField] ParticleSystem tapEffect; 3 [SerializeField] Camera _camera; 4 5void update(){ 6 if(Input.GetMouseButtonDown(0)){ 7 mousePos = Input.mousePosition; 8 pos = _camera.ScreenToWorldPoint(mousePos + _camera.transform.forward * 10); 9 var ma = tapEffect.main; 10 ma.startLifetime = 10.0f; 11 tapEffect.Emit (1); 12 } 13} 14

初歩的な質問で申し訳ありませんが、ご存知の方いらっしゃいましたらご回答お願いできませんか。

###追記
ご回答ありがとうございます。isEmitting大変参考になりました。
追記した内容ご存知でしたら回答おねがいできないでしょうか。

パーティクルシステムを使ってタップエフェクトを表示するということをやっていました。
参考にしたサイト
エフェクトが消えた瞬間に処理をいれるということがしたいのですが、
tapEffect.Emit(1)で放出したパーティクルが消える瞬間を知る変数や関数はないでしょうか。
また、particle.Play()を使って参考サイトのようなエフェクトを表示するにはどうしたら良いでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

###追記 
リファレンスをぱっと見ましたがそれらしいものはなかったですね。英文をしっかり読めばあるかもしれませんが・・・
ですので自作しました。
考え方でわからないところがあれば聞いて下さい・・・
因みに試していないのでコンパイルエラー吐くかもしれないです。
特にusingあたり

C#

1using System.Collections.Generic; 2using UnityEngine; 3using・・・他のクラス 4 5public class timedeltetime_sample : MonoBehaviour { 6 int i = 0; 7 int j=0; 8 float[] timespan ; 9 // Use this for initialization 10 void Start () { 11 12 } 13 14 // Update is called once per frame 15 void Update () { 16 if(Input.GetMouseButtonDown(0)){ 17 mousePos = Input.mousePosition; 18 pos = _camera.ScreenToWorldPoint(mousePos + _camera.transform.forward * 10); 19 var ma = tapEffect.main; 20 ma.startLifetime = 10.0f; 21 tapEffect.Emit (1); 22 timespan [i] = Time.deltaTime; 23 i++; 24 } 25 26 27 foreach(float x in timespan) 28 { 29 timespan [j] += Time.deltaTime; 30 if(timespan [j] >= 10.0f) { 31 32 ///タップエフェクトが終わったときに何かアクションをおこす。 33 34 ///if j+1一回目のタップエフェクト終了時にアクション~ 回数指定することも可能・・・ 35 } 36 j++; 37 } 38 39 j=0; 40 } 41 42 43} 44

提示されたコードの中身は把握していませんが

isEmittingメンバがそれに当たるかと
パーティクルが発生している場合はtrue,発生していない場合はfalseがかえるみたいです

以下のコードを作成したパーティクルに張り付けると、左クリックが押されるまではfalseがかえり、押されたらパーティクルが発生するのでtrueがコンソールに表示されると思います

C#

1 2using System.Collections; 3using System.Collections.Generic; 4using UnityEngine; 5 6public class particle_controller : MonoBehaviour { 7 8 ParticleSystem particle_system ; 9 10 // Use this for initialization 11 void Start () { 12 13 particle_system = GetComponent<ParticleSystem> (); 14 particle_system.Stop (); 15 16 } 17 18 // Update is called once per frame 19 void Update () { 20 21 if (Input.GetMouseButtonDown(0)) { 22 23 particle_system.Play (); 24 25 } 26 27 Debug.Log (particle_system.isEmitting); 28 29 } 30} 31

投稿2018/09/23 16:24

編集2018/09/25 14:05
flan

総合スコア146

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sakuramoti

2018/09/24 16:32 編集

flan様 ご回答大変ありがとうございます。 isEmittingでパーティクルの再生中、停止中の状態を知ることができるのですね。大変参考になりました。 質問内容で追記したのですが、particle.Emit,ではなくparticle.Playでタップエフェクトを表示する方法をご存知でしたら、教えていただけないでしょうか。 また、Emitで放出したパーティクルが消える瞬間を知る変数があれば教えていただきたいです。
sakuramoti

2018/09/25 23:33

追加のご回答ありがとうございます。参考にして作りたいと思います! 最後まで付き合っていただき、ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問