Unity Adventure Creatorチュートリアル:ボタンを押してドアを開ける-Part2

みなさんこんにちは!UnityやUnreal Engineを勉強しながらゲームつくるマンです。
ゲーム開発ツールのUnityを少しづつ勉強中。Unityのアドベンチャーゲーム制作アセットAdventure Creatorの公式サイトに掲載されている英語のチュートリアルを翻訳しながら進めていきたいと思います。今回はボタンを押してドアを開ける設定のPart2になります。

ボタンを押してドアを開ける

原文:Pressing a button to open a door

前回のPart1では、ボタンをクリックするとPlayerキャラクターがドアに向かって移動するまでの手順を行いました。今回はドアの開く設定を見ていきましょう。

前回のチュートリアルPart1で作成したHotspotオブジェクトの設定をします。

ドアを開けるアクションは、別のInteractionオブジェクトに格納されます。Hotspotオブジェクト”Red button”を選択して[Inspector]ウィンドウ > Hotspot (Script)コンポーネント > Use Interactionパネル > Interaction: > [Create]ボタンをクリックすると、このオブジェクトを簡単に作成して割り当てることができます。

新しいInteractionオブジェクトは自動的にRed button: Useという名前になります。名前をクリックすると[Hierarchy]ウィンドウでオブジェクトがハイライト表示されるので選択します。

[Inspector]ウィンドウを確認すると次のように定義されている単一のアクションが表示されます。

このアクションでドアを開くようにします。アニメーションクリップを使用して作業を行うこともできますが、Object: Transformを使用して簡単な変換を作成することもできます。アクションのAction type を次のように変更します。

このアクションはMoveableスクリプトが添付されたGameObjectにのみ影響するので、ドアオブジェクトメッシュを見つけてMoveableスクリプトを追加します。[Hierarchy]ウィンドウ > _SetGeometry > Doorを選択。[Inspector]ウィンドウ > [Add Componet]ボタンをクリック > Adventure Creator > Misc > Moveableを選択。

次に、[Hierarchy]ウィンドウ > _Interactions > Red button: Useを選択。[Inspector]ウィンドウ > Interaction (Script)コンポーネント > Object Transformパネル > Movable Objectにドアオブジェクトメッシュを割り当てることができます。

ドアはゲームプレイ中は開いたままなので、RememberTransformスクリプトコンポーネントに保存する必要があります。そのため、ゲームをセーブすると位置が記録されます。

ドアのアクションについてはTranslate、Rotate、Scaleから選択できますが、引き戸のドアなのでTranslateのままにしておきますが、ToをByに変更してください。これにより相対的な座標でドアを動かすことができます。

Vectorフィールドはシーンの向きとスケールに応じて変わりますが、このシーンではX軸移動量を-1.95、遷移時間を1秒に設定します。

Transition time(s)の値が0以外の場合、追加のオプションが表示されます。ドアの動きにイージングを追加するには、Move method: をSmoothに変更し、Wait until finish?にチェックを入れ、移動中の実行を防止します。

ゲームを再生してみましょう。プレイヤーはボタンをクリックしてドアを開くことができます。

しかし、ドアが開いてもボタンを押し続けることができます ボタンを押すたびにドアが移動して離れていくことに注意してください。

ボタンを押してドアが開いた後、もう一度アクションを呼び出すことができないように “使用”インタラクションを無効にしましょう。Red button: Useオブジェクトを選択。[Inspector]ウィンドウ > Interaction (Script) > [Add new action]ボタンをクリックして新しいアクションを追加し、Action
type: をHotspot、Change interaction に変更します。

Hotspot to change: フィールドはRed buttonを設定、Interaction to change: はUseのままで、Change to make: はDisableに設定します。

これにより、ドアが開くアクションが何度も実行されなくなります。

最後に、Hotspotの状態を”use”インタラクションの状態がセーブゲームに記録されるように、RememberHotspotスクリプトに与える必要があります。[Hierarchy]ウィンドウ > _Logic > _Hotspots > Red buttonを選択。[Inspector]ウィンドウ > [Add Componet]ボタンをクリック > Adventure Creator >Save system > RememberHotspotを選択。

というわけでチュートリアルが完了したのでWebGLでビルドしてみました。左側の壁にもドアとボタンを設置。右側にもボタンを設置して床ドアの仕掛けを追加しました。オブジェクトは[Hierarchy]ウィンドウで複数のオブジェクトを選択して[Ctrl]+[D]キーを押して丸ごと複製。[Inspector]ウインドウでコンポーネントのパラメータを調整することで比較的簡単に追加できました。

一度ドアが開くとHotspotが無効になるので再びボタンをクリックしても何も起こりません。キャラクターがボタンに近づくアクションも無効になるのはどうもイマイチですね。

次回のチュートリアルは今回作成した開いたままのドアを一定時間後に閉まるようにするチュートリアルになります。