べ、別にワタシがイチから考えたワケじゃないんだからね!
上の画像みたいなのを再現しようってネタです。
ドア開閉警告ランプはE231系辺りで登場し、最近は結構多くの新車で使われてたりします。
またこれを応用してやれば、ドア灯も再現できちゃうので、押さえておくといいかもしれません。
- よくある失敗
「アニメーションテクスチャ+_DOOR1or2」
私も最初こうしちゃいました(汗)
点滅のアニメーションを持ったテクスチャを用意して、システムスイッチのドア構文使って切り替えれば…っていう考えです。
でも冷静に考えたら、システムスイッチの構文はあくまでも「列車が駅に停車時、その方向にホームがある場合に1、ない場合に0が出力」
なので、これをそのままやったら「ドアが開いたら点滅し続けて、ドアが閉まりはじめたら点滅終了」って仕様になっちゃいます。
ドア灯なら扉閉時に若干タイミングの調整が必要になりますが、使えるでしょう。
まぁアニメーションじゃなくて、ただのChangeTextureですけどね。細かい事は気にしない(?)
私も最初こうしちゃいました(汗)
点滅のアニメーションを持ったテクスチャを用意して、システムスイッチのドア構文使って切り替えれば…っていう考えです。
でも冷静に考えたら、システムスイッチの構文はあくまでも「列車が駅に停車時、その方向にホームがある場合に1、ない場合に0が出力」
なので、これをそのままやったら「ドアが開いたら点滅し続けて、ドアが閉まりはじめたら点滅終了」って仕様になっちゃいます。
ドア灯なら扉閉時に若干タイミングの調整が必要になりますが、使えるでしょう。
まぁアニメーションじゃなくて、ただのChangeTextureですけどね。細かい事は気にしない(?)
あまり極めていないので何とも言えないですが、多分この方法でも極めれば強引にできるのかもしれないです。でも、ちょっと面倒ですよね。
- これが正解?
「static-rotator+_DOOR1or2」
これが現用に至ってるモノです。原理はすっごく簡単なんですけどね。
図に描いたとおり、「点灯してない」「点灯してる」が背中あわせになった独立ポリゴンを用意して、それにシステムスイッチを適応してます。
これが現用に至ってるモノです。原理はすっごく簡単なんですけどね。
図に描いたとおり、「点灯してない」「点灯してる」が背中あわせになった独立ポリゴンを用意して、それにシステムスイッチを適応してます。
「ドアと同じ事をしてる」と書けば、理解しやすいでしょうか。
システムスイッチで「1」が出力された時に、ドア開閉警告灯が動作します。そして「0」になった時、同じ動作をして戻る…というわけです。
この動作に、回転動作であるstatic-rotatorを適応してるのです。ただ、クルクルと単に回っている訳ではありません。
動作時間が0(回転速度が∞)となるので、まるで点滅しているように見える訳です。
システムスイッチで「1」が出力された時に、ドア開閉警告灯が動作します。そして「0」になった時、同じ動作をして戻る…というわけです。
この動作に、回転動作であるstatic-rotatorを適応してるのです。ただ、クルクルと単に回っている訳ではありません。
動作時間が0(回転速度が∞)となるので、まるで点滅しているように見える訳です。
- 構文例(サンプルデータ)
Object3D "uplight_L"{ //進行方向左側のドアが開いた時に動作 ModelFileName = "(ドア上警告ランプ.x)"; If "_DOOR1"{ StaticRotation{ RotationAxis = (0.0, 0.0, 1.0); RotationAngle = 180.0; PreAnimationDelay = 0.3; PostAnimationDelay = 2.7; PreReverseDelay = 0.3; PostReverseDelay = 2.7; } StaticRotation{ RotationAxis = (0.0, 0.0, 1.0); RotationAngle = 180.0; PreAnimationDelay = 0.6; PostAnimationDelay = 2.4; PreReverseDelay = 0.6; PostReverseDelay = 2.4; } StaticRotation{ RotationAxis = (0.0, 0.0, 1.0); RotationAngle = 180.0; PreAnimationDelay = 0.9; PostAnimationDelay = 2.1; PreReverseDelay = 0.9; PostReverseDelay = 2.1; } StaticRotation{ RotationAxis = (0.0, 0.0, 1.0); RotationAngle = 180.0; PreAnimationDelay = 1.2; PostAnimationDelay = 1.8; PreReverseDelay = 1.2; PostReverseDelay = 1.8; } StaticRotation{ RotationAxis = (0.0, 0.0, 1.0); RotationAngle = 180.0; PreAnimationDelay = 1.5; PostAnimationDelay = 1.5; PreReverseDelay = 1.5; PostReverseDelay = 1.5; } StaticRotation{ RotationAxis = (0.0, 0.0, 1.0); RotationAngle = 180.0; PreAnimationDelay = 1.8; PostAnimationDelay = 1.2; PreReverseDelay = 1.8; PostReverseDelay = 1.2; } StaticRotation{ RotationAxis = (0.0, 0.0, 1.0); RotationAngle = 180.0; PreAnimationDelay = 2.1; PostAnimationDelay = 0.9; PreReverseDelay = 2.1; PostReverseDelay = 0.9; } StaticRotation{ RotationAxis = (0.0, 0.0, 1.0); RotationAngle = 180.0; PreAnimationDelay = 2.4; PostAnimationDelay = 0.6; PreReverseDelay = 2.4; PostReverseDelay = 0.6; } StaticRotation{ RotationAxis = (0.0, 0.0, 1.0); RotationAngle = 180.0; PreAnimationDelay = 2.7; PostAnimationDelay = 0.3; PreReverseDelay = 2.7; PostReverseDelay = 0.3; } StaticRotation{ RotationAxis = (0.0, 0.0, 1.0); RotationAngle = 180.0; PreAnimationDelay = 3.0; PostAnimationDelay = 0.0; PreReverseDelay = 3.0; PostReverseDelay = 0.0; } } Joint3D "MainBody"{ AttachCoord = ( x, y, 0.0); } }
- サンプルの解説
E231系では、開閉時に5回点滅となっています。
そのため、その倍の回数となる10回の180度回転の動作を行うわけです。
そのため、その倍の回数となる10回の180度回転の動作を行うわけです。
感の良い方ならもう気付いてるかもしれないですが、この技術は結構応用が効きます。
例えばドア灯。回転動作を180度1回の動作をすれば光った状態のままになるわけです。
例えばドア灯。回転動作を180度1回の動作をすれば光った状態のままになるわけです。
- 注意
この方法では180度のz回転を行います。そのため、ポリゴンではz軸を除き対称の形状でなければいけません。
また、x,y軸の設置位置は構文で行います。間違ってポリゴンの時点で位置を弄らないように…
また、x,y軸の設置位置は構文で行います。間違ってポリゴンの時点で位置を弄らないように…
また、PreAnimationDelayとPreReverseDelayの値に注目してほしいのですが、決まった時間内で同じ間隔で回転動作をするように調節しています。
面倒な方は上の構文のままでいいと思いますが、そうもいかない車両も多々あるので注意が必要です。
PostAnimationDelayとPostReverseDelayは省略しちゃっていいかもしれません。
面倒な方は上の構文のままでいいと思いますが、そうもいかない車両も多々あるので注意が必要です。
PostAnimationDelayとPostReverseDelayは省略しちゃっていいかもしれません。