前回に続き、Unreal Engineを使ったデザインレビューツールの改良を加えてみました。今回は、ボタンをクリックしてサブレベルを切り替える方法です。ボタンの下にテキストボックスを配置し、サブレベルの名前を表示する仕組みも取り入れてみました。
・BluePrintsフォルダの中で右クリック → User Interface → Widget Blueprintとたどり、別ウィンドウが立ち上がるのでUser Widgetをクリックしてブループリントを新たに作ります。名前はButton_Widgetとしました。
・作成したButton_Widgetをダブルクリックして開きます。
・まずは上の図のようにCanvas Panelを設置してからボタンとその中にテキスト、さらにボタンの下にテキストを配置し、位置や背景色、文字色などをお好みで調整します。
※本ブログ以降でもボタンを追加で配置していく予定なので今回は左端に設置しています。
・ボタンの下に配置したテキストは選択したサブレベルの名前を表示する場所です。このテキストの文字列を外部から操作するには変数化する必要があるので、上の図の右上にあるIs Variableにチェックを入れます。
・ボタンをクリックした時の動作を組んでいきます。ボタンを選択した状態で、Details欄の一番下にあるEventsの項目の中から、On Clickedの横にある+ボタンを押します。・自動的にGraph画面に切り替わり、赤色のイベントノードが自動で生成されています。
・このButton_Widgetではボタンをクリックした状態を通知する(知らせる)機能にとどめ、通知を受け取った後の実際の動作の部分はPersistentレベルのブループリントに記載していきます。よって、ここではイベントディスパッチャーという機能を使って通知を行う機能を作ります。
・上の図の左にあるEVENT DISPATCHERS欄の+ボタンを押して任意の名前をつけ、右のグラフエリアにドラッグ&ドロップし、Callを選択すると青色のノードが生成されるのでそれらをつなぎます。
・Button_Widgetにおける作業はここで終了なので、忘れずにコンパイル→上書き保存を行います。
・Loading Widgetをダブルクリックして開きます。
・右のタイムシーケンスが0.00の位置にいることを確認してから、RGBがそれぞれ0.0、Aが1.0と入力し、右上の◎ボタンをクリックして確定します。画面の色が黒で不透明の状態です。
・デザイナー画面でCanvas PanelとImageを配置します。imageは枠一杯に広げます。
・Animations欄の+Animationボタンを押して、新しくアニメーションを一つ作成します。次に、+Trackボタンを押してImageを追加し、右の+ボタンを押してColor and Opacityを選択します。フェードイン、フェードアウトは時間と共に透明度を変化させる方法で実現するということになります。
・画面上で右クリック→Add Custom Nodeと入力すると赤色のイベントノードが生成されますので、二つ用意し、それぞれに識別しやすい名前をつけます。それらにPlay Animationノードをつなげます。重要なのは、フェードアウト側は逆再生になりますのでPlay ModeをReverseに設定しておきます。これらのイベントを呼び出せばアニメーションが再生されるということです。
・サブレベルを切り替える際の動作の仕組みは、ボタンをクリック → Loading Widgetを生成→ フェードインアニメーション 再生→ 現在のサブレベルをアンロード → 次のサブレベルをロード → フェードアウトアニメーション再生 → Loading Widgetを除去という工程を順番にたどる必要があるため、何らかの方法でアニメーションが終了するタイミングを通知&取得する必要があります。
・そこで、グラフ画面上で右クリックし、Event On Animation Finishedノードを検索して取り出します。アニメーションが終了した後の動作はPersistentレベルに記載しますので、先ほどと同じくイベントディスパッチャーの機能を使います。EVENT DISPATCHER欄にフェードイン、フェードアウト用のそれぞれを作成し、CallノードをEvent On Animation Finishedノードの後ろに二つ繋げます。
・Loading_Widgetにおける作業はここで終了なので、忘れずにコンパイル→上書き保存を行います。
・最初に変数を4つ、用意します。
①最初にボタンウィジェットを作成し、Add to Viewportで画面に表示させます。
※図には表示していませんが、ボタンをLoading Widgetよりも上に常に表示する場合はZOrderの数値を0よりも大きくセットします。
②ボタンのクリックイベントが発生したら、Loading_Widgetを作成し、画面に表示させたらそのままフェードアウトアニメーションを実行させます。
③フェードアウトアニメーションの終了通知を受け取ったら、現在のサブレベルをアンロードし、続いて次のサブレベルをロードします。
④サブレベルのロード後、現在のサブレベルの名前を変数に格納し、Delayノードでわずかに時間を遅らせてからShould Be Visibleノードにつないで画面への表示を行います。その後、Remove From ParentノードによってLoading Widgetを消し、ボタン下のテキストブロックに現在のサブレベル名を表示させます。
⑤Sequenceノードよりも後ろの部分はインデックス番号の増加の仕方を記述しています。ボタンを1回クリックするたびにインデックス番号が1増加しますが、今回は3つのサブレベル名を登録しているため2の次が0にまた戻ることになります。その処理をIndex BeforeとIndex Afterの両方で設定しています。
・ここまできたらコンパイルしてから上書き保存します。
ノードの切り替えに必要なすべてのサブレベルのブループリントに作成します。
⑥サブレベルを開いたら、Loading_Widgetを作成し、Add to Viewportノードで画面に表示してからフェードインアニメーションを再生します。
⑦アニメーション終了通知を受け取ったら、Remove from ParentノードによってLoading_Widgetを削除します。
・終わったら、コンパイルしてから上書き保存を行います。
























0 件のコメント:
コメントを投稿