【unity】Clusterワールドでの扉の開け閉めギミックの作り方 

目次

Clusterのワールド作成、扉の開け閉めの方法

 

Blenderでの事前準備

clusterで扉を開け閉めできるようにしたいので、unityで設定する前に、Blenderで扉の原点を移動しておきます。

cluster ワールド 扉 開け閉め ギミック

3Dカーソルを選択メッシュの中心に移動

原点にしたい扉の軸のメッシュを選択します。
そしてShift + Sでパイメニューを出しCursor to Selectedにします。

cluster ワールド 扉 開け閉め ギミック

原点を3Dカーソルに移動

Object > Set Origin > Origin to 3D Cursor

cluster ワールド 扉 開け閉め ギミック

3Dカーソルに原点が移動しました。

cluster ワールド 扉 開け閉め ギミック

 

cluster ワールド 扉 開け閉め ギミック

ここからUnityでの作業

ドアにしたいオブジェクトをUnityのインポートした状態で始めます。Doorとしました。
DoorをHierarchyにドラッグします。

cluster ワールド 扉 開け閉め ギミック

Clusterのワールド制作では、空のオブジェクトに下記の場合(GameObject)にロジックを指定しないといけません。
そのため、空のGameObjectをHierarchyで右クリックをして作成します。
そのDoorのオブジェクトを入れます。下記画像は入れた状態です。

しかし、この状態だと回転する支点がドアの側面からかなりズレてしまっています。
せっかくBlenderでDoorオブジェクトの支点を指定したのに・・・
UnityでGameObjectの子であるDoorを移動して支点を移動することも、力ずくでできるのですが、かなりめんどくさいので違う方法をします。簡単にできる方法があるなら、誰か教えてください!

cluster ワールド 扉 開け閉め ギミック

そこで、簡単にDoorの支点と空のGameObjectを同じにする方法がありました。
まずDoorのオブジェクトをHierarchyに入れ、Doorを右クリックします。

cluster ワールド 扉 開け閉め ギミック

すると、Doorの子に空のGameObjectが作成されます。
この状態で、GameObjectを選択すると前準備でBlenderで指定したDoorの原点と、GameObjectと同じ場所になっていることがわかります。

cluster ワールド 扉 開け閉め ギミック

Doorの子になっているGameObjectをドラッグで外に出し、親子関係を一度解消します。
次に、GameObjectの中にDoorを入れて、GameObjectの子がDoorになった状態にします。

cluster ワールド 扉 開け閉め ギミック

空のGameObjectの名前を変えておきます。
G_Doorにしました。

cluster ワールド 扉 開け閉め ギミック

ドアの開閉Animetionを作成

あらかじめProject内にAnimetionフォルダを作っておきます。

cluster ワールド 扉 開け閉め ギミック

上のWindowからAnimation > Animationウィンドウを表示させます。

cluster ワールド 扉 開け閉め ギミック

ドアのopenアニメーションを作成

AnimetionウィンドウにCreateボタンがあるのでクリックします。
名前をopenにして保存します。

cluster ワールド 扉 開け閉め ギミック

するとこの画面になります。
AddPropertyを押して、TransformRotationをクリックします。

cluster ワールド 扉 開け閉め ギミック

Rotationのタイムラインが作成されます。
RotationのY軸の最後のキーフレームをクリックし、90にします。

cluster ワールド 扉 開け閉め ギミック

closeアニメーションを作成

次に、openと表示されている部分をクリックし、Create New Clip…をクリックします。

cluster ワールド 扉 開け閉め ギミック

openの時と同じように、今度はcloseにします。

cluster ワールド 扉 開け閉め ギミック

AddPropertyをクリックし、Rotationをクリックします。

cluster ワールド 扉 開け閉め ギミック

今度は、タイムラインの最初のキーフレームをクリックし、90に指定します。

cluster ワールド 扉 開け閉め ギミック

Animatorの設定

今度はWindow > Animation > Animatorで
Animatorウィンドウを表示します。

cluster ワールド 扉 開け閉め ギミック

最初は、このような画面になっています。

cluster ワールド 扉 開け閉め ギミック

BaseLayer内の空白で右クリックし、Create > Emptyで空のものを作ります。

cluster ワールド 扉 開け閉め ギミック

空のものを選択し、inspectorで名前をStandbyに変更します。

cluster ワールド 扉 開け閉め ギミック

Standbyを右クリックSet as layer Default Stateを選択

cluster ワールド 扉 開け閉め ギミック

このような状態になりました。

EntryからStandbyに矢印が伸びている状態です。

cluster ワールド 扉 開け閉め ギミック

次に、Standby右クリックし、Make Transitionを選択します。
するとStandbyから矢印が出てきますのでその矢印をopenに繋げます。

cluster ワールド 扉 開け閉め ギミック

同じように、openを右クリックし、Make Transitionでcloseに繋げ、closeを右クリックし、MakeTransitionでopenに矢印を繋げます。

cluster ワールド 扉 開け閉め ギミック

ParametersからBoolを選択します。

cluster ワールド 扉 開け閉め ギミック

名前をopenAnimにします。

cluster ワールド 扉 開け閉め ギミック

Standbyからopenに伸びている矢印を選択します。
inspectorConditionsをクリックします。

cluster ワールド 扉 開け閉め ギミック

ConditionsopenAnim
trueにします。

Has Exit Timeチェックを外します。

cluster ワールド 扉 開け閉め ギミック

今度は、openからcloseに伸びている矢印を選択します。
inspectorのConditionsをopenAnim
falseにします。
HasExitTimeのチェックも外します。

cluster ワールド 扉 開け閉め ギミック

今度はcloseからopenに伸びている矢印を選択します。
inspectorのConditionsをopenAnim
trueにします。
Has Exit Timeのチェックを外します。

cluster ワールド 扉 開け閉め ギミック

Assetsから、opencloseのアニメーションクリップを選択し、それぞれ、InspectorLoop Timeチェックを外します。

cluster ワールド 扉 開け閉め ギミック

DoorのオブジェクトにBox Colliderを設定します。

cluster ワールド 扉 開け閉め ギミック

HierarchyのG_Door(親のからのオブジェクトだった方)を選択します。
InspectorからAddComponentから下記のものを追加してそれぞれ設定をこの通りにします。
・Item
・Set Animation Value Gimmick(Script)
・Interact Item Trigger(Script)
・Item Logic(Script)

cluster ワールド 扉 開け閉め ギミック

 

ドアをクリックしたときに、ドアベルを鳴らす

AudioSourceを回転させたいドアのGameObjectの子に作成します。

AudioSourceにPlayAudioSourceGimmickを追加

Inspectorに下記の設定をします。
Target:item
Key:DoorBell
item:回転させたいドアのGameObjectをあてはめる
ParameterType:Signal

ドアのGameObjectにInteract Item Triggerを追加
TargetをThisに、名前をDoorBellに
ValueをSignalにする

 

これで、扉をクリックすると、開き、もう一度クリックすると閉じるギミックができます。
Clusterでワールドを作ってみたい方は一度試してみてください!

最後までご覧いただきありがとうございました!

↓YouTube動画の方もよかったら見てください!