見出し画像

Resoniteでモノをスライドさせる方法【Slider】

どうも、萬朶櫻です。

Resoniteでは、(grabbableコンポーネントが付いてゐれば)物を摑んで自由に移動させることが出來ます。

しかし、引き戸など、決められた軌道から外れてほしくない場合や、マウスなど、ある面から離れてほしくない場合があるでせう。

「Slider」といふコンポーネント解決できますので、備忘録ついでにやり方を書き記していきます。

Sliderコンポーネントを用ゐて作られた「

準備

ここでは、レールを模した直方體(Box)と、それに沿つて移動する棒(Capsule)とを用意した。

BoxとCapsuleの大きさは、Scaleを直接いぢるのではなく、それぞれ「BoxMesh」と「CapsuleMesh」との値で指定することにする。

※Resoniteでは、長さの單位はメートルである。

Box x=0.1, y=0.1, z=2
單位:メートル
Capsule Radiusを「0.05」に、Heightを「1.00」にする
單位:メートル

次に、以下の通りに階層化する。

ついでに、Box、CapsuleのPosition・Rotation・Scaleの値を全て以下の通りにする。

もしスライド移動させたいモノにGrabbableが付いてゐる場合、それのGrabbableは無效(Enabledのチェックを外す、あるいはGrabbableコンポーネントそのものを削除)にしておく

この場合はCapsuleに付いてゐるGrabbable。

この操作は必須である。なぜなら、Sliderの「決められた範圍はんゐ
だけ動け」よりも、Grabbableの「自由に動け」の方が優先されてしまふからである。

Boxの方のGrabbableはどちらでも良いが、レールとして使用するので、無效化しておくとよいかも知れない。

コンポーネント「Slider」

Capsuleに「Slider」を付ける

インスペクターでCapsuleを選んで、左側の領域を下にスクロールして、「コンポーネントをアタッチ」を押す。


コンポーネント窓の階層を以下のやうに掘り進んでいくと、Sliderがある。これをクリック(またはダブルクリック)。

インスペクターの最下段にSliderが追加された。

Sliderの設定

初期値に「3.402823E+38」などと意味不明な數字があるが、これは恐らく「限度なし」を意味すると思はれる

この中の中段あたりにある「Range」のx,y,zの値に動かしたい範圍はんゐを入力する。


今囘は、Z軸だけで動かしたいので、RangeのZの値に「1」を、X,Yの値には「0」と入力する。

そして棒を動かしてみると、軌道に沿つて、下記の位置までスライドした。

仕組みを詳しく解説すると以下の通り。

Resoniteの距離の單位はメートルなので、先ほどRangeのZに入力した値「1」は、「最初の位置を中心として、Z軸方向に1メートルの範圍はんゐだけ動ける」を意味する。

注意すべきは、「最初の位置からZ軸方向に±1メートルの範圍はんゐで動ける」ではない、といふことである。

そのため、「最初の位置から±1メートルの範圍で動かしたい」ならば、Rangeの値には「2」と入力しなければならない。


今囘用意したレール(Box)の長さが2メートルなので、RangeのZに2と入力すると、このやうに、棒の中心がレールの端ピッタリまでスライドしてくれる。

棒がレールからはみ出ないやうにするには、RangeのZの値を【(棒の半徑) × 2】だけ少なめに設定すれば良い。今囘は棒の半徑が「0.05メートル(=5センチ)」なので、「1.9」とした。

ピッタリ收まつた

Slider應用

二次元平面上での移動

以下のやうに、棒を上下方向(この場合はY軸方向)にも動かして、面的な動きをさせたい。

上のやうに、棒が動く範圍はんゐの中心は、レールのど眞ん中にしておきたい。

インスペクターで、CapsuleのPosition(一番上の方にスクロール)のx,y,zの値をすべて「0」にしておく。

もしこの操作をしても棒とレールとの位置がズレてゐる場合は、レール(Box)の方のPositionも、x,y,zの値をすべて「0」にしてみて下さい

併せて、SliderのOrigin(原点)の値も、先ほど設定したPositionの値と同じにする。Originの場所はRangeの眞下。

ここでは全て「0」にする

棒の高さは、ここでは1メートルに設定してゐたので、RangeのYの値を「1」にする。(最初の位置と中心としてY軸方向に1メートルの範圍はんゐだけ動かす)

高さ方向にもスライドできるやうになつた

レールの厚みを考慮してゐなかつたため、高さ方向に最大まで動かしても、棒の先端部分がレールの中に埋まつてゐる。せつかくなので、先端まで出してみたい。

ここでは、レールの厚みは「10センチ=0.1メートル」なので、RangeのYを「1.1」にすれば解決する。

三次元空間内での移動

Rangeのx,y,z全ての値に任意の數値を入力すればよい。

その他の設定項目

筆者が理解した項目のみ説明する。

  • Enabled: このコンポーネントを有效/無效

  • Rotatable: スライド中に囘轉ローテーション可能にする

  • Scalable: スライド中に擴大縮小スケールを可能にする

  • Range: スライド範圍はんゐ

  • Origin: スライド範圍はんゐの中心

  • MinScale: Scalableを有效にした場合の最小サイズ

  • MaxScale: Scalableを有效にした場合の最大サイズ

  • VibrationPreset: VRモード限定。「None」以外にすると、持つた時にコントローラーが振動する

  • SnapIncrement: 0の場合は滑らかにスライドするが、それより大きい數値を入力すると、その距離だけ飛び飛びに動く

  • Snaptime: SnapPositionsで定めた角度に吸着スナップするまでの速さ。單位はおそらく秒。SnapPositionsを設定しなかった場合、數値を變更する意味はない

  • SnapOnRelease: 「手を離した時にだけスナップする」といふ意味。基本的にチェックを入れておくとよい。SnapPositionsを設定しなかった場合、數値を變更へんかうする意味はない

    • チェックしない…摑んで囘してゐる最中でも、SnapPositionsの範圍はんゐ内に來とると、問答無用で吸着する

    • チェックする…SnapPositionsの範圍はんゐ内になっても、手を離さない限りは吸着しない

    • SnapPositions(list): 右側の矢印ボタンで順序の變更。✕ボタンで削除

      • Position: 「向き・角度」を意味する。ここで定めた角度まで吸着する

      • MaxAngle: ここで定めた數値(角度)以内だと、Positionで定めた角度に吸着する

    • [Add]: SnapPositions(list)の項目を追加

追記


いいなと思ったら応援しよう!