見出し画像

VRChat備忘録⑥.5 ワールド固定のやり方(2022.11.22 少し簡単バージョン)

こんにちは、こむぎ* と申します。
VRChatの片隅を漂う無言勢の様な何かです。

今回は、以前の記事で書いた ワールド固定のやり方について、少し簡単になったやり方が発見されたようなので更新版の記事となります。
以前のやり方もそのまま使えますし、変わった部分も前回の記事の手順2、4のワールド中心にそびえたつ空オブジェクトを作る部分だけです。
なので、変更部分以外は前回の記事の文章のコピペです。ご了承ください。

前の記事を書き換えても良かったのですが、今回の手順が特殊な事をやっている気がしたので、使えなくなった時の為に別記事として更新しました。

以前の記事 ↓


はじめに

今回も、まず最低限の手順を書き、その後で少しだけ解説を入れたいと思います。アニメーション作成の細かい操作手順なんかは省きます。


手順1.アバターを原点に移動させる

まず最初に、アバターの位置を原点(Position 0,0,0)にしておきましょう。
ここがズレていると後の手順で不具合が出る可能性が有ります。


手順2.アバター直下に空のGameObjectを作る

まず、Hierarchy上でアバター最上部を選択し、右クリックから空のGameObjectを作成します。
作成したGameObjectの名前を "World_Center" に変更します。

名前は分かればいいので、気に入らなければ好きな名前でもいいですよ。

手順3.ワールド固定用に使う謎のPrefabを準備

Hierarchy上の何もない空白部分で右クリックし、空のGameObjectを作成します。
作成したGameObjectの名前を "Sources" に変更します。

名前は分かればいいので、気に入らなければ好きな名前でもいいですよ。

用意したオブジェクトのPositionも0,0,0にして置きましょう。
やらなくても大丈夫な気もしますが一応。

そうしたら、作成したオブジェクトをAssetsの適当な場所にドラッグ&ドロップ。Prefabが作成されればOKです。

Prefab作成後は、Hierarchy上から先程のオブジェクトは削除してしまいましょう。もう要りません。


手順4.ワールド固定用の設定を準備

まず、最初に用意した "World_Center" に、Parent Constraint を付けます。


Parent Constraint の Sources の枠を一つ増やし、手順3で作った "Sources.prefab" をAssetsからドラッグ&ドロップして登録します。
Hierarchy上に作ったオブジェクトは手順3で消したはずですが、Hierarchy上のものではなく、Assetsの方にあるPrefabを登録するので間違えないようにしてください。

最後に、 Zero を押して初期化&有効化しておきます。


手順5.固定したいオブジェクトの用意

次に、先程作成した "World_Center" の配下に、ワールド固定で置きたいオブジェクトを配置します。

今回は骨付き肉を投入しました。お肉が嫌なら野菜でもいいですよ。

オブジェクトを投入したら、Parent Constraint を付けて、ワールド固定していない時に持たせる場所を設定しましょう。

手順を覚えてる方は、Parent Constraintの設定(サイズ・ポジション合わせ、目印の空オブジェクト用意、Sources登録、Zero押して有効化)まで行って、次の "手順5.Parent Constraint ON/OFFのアニメーションの用意" に飛んでください。
手に持ったものを置く、だけなら Sources は手の一つでOKです。
上記画像みたいになってればOKです。

一応、以降で簡単に手順を書いておきます。


今回は通常時は右手に持たせたいので、骨付き肉をサイズ調整し、右手で持っている位置に合わせます。

位置合わせが完了したらオブジェクトの配下に空のGameObjectを作成。自分が分かる名前に変えておきます。
今回は "Meat Hand.R Point" です。


作成した空のGameObjectを追従させたいボーンの配下に移動させます。今回は右手のボーン(Hand.R)配下に。


そうしたら、以前のParent Constraintの記事と同様に、骨付き肉にParent Constraint のコンポーネントをつけましょう


次は Sources に枠を追加して、先程用意した右手に持たせる目印の "Meat Hand.R Point" をドラッグ&ドロップで登録。

Parent Constraint の接続箇所を複数にするならその分だけ枠を作って入れておきましょう。


最後にZeroのボタンを押して、初期化&有効化します。

これでオブジェクトの用意とParent Constraint の準備は完了です。


手順6.Parent Constraint ON/OFFのアニメーションの用意

後は、先程固定したいオブジェクト(今回は骨付き肉)に付けた、Parent Constraint のコンポーネントを丸ごとOFF/ON するアニメーションを作成し、それをメニュー等から切り替えられるようにするだけです。
ParentConstraintがONだと手に追従し、OFFにするとワールド固定される仕組みです。
基本的な手順は物の出し入れなどと同じですが、詳細が欲しい方は下記の前回の記事の手順5以降を確認してください。

さて、OFF/ONのアニメーション作成、アニメーター・ExpressionsMenuの設定などが完了したら動作確認してみましょう。

メニューのON・OFFで空中に固定出来れば成功です。
お疲れさまでした。

7.仕組み解説

さて、ここからはワールド固定の仕組みについて簡単に説明しようかと思いましたが…細かい事が知りたい方は前回の記事の同じ項番、7.仕組み解説を読んでください。

今回は、以前のワールド固定と、この記事の新手順の違いだけ簡単に書きたいと思います。

大まかな仕組みとしては、ワールド原点から動かないオブジェクト(今回であれば "World_Center" )を作り、その配下にワールド固定したいオブジェクトを置いています。
固定したいオブジェクトは、ParentConstraintがONの間は手などに追従して動きますが、OFFにした瞬間に"World_Center"の子に戻るので、その位置でそれ以上動かなくなる、といった感じになります。

そこまでは前回も今回も同じなのですが、前回はConstraint2種類を使ってワールド原点から動かないオブジェクト"World_Center"を作っていたのに対し、今回は謎のPrefabを参照させる事で"World_Center"が動かないようにしています。
今回の手順でなぜそういった動作をするのかはハッキリ言って良くわかりません…仕様なのかバグなのかも…
ただ、設定手順自体は以前の手順より楽になっているので、使える間はこの仕組みを利用したほうが楽かと思います。

一部手順変更だけなので前回より簡略化した記事になりましたが、これでおしまいです。おわり。

この記事が気に入ったらサポートをしてみませんか?