Resoniteでモノをスライドさせる方法【Slider】
どうも、萬朶櫻です。
Resoniteでは、(grabbableコンポーネントが付いてゐれば)物を摑んで自由に移動させることが出來ます。
しかし、引き戸など、決められた軌道から外れてほしくない場合や、マウスなど、ある面から離れてほしくない場合があるでせう。
「Slider」といふコンポーネント解決できますので、備忘録ついでにやり方を書き記していきます。
準備
ここでは、レールを模した直方體(Box)と、それに沿つて移動する棒(Capsule)とを用意した。
BoxとCapsuleの大きさは、Scaleを直接いぢるのではなく、それぞれ「BoxMesh」と「CapsuleMesh」との値で指定することにする。
次に、以下の通りに階層化する。
ついでに、Box、CapsuleのPosition・Rotation・Scaleの値を全て以下の通りにする。
もしスライド移動させたいモノにGrabbableが付いてゐる場合、それのGrabbableは無效(Enabledのチェックを外す、あるいはGrabbableコンポーネントそのものを削除)にしておく。
この場合はCapsuleに付いてゐるGrabbable。
Boxの方のGrabbableはどちらでも良いが、レールとして使用するので、無效化しておくとよいかも知れない。
コンポーネント「Slider」
Capsuleに「Slider」を付ける
インスペクターでCapsuleを選んで、左側の領域を下にスクロールして、「コンポーネントをアタッチ」を押す。
コンポーネント窓の階層を以下のやうに掘り進んでいくと、Sliderがある。これをクリック(またはダブルクリック)。
インスペクターの最下段にSliderが追加された。
Sliderの設定
この中の中段あたりにある「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」にしておく。
併せて、SliderのOrigin(原点)の値も、先ほど設定したPositionの値と同じにする。Originの場所はRangeの眞下。
棒の高さは、ここでは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)の項目を追加