開け閉めができるドアをつくる

今回はいくつかの機能を組み合わせた作例として、クリックすると開け閉めができるドアをつくります。
サンプルを用意しているので、サンプルを触りながら本記事を読むと理解しやすくなるかと思います!

サンプルのダウンロード

今回はすぐに使えるサンプルをご用意しました。
サンプルはこちらからダウンロードしてください。

サンプルをシーンに置いてみましょう。

  • インポートすると、プロジェクトの中にClusterTutorialというフォルダが追加されているはずなので、その中のPrefabs>DoorをSceneかHierarchyにドラッグアンドドロップします。これでシーンにドアが置かれます。

アップロードして確かめてみましょう。クリックするたびにドアが開いたり閉じたりします。

ここからはこのサンプルをもとに解説していきます。

「Animation」でドアの動きをつくる

ドアが開くなど、オブジェクトに決まった動きをさせるにはAnimationという機能を使います。
Animationについてはこちらの記事でも解説しています。

DoorにはDoorOpenとDoorCloseという2つのAnimationが設定されており、条件によって片方を再生することで開いたり閉じたりします。

  • Animationの詳細はAnimationウインドウを開いた状態でシーン上のオブジェクトを選択することで確認・編集できます。

いずれのAnimationでもModelオブジェクトのRotation.yを変化させ、DoorOpenでは0°から-90°に、DoorCloseでは-90°から0°にすることで開閉しています。

「Animator」で「Animation」を制御する

Animationを切り替える設定はAnimatorを使っておこないます(似た名前なので注意してください)。

  • Animatorウインドウを開いてシーン上のDoorを選択すると、DoorOpenとDoorCloseを含むいくつかのパネルが繋がったものが表示されます。
  • 左上のParametersタブを開いて、openAnimというパラメーターがあることを確認しましょう。
  • パネルを繋いでいる白い矢印を選択してInspectorを見ると、Conditionsという項目で「openAnim」とtrueまたはfalseが指定されています。

これはopenAnimの値がtrueのときDoorOpenへ、falseのときDoorCloseへ遷移するという意味になります。

「Set Animator Value Gimmick」で「Animator」を変化させる

AnimatorのパラメーターはSet Animator Value Gimmickで変化させます。

以下のように設定すると、トリガーやオペレーションから発行されたopenというメッセージの値をそのままAnimatorのopenAnimに適用することができます。

「Interact Item Trigger」でドアをクリックした時に発火させる

今回はドアをクリックしたときに開閉するようにしました。Interact Item Triggerを付けることでクリックされたときに反応させることができます。

ここではSignal型のメッセージを発行して、次に説明するItem Logicを実行します。

「Item Logic」でドアの開閉を行えるようにする

ロジックはSignal型のメッセージを受け取ったときに実行され、計算をおこなった結果を別のメッセージとして発行します。

今回はNotという計算を利用して、実行するたびにopenというBool型メッセージのtrueとfalseが切り替わるようにしました(こちらの記事でも詳しく解説しています)。

ここまでに説明した全体の仕組みは以下のようになっています。

サンプルアセットを改変してみよう

サンプルアセットそのままでも十分ワールドに利用できますが、3Dモデルを変更したり開き方を変えたりといった改変をして自分らしくしてみましょう。

3Dモデルを変更する

Prefabをシーンに置いたままでは変更できません。まずはHierarchy上でDoorを右クリックしてUnpack Prefabを選択しましょう。Doorのアイコンが変化し、編集が可能となります。

編集可能になったら、Doorを展開してModel>Door-1を削除してしまいましょう。

好きなドアのモデルをHierarchyのDoor>Modelのところにドラッグアンドドロップします。
もともと「Door-1」があったところに新しいモデルが入っていればOKです。

次に、ドアのモデルの回転軸にしたい部分をModelオブジェクトの原点に重ねましょう。
表示モードがPivotになっている状態で、Modelを選択したときにギズモ(移動の矢印や回転の枠)が出る位置がオブジェクトの原点です。

Animationでの回転はこの点を中心におこなわれるため、モデルの回転軸をこの位置に合わせてください。

うまく動かないときはモデルの階層を確認してみてください。
以下のようにModelと同じ階層や、Doorの外にあるとうまく動きません。

開く速さを変える

もっとゆっくり開くようにしてみましょう。

Animationウインドウを開いた状態でDoorオブジェクトを選択します。
DoorOpenを選択して、60フレームの位置にあるキーフレーム(ひし形の印)をドラッグで後ろに移動させましょう。
120フレームの位置に移動させれば、ドアは2倍の時間をかけて開くようになります。
※マウスホイールで表示範囲を拡大縮小できます。

同じようにDoorCloseも編集して、閉じ方もゆっくりにしてみましょう。

開く角度を変える

同様にAnimationウインドウでDoorOpenを開きます。
最後のキーフレームの位置に移動して、Rotation.yの値(-90となっているはずです)を-120に変更しましょう。

同様にDoorCloseを開き、今度は0フレームの位置でRotation.yを-120にします。
こうすると、元よりもドアが大きく開くようになります。

このように、Cluster Creator KitとUnityの機能を組み合わせて工夫することでさまざまな仕掛けを作ることができます。

もちろんサンプルアセットのドアをそのまま置いてもいいですし、慣れてきた人は他の記事も参考にしてオリジナルな仕掛けを作ってみましょう!

記事をシェアしてワールド制作を盛り上げよう!