以前(→Link)、3Dマイホームデザイナー13というソフトで作成した家の3Dモデルから、VRChatのワールドを作成する方法を紹介しました。今回はドアの開閉を簡単に行えるようなスクリプトを作成しましたので紹介したいと思います。
2024/8/12追記
プログラムを修正しました。変更点は本ページの最後をご覧ください。
はじめに
これから説明する内容はUnityの基礎的な操作方法を理解していて、VRChatのワールドを制作した経験がある人向けに書いています。3Dマイホームデザイナー13で作成した家をUnityにインポートする手順については 前回の記事 のページを参考にしてみてください。Unity 2019.4.31f1想定です。
動作サンプル
スクリプトの準備
まずはGitHubからUdonsharpスクリプト DoorOpen.cs をダウンロードして、Assets内の任意の場所にコピーします。続けてAssets内の任意の場所で右クリック→Create→VRChat→Udon→Udon C# Program Assetを選択して作成します。
作成したら名前をDoorOpenに変更します。InspectorウィンドウのSource Scriptに、先ほどコピーしたスクリプトのファイルDoorOpenを選択します。
これで、今後はスクリプトのファイルをドラッグ&ドロップするだけで、使えるようになると思います。
ドアノブにアタッチする
開閉をさせたいドアの前まで行き、ドアノブを選択します。2回くらいクリックすればドアノブの部分が選択されると思います。
Hierarchyウィンドウを見ると、選択されているオブジェクト(2253_primitive)がドアノブのようです。
そうしたら1つ上のオブジェクト(Part_263_Model)を選択してみてください。Sceneエディタ上でドアの開閉部分全体が選択されたのなら、それが動かせる場所です。試しに左右に移動または回転させてみてください。ドアが開閉しましたか?
ドアノブの形状が複雑な場合は、開閉部分はさらに上の階層にあると思われます。そのようなケースについては後程説明します。まずはドアノブの1つ上が開閉部分になっているケースの手順を以下に説明します。
それではもう一度ドアノブの部分を選択してください。Inspectorウィンドウにドアノブのコンポーネントが表示されるので、Add Conpornentを押してBox Colliderを追加します。
続けてスクリプトDoorOpenをドラッグ&ドロップします。そうすると以下のような設定画面が表示されるので、ドアの種類の応じて内容を変更していきます。
ドアの種類が引き戸(左右に開く戸)の場合は、Is Sliderをチェックします。開き戸(押したり引いたりして開く戸)の場合は、Is Sliderのチェックを外します。
その下のInvertは、どちらの方向にドアを動かすかの設定です。もし期待と違う方向に開いてしまった場合は、Invertをチェックしてみてください。基本的な設定は以上です。
その他の設定項目については、speedは開閉アニメーションの速度、開き戸の設定は開いた時と閉じたときのそれぞれの角度、引き戸の場合は何m動かすかを指定します。通常はいじらなくてもいいと思います。
あとは開閉したいドアにひたすら取り付けていって、シーンを保存したら再生ボタンを押してドアが開くか試してみましょう。
ドアノブの形状が複雑な場合
上記の説明はドアノブの1つ上のオブジェクトが開閉部分となっていましたが、複雑な形状をしているドアの場合、複数の階層に分かれている場合があります。まずはこのドアの構造を見てみましょう。
ドアノブは1416_primitiveですが、開閉部分は3つ上の階層のPart_104になります。
今までは親が開閉部分だったので対象を指定する必要はありませんでしたが、このような場合は別途設定が必要です。ドアノブのInspectorウィンドウの「対象オブジェクト(オプション)」の箇所に、どのオブジェクトを動かすのかを指定します。
オブジェクトをドラッグ&ドロップで指定するならDoor Objectに入れます。名前を手入力するならDoor Object Nameに入力します。たぶん名前をコピペする方がやりやすいと思います。指定はどちらか片方だけでいいです。
VRなら間取りの使い勝手が確認できる!
実際にVRで試してみたところ、ドアの向きが使いにくい、狭くて危ない、といった要改善箇所がいくつも見つかりました。実際に家を建てるときは建築士さんが指摘してくれるかもしれませんが、VRなら使い勝手を自分で体験して手直ししていくことができます。実物大でイメージを確認できれば、より自分の理想の家に近づけられますね。
おまけ:床のコライダーを毎回設定せずに済ませる方法
床のコライダーを作っちゃいましょう。
こんな感じで床や階段のコライダーを一度作っておけば、間取りを変更してgltfの変換&インポートを行っても、そのまま使い回しがききます。位置決めが完了したらマテリアルを透明なものに変更すれば、透明な床のできあがり!階段の位置が変わった場合は修正が必要ですが、これで作業効率爆上がりなのでおすすめです。ちなみにドアはやり直しですが…(なにかいい方法ないかなぁ)。
【追記】プログラムを変更しました
ドア本体のオブジェクトの位置がドアノブの2つ上、3つ上にあるケースが多いので、いちいちオブジェクトを指定せずにチェックするだけで済むように修正しました。
Parent X2は親の親、Parent X3は親の親の親になります。未指定の場合は親です。たとえばこの図の場合、Parent X3をチェックしているのでPart_324がドア本体のオブジェクトになります。