« XPresso、zを無視(2D:XY)した「線分の交点」のC.O.F.F.E.E.ノード | トップページ | ポリゴンオブジェクトの指定したポイントから、エッジで繋がっている隣のポイントを取得するノード »

近づくと開くドアをXPresso…自動ドア?ウォークスルー時の自動開閉?

オブジェクト(カメラも含めて)が、近づくと扉を開くようにするには?
単純に考えると、ドアとオブジェクトの距離を比較して、ある範囲内に入ったらドアが開き始めて、更に近づくと完全に開ききると言った具合だろう。

では、モデルを…
XPressoでの自動でドアの開閉なので、ドアモデルは単純モデルで作ります。

Openthedoor_01

オブジェクトの構成は、こんな感じ…

Openthedoor_02

では、扉の開閉をユーザデータで制御します。パーセンテージ(0%:閉じる~100%:全開)で開き具合を操作できるようにXPressoを作ります。

Openthedoor_04

ユーザデータは、
「開閉:パーセント」開き具合。
「閉じる:実数」閉じているときのドアの角度H
「開く:実数」開いたときのドアの角度H

計算式は、
(全開角度 - 閉じている角度) × 開閉度合い + 閉じている角度
ま、今回は閉じている角度は0度なので必要ないのですが、0度以外の場合も考慮しました。

Openthedoor_03

見たままのXPressoなので説明はしません。
では、「開閉」で操作してみよう。

Openthedoor_05

これで、ドアの開閉を0.0~1.0(0.0%~100%)の数値で制御ができるようになりました。

次は、オブジェクトが近づいたらドアを開きましょう。

では、ユーザーデータを追加します。
対象オブジェクトと、開き始め距離、全開距離の3つ。

距離とドアの開き具合の式
(開き始め距離 - オブジェクトの距離) ÷(開き始め距離 - 全開距離)
こんな具合だね。

開き始めと全開距離、オブジェクトの位置がわかりやすくする為、円形スプラインを使ってみます。対象オブジェクトは球体にしました。

Openthedoor_06

赤いエリアに入ったらドアは開いていき、青いエリアに入ったときには開ききります。

では、距離でドアの開閉の制御XPressoです。

Openthedoor_07

このXPressoも単純なので説明の必要が無いでしょう。
ドアのユーザデータからドアの開閉度合いを計算してドアのユーザデータの開閉に入力しています。
では、対象オブジェクトを動かして見ます。

Openthedoor_08

エリア内に入ったらドアが開いているのが確認できました。
ウォークスルーの場合は球体をカメラに変えるだけです。

ドアを複数枚置いてみました。
アニメーションをさせると、ドアがパタパタ開きます。

Openthedoor_09

今回のファイル9.5は、「OpenTheDoor.ZIP」です。

|

« XPresso、zを無視(2D:XY)した「線分の交点」のC.O.F.F.E.E.ノード | トップページ | ポリゴンオブジェクトの指定したポイントから、エッジで繋がっている隣のポイントを取得するノード »