みなさんこんにちは!UnityやUnreal Engineを勉強しながらゲームつくるマンです。
ゲーム開発ツールのUnityを少しづつ勉強中。解説書やネットで調べた情報を参考にして覚えたことを忘れないように書き留めています。
Unityのアドベンチャーゲーム制作アセットAdventure Creatorの公式サイトに掲載されている英語のチュートリアルを翻訳しながら進めていきたいと思います。今回はこれまでのチュートリアルを応用してボタンを押してドアを開閉できるようにしてみます。
ボタンを押してドアを開閉する
原文:Pressing a button to open a door
前回のチュートリアルでは、時間が過ぎると自動的に閉まるドアの設定をしました。今回はボタンをクリックしてドアの開けたり閉めたりできるように改造したいと思います。
まずはドアの開閉状態を制御するための変数を作ります。[AC Game Editor] > [Variables]タブ:Variables manager > [Local]ボタンをクリックします。
作成した変数”RedButtonUse”の値をチェックするアクションを作成します。
[Hierarchy]ウィンドウ > _Interactions > Red button: Useを選択。[Inspector]ウィンドウ > Interaction (Script)コンポーネント > [Add new action]ボタンをクリックして新しいアクションを追加します。設定は次の通りです。
- Action type: [Variable] [Check]
- Scource: [Local]
- Variable: [RedButtonUse]
- Conpare with: [Entered Value]
- [Equal To] Boolean: [False]
- If condition is met: [Continue]
- If condition is not met: [Stop]
作成したアクションをアクションリストの一番上に移動します。アクション名”Variable: Check (RedButtonUse Equal ToFalse)”の右側の歯車ボタンをクリック > Re-arrange > Move to topを選択。
ドアが開いた後に変数”RedButtonUse”の値を変更するためにもう一つ新しいアクションを追加します。Interaction (Script)コンポーネント > [Add new action]ボタンをクリック。設定は次の通りです。
- Action type: [Variable] [Set]
- Scource: [Local]
- Variable: [RedButtonUse]
- New value is: [Entered Here]
- Statement: = [True]
- After running: [Stop]
前回のチュートリアルで編集したHotspotオブジェクトを無効にするアクションを削除します。アクション名”Hotspot: Change interaction (Red button – Disable Use)”の右側の歯車ボタンをクリック > Deleteを選択。
次に、変数”RedButtonUse”の値が”True”の場合(ドアが開いている状態)にドアを閉めるアクションを追加します。Interaction (Script)コンポーネント > [Add new action]ボタンをクリック。設定は次の通りです。
- Action type: [Object] [Transform]
- Moveable object: [Door_01 (Moverble)]
- Vector: X[1.95] Y[0] Z[0]
- Stop existing transforms? [✓]
- Transition time (s): [1]
- Move method: [Smooth]
- Wait until finish?: [✓]
- After running: [Continue]
ドアを閉めた後に変数”RedButtonUse”の値を変更するための新しいアクションを追加します。Interaction (Script)コンポーネント > [Add new action]ボタンをクリック。設定は次の通りです。
- Action type: [Variable] [Set]
- Scource: [Local]
- Variable: [RedButtonUse]
- New value is: [Entered Here]
- Statement: = [False]
- After running: [Stop]
最後に、変数”RedButtonUse”の値をチェックするアクション”Variable: Check (RedButtonUse EqualTo False)”の条件振り分けのフィールドを次のように変更してドアを閉めるアクションを接続します。
- If condition is met: [Continue]
- If condition is not met: [Skip]
- Action to skip to: [3: Transform]
設定はできましたが、アクションの流れがどうなっているのかわかりにくいので[Action List Editor]ウィンドウで確認しましょう。[Inspector]ウィンドウ > Interaction (Script)コンポーネント > [Action List Editor]ボタンをクリック。
アクションの流れを整理してみましょう。アクション[0:Variable: Check]で変数”RedButtonUse”の値チェックが行われアクション[1: Object: Transform]に進みドアが開きます。
ドアが開いたらアクション[2: Variable: Set]で変数”RedButtonUse”の値を”True”に変更。これてアクションは終了。
もう一度Hotspotをクリックするとアクション[0:Variable: Check]で変数”RedButtonUse”の値は”False”なのでアクション[3:Object: Transform]へと進んでドアが閉まります。
ドアが閉まったらアクション[4: Variable: Set]で変数”RedButtonUse”の値を”False”に変更。これてアクションは終了。
[Action List Editor]ウィンドウが開いたらすべてのアクションを展開。上部メニューの[Auto-arrange]をクリックしてアクションを整列した状態が次の通りです。ではゲームを再生してみます。ボタンを押すたびにドアが開閉できるようになりました![Action List Editor]ウィンドウを開いたままゲームを再生すると実行中のアクションが緑枠で強調表示されて確認できます。
というわけで、完成したシーンをWebGLでビルドしてみました。左側の青ボタンで開くドアは前回のチュートリアルのままで時間が経つと自動的に閉まります。
アクションを編集は[Inspector]ウィンドウで行うより[Action List Editor]ウィンドウを使った方が分かりやすいですね。
というわけで、これまでのチュートリアルで紹介されていない変数をいきなり使う荒業になりましたが、今回でHotspot関係のチュートリアルは終わりです。スクリプトを使わずにノード形式でオブジェクトを制御できるのは分かりやすいですね。