![見出し画像](https://assets.st-note.com/production/uploads/images/137809930/rectangle_large_type_2_139ca918b9e1a2ca61cc07cf61a12a7e.jpeg?width=800)
Resoniteでモノをスライドさせる方法【Slider】
どうも、萬朶櫻です。
Resoniteでは、(grabbableコンポーネントが付いてゐれば)物を摑んで自由に移動させることが出來ます。
しかし、引き戸など、決められた軌道から外れてほしくない場合や、マウスなど、ある面から離れてほしくない場合があるでせう。
「Slider」といふコンポーネント解決できますので、備忘録ついでにやり方を書き記していきます。
![](https://assets.st-note.com/img/1713510587932-MMQC6FIA9H.png?width=800)
準備
ここでは、レールを模した直方體(Box)と、それに沿つて移動する棒(Capsule)とを用意した。
![](https://assets.st-note.com/img/1713506045173-aSulJ0LaDN.png?width=800)
BoxとCapsuleの大きさは、Scaleを直接いぢるのではなく、それぞれ「BoxMesh」と「CapsuleMesh」との値で指定することにする。
※Resoniteでは、長さの單位はメートルである。
![](https://assets.st-note.com/img/1713518247411-6wJj6vot9g.png?width=800)
單位:メートル
![](https://assets.st-note.com/img/1713518422603-EtxlZxGi0b.png?width=800)
單位:メートル
次に、以下の通りに階層化する。
![](https://assets.st-note.com/img/1713506566817-wAi4qoC69c.png)
ついでに、Box、CapsuleのPosition・Rotation・Scaleの値を全て以下の通りにする。
![](https://assets.st-note.com/img/1713518655468-UHB07Bdvxl.png?width=800)
もしスライド移動させたいモノにGrabbableが付いてゐる場合、それのGrabbableは無效(Enabledのチェックを外す、あるいはGrabbableコンポーネントそのものを削除)にしておく。
この場合はCapsuleに付いてゐるGrabbable。
![](https://assets.st-note.com/img/1713506697858-xOodPGIJqp.png)
この操作は必須である。なぜなら、Sliderの「決められた範圍
だけ動け」よりも、Grabbableの「自由に動け」の方が優先されてしまふからである。
Boxの方のGrabbableはどちらでも良いが、レールとして使用するので、無效化しておくとよいかも知れない。
コンポーネント「Slider」
Capsuleに「Slider」を付ける
インスペクターでCapsuleを選んで、左側の領域を下にスクロールして、「コンポーネントをアタッチ」を押す。
![](https://assets.st-note.com/img/1713506867041-b460OEw8LN.png?width=800)
コンポーネント窓の階層を以下のやうに掘り進んでいくと、Sliderがある。これをクリック(またはダブルクリック)。
![](https://assets.st-note.com/img/1713506978595-42D044TIiA.png?width=800)
インスペクターの最下段にSliderが追加された。
![](https://assets.st-note.com/img/1713510427277-DQqkAPCnsx.png?width=800)
Sliderの設定
![](https://assets.st-note.com/img/1713510883157-ueAwp5wv3E.png?width=800)
この中の中段あたりにある「Range」のx,y,zの値に動かしたい範圍を入力する。
![](https://assets.st-note.com/img/1713511128875-0SfKEdNdRO.png?width=800)
今囘は、Z軸だけで動かしたいので、RangeのZの値に「1」を、X,Yの値には「0」と入力する。
![](https://assets.st-note.com/img/1713512432300-O14igYmQdf.png?width=800)
そして棒を動かしてみると、軌道に沿つて、下記の位置までスライドした。
![](https://assets.st-note.com/img/1713512025766-LNTHRGe4Ka.png?width=800)
仕組みを詳しく解説すると以下の通り。
![](https://assets.st-note.com/img/1713512545230-IWUyUcWv8Z.png?width=800)
Resoniteの距離の單位はメートルなので、先ほどRangeのZに入力した値「1」は、「最初の位置を中心として、Z軸方向に1メートルの範圍だけ動ける」を意味する。
注意すべきは、「最初の位置からZ軸方向に±1メートルの範圍で動ける」ではない、といふことである。
そのため、「最初の位置から±1メートルの範圍で動かしたい」ならば、Rangeの値には「2」と入力しなければならない。
今囘用意したレール(Box)の長さが2メートルなので、RangeのZに2と入力すると、このやうに、棒の中心がレールの端ピッタリまでスライドしてくれる。
![](https://assets.st-note.com/img/1713513042332-ZDkl3d2qmX.png?width=800)
棒がレールからはみ出ないやうにするには、RangeのZの値を【(棒の半徑) × 2】だけ少なめに設定すれば良い。今囘は棒の半徑が「0.05メートル(=5センチ)」なので、「1.9」とした。
![](https://assets.st-note.com/img/1713513134623-3byaQqNS8c.png?width=800)
Slider應用
二次元平面上での移動
以下のやうに、棒を上下方向(この場合はY軸方向)にも動かして、面的な動きをさせたい。
![](https://assets.st-note.com/img/1713515908798-uomZNXjFAo.png?width=800)
上のやうに、棒が動く範圍の中心は、レールのど眞ん中にしておきたい。
インスペクターで、CapsuleのPosition(一番上の方にスクロール)のx,y,zの値をすべて「0」にしておく。
![](https://assets.st-note.com/img/1713514329223-qe0SU7XHhU.png?width=800)
併せて、SliderのOrigin(原点)の値も、先ほど設定したPositionの値と同じにする。Originの場所はRangeの眞下。
![](https://assets.st-note.com/img/1713514492759-ad4Xl9N5pB.png?width=800)
棒の高さは、ここでは1メートルに設定してゐたので、RangeのYの値を「1」にする。(最初の位置と中心としてY軸方向に1メートルの範圍だけ動かす)
![](https://assets.st-note.com/img/1713515146739-IWSu8g1n04.png?width=800)
レールの厚みを考慮してゐなかつたため、高さ方向に最大まで動かしても、棒の先端部分がレールの中に埋まつてゐる。せつかくなので、先端まで出してみたい。
![](https://assets.st-note.com/img/1713515221659-fFF1nlH12D.png?width=800)
ここでは、レールの厚みは「10センチ=0.1メートル」なので、RangeのYを「1.1」にすれば解決する。
![](https://assets.st-note.com/img/1713515367303-D77kZm0GOJ.png?width=800)
三次元空間内での移動
Rangeのx,y,z全ての値に任意の數値を入力すればよい。
その他の設定項目
![](https://assets.st-note.com/img/1713516076629-1jLnMmZIm9.png)
筆者が理解した項目のみ説明する。
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)の項目を追加
追記
Headlessセッションで吹き飛ぶのでDontDriveにチェックを入れた方が良い https://t.co/TXQIAQzaq9
— エスニヤ🛏 (@y_esnya) April 26, 2024
この記事が気に入ったらサポートをしてみませんか?