衝突判定によるカウントについて

CINEMA 4DおよびBodyPaint 3Dに関する一般的な議論や情報交換をするフォーラムです。

衝突判定によるカウントについて

投稿記事by yuu » 日 2 20, 2011 11:19 pm

二つのオブジェクトが接触した数をかずえたいのですが、うまくいきません。
定数に、値を一足していって、合計を表示したいのですが、方法があれば教えてください。
yuu
 
記事: 76
登録日時: 月 6 21, 2010 8:44 am

Re: 衝突判定によるカウントについて

投稿記事by miyata » 月 2 21, 2011 6:43 pm

あまりスマートなやり方ではありませんが、次のような方法でできると思います。
まずは、どこかにユーザーデータを作り、数字を記録する設定にします。
次に、衝突判定ノードで衝突判定が行われたかどうかを判定するようにします。
衝突判定を比較ノードの入力1につなげ、さらに、「値の記録」ノードの入力にもつなげます。
値の記録は、データタイプを実数、値を記録する回数を2、古さを1にします。
これで、値の記録ノードは、前のフレームのブール値を書き出します。

比較ノードでは、前後のフレームで、衝突判定のブール値(出力値は、当たっているときは1、当たっていないときが0)を比べ、
前のフレームより大きい時(比較演算子は「>」)、ブール値を出力して、それを現在のユーザーデータに加算する設定にします。
これで、衝突判定のカウント可能です。

注意が必要なのが、ユーザーデータの値は再生を繰り返したり、ビューで何度も衝突させるとドンドン値が増えるので、
計算させる前にかならず0に戻す必要があるので、注意してください。

1.png
1.png (28.65 KiB) 表示数: 5584 回


R12で作成したサンプルファイルも添付しました。
添付ファイル
count.c4d.zip
サンプルファイル
(13.34 KiB) ダウンロード数: 213 回
miyata
 
記事: 493
登録日時: 火 12 29, 2009 4:25 pm

Re: 衝突判定によるカウントについて

投稿記事by miyata » 月 2 21, 2011 7:03 pm

フレーム0でカウントが0になる設定をしたものもアップしました。
添付ファイル
count2.c4d.zip
(19.07 KiB) ダウンロード数: 221 回
miyata
 
記事: 493
登録日時: 火 12 29, 2009 4:25 pm

Re: 衝突判定によるカウントについて

投稿記事by yuu » 月 2 21, 2011 9:05 pm

ありがとうございます。解決できました。
ノードの特性を勉強して、応用していきたいと思います。
yuu
 
記事: 76
登録日時: 月 6 21, 2010 8:44 am

Re: 衝突判定によるカウントについて

投稿記事by tofuji » 火 4 05, 2011 12:25 am

 COFFEEノードを使って衝突判定の回数をカウントするXPressoをアップロードしました。
http://www2.11moon.com/sample_files/201 ... lision.zip


 構造は宮田さんが作ったものとほぼ同じですが、衝突回数を記憶する場所として、ユーザーデータの代わりにCOFFEE のグローバル変数を使っています。グローバル変数を使うと、COFFEEノードやXPressoタグを別のシーンにコピー/ペーストした時に、そのまま動くという利点があります。ユーザーデータを使った場合、ペースト先でもユーザーデータを新規に作り、ノードのリンクを更新する必要があります。

 ただし、グローバル変数は初期化が必要なので、その点は面倒です。初期状態では全ての値が「NULL」です。したがってサンプルファイルでは、衝突状態の値が「NULL」の時に初期化しています。

 しかし、「NULL」と「0」は同じ値とみなされるので、プログラム実行時も非衝突の値を「0」のまま扱うと毎回初期化がかかってしまいます。そこで、衝突状態の値に「10」を足し、「10なら非衝突」、「11なら衝突」として扱っています。
---

Toshio Fuji<gtofuji@gmail.com>

掲示板に書いたサンプルのまとめサイト
http://www2.11moon.com/index_as.html
tofuji
 
記事: 803
登録日時: 木 3 10, 2011 10:41 am
お住まい: 東京都渋谷区

Re: 衝突判定によるカウントについて

投稿記事by yuu » 金 4 15, 2011 11:43 pm

ありがとうございます。COFFEEの特性を理解していきたいと思います。

ひとつ、聞きたいのですが、カウントと同時に、効果音を鳴らすようにしてるのですが、
長めの音ですと、衝突が離れると音が最後まで鳴らずに途中で、止まってしまいます。
衝突が離れても最後まで、効果音を鳴らす方法がありましたら、教えてください。
yuu
 
記事: 76
登録日時: 月 6 21, 2010 8:44 am

Re: 衝突判定によるカウントについて

投稿記事by tofuji » 土 4 16, 2011 2:49 am

 投稿を読んでも、どのように効果音を制御しているのかわかりません。明快な文章で説明するか、図やファイルを添付するようにして下さい。

 とりあえず、マニュアルの「サウンド」ノードの項にあるサンプルを元にして作ったのが以下のサンプルです。
http://www2.11moon.com/sample_files/201 ... sion_2.zip

 このサンプルでは、「サウンド」ノードから「再生時間」を取得し、その時間をカウントダウンタイマーで数えています。カウントダウンタイマーには、グローバル変数「timer」を使っています。

 そして、衝突が発生するとtimerの値が再生時間に設定され、サウンドノードの「再生」がONになります。そして、timerの値が0になると、サウンドノードの再生がOFFになります。


 ただしこの構成では、サウンドが停止する前に再度衝突が発生した場合にサウンドをリセットできません。そこで、サウンドを再生する前に一度停止させるようにしたのが次のサンプルです。
http://www2.11moon.com/sample_files/201 ... sion_3.zip

 このサンプルでは、衝突が発生したフレームでグローバル変数「flg_1」をONにし、サウンドの再生をOFF にしています。そして、次のフレームでサウンドの再生をONにし、その後「flg_1」をOFF にしています。

 通常XPressoでは、ノードは1フレームにつき一つの値しか出力できません。それでこのような面倒な操作をしています。とは言っても、「timer」、「flg」両方とも非常によく使う手法なので憶えて損はありません。
最後に編集したユーザー tofuji [ 火 6 07, 2011 10:30 pm ], 累計 1 回
---

Toshio Fuji<gtofuji@gmail.com>

掲示板に書いたサンプルのまとめサイト
http://www2.11moon.com/index_as.html
tofuji
 
記事: 803
登録日時: 木 3 10, 2011 10:41 am
お住まい: 東京都渋谷区

Re: 衝突判定によるカウントについて

投稿記事by yuu » 土 4 16, 2011 1:10 pm

ありがとうございます。衝突時に、音を最後まで鳴らす方法を理解できました。
COFFEEのスクリプトにも、詳しく説明されていて、
グローバル変数「timer」、「flg」などの使い方を応用していきたいです。

これからは、図を添付していきたいと思います。
今後も、よろしくお願いします。
yuu
 
記事: 76
登録日時: 月 6 21, 2010 8:44 am


Return to ユーザフォーラム

オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[3人]