Unityのドアの作り方

投稿者: | 2019-03-27

ドアのための穴をあける

Unity の ProBuilder で、ドアをはめるための穴を開けます。

オブジェクト選択モードで ProBuilderize をクリックすると、ProBuilder で編集できるようになります。

長辺のひとつを選択して Insert Edge Loop をすると

この辺と垂直に、オブジェクトを一周するような辺が作られます。

これを2本作ります。

面を選択して Material Editor からマテリアルを割り当てます。
色がつけば、ゲームビューでドアの位置を確認できます。

部屋をもうすこし大きくしたいので、側面をすべて選択して、シフトを押しながら、矢印をドラッグして引き伸ばします。

横線を入れましょう。辺を一つ選択して、Insert Edge Loop でぐるっと辺を作ります。

これで後ろ側にも横線が入ったはずです。

横線を上の方へ移動します。選択が外れてしまったら、横線の一つをクリックして、Select Edge Loop で再選択できます。
ドアの形が決まれば、面を選択して、Delete Faces で削除します。

裏側も削除です。

壁を薄くしました。ここではシフトキーはいりません。

壁はなくなりましたが、プレイヤーが通れません。
これは、衝突を感知する「コライダー」が、単純な箱型だからです。

Box Collider の左上のチェックを外して無効化し、Add Conponent から 「Mesh Collider」 を追加します。
Mesh Collider はオブジェクトの形に合わせて、複雑な形状になります。

通れるようになりました。横の壁にはちゃんとぶつかります。

面選択してシフトキー押しながら矢印をドラッグすれば、床や壁、天井を拡張したりできますね。

穴の内側は面が無いのでここに面を作ります。
辺選択モードで赤い辺を2本とも選択して、Bridge Edges を押すと辺から辺へまっすぐ面ができます。

全ての辺でやるときれいな穴ができます。内側に衝突もします。

ドアの作り方

新たに Cube オブジェクトを作り薄くドアの形にして、穴の内側の合わせます。

Add Conponent から Hinge Joint を追加します。Hinge とは 「ちょうつがい」 のことです。

Edit Joint Anguler Li… を押すと今 Hinge Joint がどこにあるかわかりやすくなります。
Anchor の値で Hinge Joint の位置を、Axis で向きを設定します。

かなり見にくいですが、よくみると上向き(0, 1, 0)の矢印が付いています。
この矢印を軸(Axis)として、ドアが回転します。当然 Hinge Joint はドアの端にあった方がいいですね。

ドアのインスペクタの右上の Static がチェックされていればはずして、Convex のチェックをつけます。

Static(「静的な」)にチェックすると、オブジェクトが静止したままになります。
Convex をチェックすると、複雑なコライダー同士で衝突できるようになります。

プレイヤーがドアを開け閉めできるようになりました。
でも少し不自然ですね。普通の家のドアは外か内かどちらかにしか開かないことが多いと思います。

外向きのドアの作り方

ドアが、接している壁と衝突してしまうとぎこちないので、衝突しないようにしましょう。
そのあとで、ドアの回転する角度に制限を付けます。

ドアと壁に「Layer」を設定します。最初は Default になっていますが、これをクリックして、Add Layer .. から新しいレイヤーを設定できます。

Edit > Project Settings > Physics で、レイヤー同士の衝突判定を制御できます。
チェックを外すと衝突しなくなります。 Wall に対する Door と、Door に対する Wall のチェックを外します。

衝突しないのでくるくる回転します。

ドアの Hinge Joint コンポーネントの Use Limits をチェックして、Min、Max、Bounciness を変更します。
Min と Max はドアがどこからどこまでの範囲で回転するかを指定します。最初の位置が 0 で、この場合は、0 から値が減少するほど外側に開き、増加するほど内側に開きます。

内側だけに開いてほしいので、Min に負の数、Max に 0 を指定します。ドアはこの範囲でしか回転しなくなります。

Bounciness を上げると、限界まで回転したドアが止まらずに跳ね返ります。

次はこのドアを手で開けられるようにしましょう。

コメントを残す

メールアドレスが公開されることはありません。