VRChatパブリックログ

VRChatでの体験を紹介します

UnityのPivotのあやつりかた【VRChat技術情報】

Pivotが言うこと聞かねーーーーーーーーっ!!

f:id:mekokka:20180902005845p:plainこれは原点Pivotが言うことが聞かなくて病んでしまったフレンド

Unityでアバターのカスタマイズするとき、小物の位置の微調整にPivotを利用することは多いと思います。ちなみにここでPivotとは下の画像のことです。

f:id:mekokka:20180902011242p:plain

このPivotの操作は直感的にオブジェクトを動かせるので重宝しますが、反面かゆいところに手が届かなかったり、意図した操作ができなかったりといった問題があります。

今回は私が知ってる限りのPivotの操作に関するTipsを紹介します。

画面外にPivotが出てしまった場合

オブジェクトの位置をミリ単位で合わせたいので、オブジェクトに対してズームアップして操作したいとします。

f:id:mekokka:20180902012042p:plain

するとこうなってしまいました。画面外にPivotがはみ出てしまって、この状態だとPivotにマウスカーソルを合わせたい場合はズームアウトする必要があります。

でもどうしてもこの視点でPivotを操作したい!そんなときはVキーを押します。

f:id:mekokka:20180902012353p:plain

Vキーを押すとマウスカーソルの直近の頂点にPivotが移動するようになり、オブジェクトの好きな場所をつかんで移動することができるようになります。

ただし、これは平行移動のPivotのみの機能です。また、画面に対して垂直な平面に沿って移動なのと、スナップを除けばフリーの移動しかできません。(X軸、Y軸に沿って移動などができない)

スナップの利用方法

Ctrlキーを押してからPivotをドラッグすると、デフォルトだと1m刻み、15度刻みでスナップするようになります。このスナップの刻みは数値を設定できるので、Pivotから原点がずれているとき、画面の角度から決まった距離や角度動かしたいときはTransformの数値入力は使いにくいので、このスナップの数値の変更を利用すると正確に狙った数字で動かせます。

f:id:mekokka:20180902014039p:plain

Editのプルダウンメニューの一番下、Snap Settingsをクリックすると設定画面が開きます。

f:id:mekokka:20180902014247p:plain

開くウィンドウはこちら。これがデフォルト設定です。単位はメートル。アバターには使いにくいので1cm刻みなどにするといいかもしれません。回転のスナップに関しては、80度ピッタリ動かしたいなど決まった角度がある場合はここに80と入力すればピッタリ80度でスナップします。

すこし不便な使い方ですが、画面外のPivotをVで呼び出すときなど、特定の軸のみでスナップ距離を短くすれば、仮想的に特定の軸に沿って移動させることができます。

Pivotの置かれる位置と向きを調整する

f:id:mekokka:20180902015544p:plain
Pivotの種類切り替えのすぐそばにあるのに、これの存在にずっと気づけませんでした。というラブソングみたいな話は置いておいて、右のボタンはCenterとPivot、LocalとWorldで切り替えられます。Centerはオブジェクトに含まれるすべてのメッシュの中点にPivotが表示され、Pivotは選択したオブジェクトの原点にPivotが置かれます。ほとんどの場合Pivotが使いやすいと思います。反してデフォルト設定はCenterなので、ここはPivotに切り替えておきましょう。

Localはオブジェクトの座標軸に沿った角度にPivotが配置され、Worldはワールド座標に沿った角度にPivotが配置されます。

回転させたオブジェクトを移動させるとき、Localだと移動させにくいのでWorldに切り替えると操作しやすくなります。

任意の点を軸にオブジェクトを回転させたい場合

上の方法は中点あるいは原点にしかPivotが移動できないため、さらに詳細にPivotを移動させたい場合に困ってしまいます。泥臭い方法になりますが、解決方法が一つあります。

1.Center/PivotのトグルボタンをPivotに切り替える

まず上で説明したPivotの位置の設定をPivotに切り替えておきます。これをやらないと狙った位置にPivotを出すことができないので、そのための前処理です。

2.空のオブジェクトを作る
f:id:mekokka:20180902020531p:plain

Capsuleのてっぺんを軸に回転させたいとします。まず空のオブジェクトを作ります。

3.回転軸として使いたい位置に空のオブジェクトを移動させる

f:id:mekokka:20180902020847p:plain

Y軸方向に1mの位置、カプセルのてっぺんに空のオブジェクトを移動させました。

4.空のオブジェクトの下に動かしたいオブジェクトを移動させる

f:id:mekokka:20180902021110p:plain

こんな感じに動かしたいオブジェクトを空のオブジェクトの中に移動させます。

5.空のオブジェクトを選択してPivotを操作する(おわり!)

f:id:mekokka:20180902021705p:plain

こんな感じでうごかせまーす!

移動、回転させた後は空のオブジェクトの外に出しても位置と姿勢は保持されているので、不必要になった空のオブジェクトは削除できます。