公開日:2024/01/24  更新日:2024/01/24

Unityのドアの作り方

Unityでアクション系ゲームを作るならほぼ確実にドアは必要になると思う。

そこで、今回は近くでFキーを押すと開くドアの作り方を紹介していく。


Unityのドアの作り方

ドアの素材用意
アニメーションクリップ作成
アニメーターコントローラー作成
ドアのゲームオブジェクト設定
スクリプト作成
ドアのおすすめアセット紹介
目次にもどる

ドアの素材用意

まずは使用するドアの素材を用意する。

今回は以下のフリーアセット(2024年1月現在無料)を使っていく。


複数の種類のドアが用意されており、とても優秀なアセットだ。ダウンロード・インポートを行おう。

インポートできたら、プロジェクトビューの01_AssetStore→DoorPackFree→Prefabのフォルダを開く。

フォルダの中にドアのプレハブから好みのものを選んだらコピーして増やし、増やしたプレハブに今回はDoorAと名付けた。

自分の場合はドアがやや小さく感じたのでDoorAのインスペクター欄でTransformのScaleのX Y Zを1→1.3に増やした。

DoorAを選択し、ヒエラルキー欄にドラッグ&ドロップした。

目次にもどる

アニメーションクリップ作成

ヒエラルキー欄に作成したDoorAの子要素は01_lowと03_lowの2つ。

ドアの使い方

03_lowについてはドアの外枠であり、ドアを開ける際に動かす必要はない。ドアを開ける時には01_lowを動かせばいいことがわかる。

今回はドアを押して開くようにしようと思う。そのドアの動きをアニメーションクリップを作成することにする。

ヒエラルキー欄にドラッグ&ドロップしたDoorAを選択した状態で、上部メニューのWindows→Animation→Animationのように選択する。

ドアの使い方

すると以下のような画面が出るのでCreateを選択し、アニメーションクリップを保存する場所を決める。

ドアの使い方

Add Propertlyを選択し、アニメーションに使用するコンポーネントを選択する。ドアを動かすアニメーションを作るので01_lowを選択し、次にTransformsを選択する。ドアの動きは01_lowの回転で表現できるのでRotationを選択する。

ドアの使い方

以下のような画面になる。画面の左の01_low Rotationを選択しよう。

ドアの使い方

画面の右の◇マークが出ている場所(0.00秒付近)を左クリックで選択すると左画面でコンポーネントの値設定が可能(今回は01_lowのTransformsのRotation)。

ドアの使い方

デフォルトで画面の右にある0.00秒時点の◇マークを選択すると、画面の左は上の画像のようなX=-90、Y=0、Z=0の値となっていると思う。これがドアが全く動いていない時の値となっているのでこれはそのままでOK

次に右画面の青い部分の一番右(現在は60フレームに設定しているので1秒時点)を左クリックし、その後右クリックしてAdd keyを選択することで新たなる◇マークを追加できる。それを左クリックで選択しRotationのYを-90とする。

ドアの使い方

これで0秒時点でRotationのYは0だが、1秒(60フレーム)時点ではRotationのYが-90となるようなアニメーションクリップが完成する。画面の右の任意の時間の位置を選択すると、その際に01_lowがどう動いているのかがシーンビューで確認することができる。

ドアの使い方

そのアニメーションクリップを保存した場所を開き、「doorY-open」と名前をつける。そのアニメーションクリップをCtrl+Cでコピーして、Ctrl+Vで貼り付けて増やす。もう一つのアニメーションクリップを開き、逆の方向からドアを開いた時のアニメーションを制作する。こちらは1秒時点でのRotationのYが90になるようにすれば逆にドアが開くアニメーションクリップも完成する。こちらの名前は「doorY+open」とする

「doorY-open」のインスペクターを選択し、Loop timeのチェックを外す(ドアを開けるアニメーションを何度も再生しないため)。「doorY+open」にも同様の作業を行う。

ドアの使い方
目次にもどる

アニメーターコントローラー作成

アニメーターコントローラーについてよく知らない場合は先に以下を確認してほしい。

AnimatorControllerとAnimator

プロジェクトビューで右クリックし、アニメーターコントローラー「door」を作成。

以下のようにステートと遷移を作成する。

ドアの使い方

openのintパラメーターを設定し、「Idle」から、openが1と同値なら「doorY+」へ遷移。openが2と同値なら「doorY-」に遷移するように設定する。

「doorY+」のステートを選択し、Motionの項目で「doorY+open」のアニメーションクリップを再生するようにする。

同様に「doorY-」のステートを選択し、Motionの項目で「doorY-open」のアニメーションクリップを再生するようにする。

目次にもどる

ドアのゲームオブジェクト設定

ヒエラルキー欄のDoorAの子要素である01_lowと03_lowについて、インスペクター欄を選択し、Add Componentを選択してMesh Colliderを追加する。

Mesh Colliderはゲームオブジェクトの大きさ・サイズに合わせた当たり判定を作成することができる。

これでキャラがドアを開けずにぶつかっても通れないし、ドアを開けた後は通り抜け可能となるがドアの開いた部分は当たり判定になる。

ただ、自分の環境ではドアのMesh Colliderが薄すぎるためにドアが閉まっている状態でぶつかると、たまにすり抜けが発生してしまった。

そこで親であるDoorAのインスペクター欄からAdd Componentを選択してBox Colliderを追加。以下のように結構厚めにドアのゲームオブジェクトを覆うようにBox Colliderの大きさと位置を調整した。

ドアの使い方

後述するスクリプトでドアが開けられたらBox Colliderを無効にするように設定すれば、ドアを開けて問題なく通行可能となる。

DoorAにBox Colliderと同様にAnimatorのコンポーネントも追加。Controllerの項目で先ほど作成したアニメーターコントローラー「door」を選択しておく。

ドアの使い方
目次にもどる

スクリプト作成

以下のようにスクリプトを作成し、DoorAにアタッチした。

なおシリアライズしており、インスペクターに値を入力している。

ドアの使い方

今回はKidoukyoriに2を代入している。

自分が操作しているキャラとドアの位置から距離を出し、その距離がKidoukyori以下でFキーを押しているなら、操作キャラがドアのどちら側にいるのか調べ、操作キャラがいるのとは逆方向へドアが開くアニメーションが作動するように、アニメーターコントローラーの「open」へ値を代入する。BoxColliderも無効にすることで操作キャラがドアを通行可能となる。


今回紹介したドアの作り方は最基礎であり一つの例でしかない。ドアを引いて開けたり、開いたドアに対しFキーを押すことで閉めるなど追加できる要素は多数ある。今回紹介したことをベースにすれば難しくないのでスクリプトに追加して自分好みのドアを作ってみよう。理想のドアが作れたらプレハブに保存するのを忘れずに。

目次にもどる

ドアのおすすめアセット

ドアは家・メカ系施設・ダンジョンなど、作った建物に合うように多数用意したい。

本格的なゲーム制作をするつもりなら、ぜひドアのアセットを使うのがおすすめ。特に優秀な商品を紹介していく。

PBR Doors pack


中世のドア(金属製2つ・木製2つ)、モダンな木製ドア8つ、格子がついた鉄の錆びたドアが1つ、ガレージドア1つ、錆びのあるドア1つなどが含まれている商品。

ドアの開閉アニメーションも用意されている。

ドアの南京錠を射撃またはキックによって開閉・破壊するアニメーションまで用意されている。

ドアエディタによって壁にはめ込んだ状態でのサイズ変更・取っ手位置の調整・色変更などをスムーズに行うことができる。

性能・素材量を考えれば価格も抑えられている。コスパに優れた商品なので、ぜひ確認してみてほしい。

Door Interaction Kit


ドア・引き出し・ロッカーの3Dモデルが入っている。

ボタンを1回押すことでドアを開閉でき、角度・開く速度・サウンド効果を設定可能。

ドアにカギをかけたり、板を張ったり、鍵でドアを開けることもできる。

素材が揃うのはもちろん、ドアを使ったギミックを制作したい場合に役立つ商品となっている。価格も抑えられているので、ぜひ確認してみてほしい。

Contact Doors


その名の通り、ボタンを押すのではなく接触することで開くドアが欲しい場合におすすめのアセット。

片開き・両開き・左右スライド・上下スライドなど様々な開き方をするドアが揃っており、カスタマイズ機能もついている。

優秀な上に低価格の商品となっているので、ぜひ確認してみてほしい。

Unityのゲーム制作まとめへ戻る

page top