回転系のコンポーネントを4つご紹介いたします。ついでにバリューフィールドも。
Rotation(FloatQ型)を動かして、一定の速度でクルクル回転させたり、ランダムに揺れ動かしたり、数値を基にして回転させたりが出来ます。
(私は国語も算数も理科も社会も英語も苦手で、オイラー角とかクォータニオンとかは良く分かりません。なので、記事の内容は参考程度にご覧ください。)
前回はコチラ
Spinner(スピナー)
一定の速度で回転させるコンポーネント。
・場所
Transform/Drivers/
項目 | 解説 | 初期値 |
Range: | 回転範囲の制限。 | 無制限 |
_target: | 駆動先。 | 当該スロットのローテーション |
_offset: | 回転開始角度。 | 当該スロットのローテーションの値 |
_speed: | 速さ。 | 0 |
・使い方
回転させたいオブジェクトのスロット又は親スロットにアタッチ。
_speedを設定。
・補足
回転しない場合は_targetが合っているか確認してください。
逆回転させたい場合は、_speedをマイナスにすればOK。
Rangeを設定すると回転角を制限できますが、いずれかの軸を0にすると回転しなくなります。また、制限角まで回転すると瞬時にオフセット角に戻ります。
_speedを0にした時やEnabledを切った時も、瞬時にオフセット角に戻ってしまいますが、スロットのActiveを切ることで回転角を維持したまま停止する事ができます。(MeshRenderer等が同じスロット内又は子スロットにあると表示が消えちゃうので、別スロットにスピナーだけをアタッチして_targetを指定し直してください。)
複数軸を同時に回転させることもできるので、キネティックアート等も簡単に作れます。
_speedを書き換えると、その都度回転角が変化するので徐々に加速したり減速したりはできません。別のコンポーネントを組み合わせて疑似的にやるか、LogiXでやりましょう。
・Neos Wiki リンク
https://wiki.neosvr.com/Spinner_(Component)/ja
Wiggler(ウィグラー)
揺れ動くコンポーネント。グラグラする動きが作れる。
・場所
Transform/Drivers/
項目 | 解説 | 初期値 |
_target: | 駆動先。 | 当該スロットのローテーション |
_offset: | 回転開始角度。 | 当該スロットのローテーションの値 |
_speed: | 速さ。 | 0 |
_magnitude: | 大きさ。(振り幅) | 0 |
_seed: | 乱数の種。 | ランダム |
・使い方
揺れ動かしたいオブジェクトのスロット又は親スロットにアタッチ。
_speedと_magnitudeを設定。
・補足
WobblerのFloatQバージョンです。(第八回参照)
先に_magnitudeを設定してから_speedの設定した方が作りやすいかも。
オブジェクトの原点位置を、親スロットを作るなどして足元にずらすことで、ランダムに動く弥次郎兵衛みたいな物も作れます。
・Neos Wiki リンク
https://wiki.neosvr.com/Wiggler_(Component)
LinearAngleMapper(リニア アングル マッパー)
スカラー値(1つの数値)を回転角(オイラー角)に変換してくれるコンポーネント。
180度以上の回転が出来る。最短距離で回転しない。回転軸が1軸だけなら、こっちの方が直感的かも。
・場所
Transform/Drivers/
項目 | 解説 | 初期値 |
Source: | 参照先を指定。 | null |
Target: | 駆動先を指定。 | null |
SourceMin: | 参照値の最小。 | 0 |
SourceMax: | 参照値の最大。 | 1 |
TargetMin: | 駆動値の最小。 | x0 y0 z0 |
TargetMax: | 駆動値の最大。 | x0 y90 z0 |
AllowReverseMapping: | 逆方向(Target→Source)に作用させる。 | 有効 |
Clamp: | TargetMin~Maxの値の範囲内でのみ変化させる。 | 有効 |
・使い方
適当なスロットにアタッチ。
SourceとTargetの参照先を指定。
SourceMinとMax、TargetMinとMaxを設定。
・補足
そっくりなコンポーネント(リニアローテーションマッパー)があるので、用途に合わせて使い分けると良いかも。
逆方向に回転させたい場合は、TargetMax等にマイナス値を入れればOK。
180度以上回転可能(最短距離では回転しない)なので、アナログ時計、アナログ計器、スクリューシャフト等の回転ギミックが作れます。
TargetMinとMaxはFloat3型で設定します。すなわち、Float3型をFloatQ型に変換可能です。(普通はLogiXでやる事ですし、裏技的な使い方になるので、詳細は省きます。)
AllowReverseMappingが有効のとき、Target先の値が変化すると、逆方向に作用してSource先の値を変更する事が可能になります。(Writeback処理みたいな感じで使える。)SliderやJointコンポーネント等と組み合わせることで、Float3やFloatQ型等をFloat型(スカラー値)に変換できます。(JointならKnobControlコンポーネントでもできます。)
Clampを無効にすると、限界突破して回転させることができます。例えば、SourceMiniが0、Maxが1でTargetMinが0度、Maxが360度だった場合、Sourceの値が1を超えて2になると720度回転させることができます。
ちなみに、スロットのRotation等をTargetにするとクォータニオンで動かしてくれるので、小難しいことは考えなくても大丈夫です。
宣伝になりますが、NeosFesta4(未来のクリエイターフェスティバル)の会場に設置されている記念メダルマシンや、メダル工場のフリクションプレス機で、このコンポーネントを活用しています。
NeosFestaはイベント終了後でも会場に行けますので、ぜひ遊びに行ってみてください。
・Neos Wiki リンク
https://wiki.neosvr.com/LinearAngleMapper_(Component)
・関連
LinearColorMapper
LinearMapper1D~4D
LinearRotationMapper(リニア ローテーション マッパー)
スカラー値(1つの数値)を回転角(クォータニオン)に変換してくれるコンポーネント。
180度までの回転が出来る。最短距離で回転する。回転軸が複数あるなら、こっちの方が直感的かも。
・場所
Transform/Drivers/
項目 | 解説 | 初期値 |
Source: | 参照先を指定。 | null |
Target: | 駆動先を指定。 | null |
SourceMin: | 参照値の最小。 | 0 |
SourceMax: | 参照値の最大。 | 1 |
TargetMin: | 駆動値の最小。 | x0 y0 z0 |
TargetMax: | 駆動値の最大。 | x0 y90 z0 |
AllowReverseMapping: | 逆方向(Target→Source)に作用させる。 | 有効 |
Clamp: | ? | 有効 |
・使い方
適当なスロットにアタッチ。
SourceとTargetの参照先を指定。
SourceMinとMax、TargetMinとMaxを設定。
・補足
見た目はリニアアングルマッパーと同じだけど、内部の処理は違う。(LogiXで見ると分かる。)
逆方向に回転させたい場合は、TargetMax等にマイナス値を入れればOK。(例:-180度)
複数軸(三次元)で回転させるときに使うと、回転が分かりやすい。(例:ロボットアーム)
ちなみにNeosVRのRotationはクォータニオン。
・Neos Wiki リンク
https://wiki.neos.com/LinearRotationMapper_(Component)
ValueField(バリュー フィールド)
値を置くだけの場所。
様々な型(数値、文字、色等)があるので、使いたい型を選ぶ。
・場所
Data/
項目 | 解説 | 初期値 |
Value: | 値。 | 0(型によって違う) |
・使い方
適当なスロットにアタッチ。
・補足
リニアマッパーとパナー等のコンポーネントを繋げたい時に、このコンポーネントを間に繋いで使うことがあります。
(ちなみに、メモとして使うならCommentコンポーネントの方がオススメだし、ライセンスはLicenseコンポーネントがオススメです。)
おわり
以上で第九回は終了です。拙文ではございますが、最後までご覧頂きありがとうございました。
今回紹介しませんでしたが、リニアマッパー系にはLogiXのRemapと同じような機能があり、とても便利ですのでぜひ試してみてください。
次回は、複雑な動きが作れるValueGradientDriver等のコンポーネントを紹介予定です。
お楽しみに!