40. ブループリントクラス(インスタンス編集可能な変数)

目的

前回は既にあるクラスを継承し,新しい機能を追加したブループリントクラスを作り,ブループリントクラスからインスタンス(実体)を複数生成する方法を学んだ.ここでは,ブループリントクラスにインスタンス編集可能な変数を持たせ,インスタンス毎に異なる振る舞いができるようにする方法を学ぶ.また,インスタンス編集可能な変数の値を動的に変更することで,インスタンスの振る舞いを変える方法を学ぶ.

説明

インスタンス毎に異なる振る舞いをさせる

ここでは,左右に往復する球のクラスに往復する範囲を設定できるようにし,インスタンス毎に往復する範囲を変える例を通し,インスタンス編集可能な変数の使用方法を説明する.

ブループリントクラスを作る

まず,±1の範囲で左右に往復する球のブループリントクラスを作る.

インスタンス編集可能な変数を作る

左右に往復する範囲を指定できるように,ブループリントエディタでFloat型のRangeという名前のインスタンス編集可能な変数を作る.作り方は以下の通りである.

  • ブループリントエディタを開く.
  • マイブループリントパネルの変数サブタブでRangeという名前のFloat型の変数を作る.
  • マイブループリントパネルの変数サブタブの変数名の右にある目アイコンをクリックし,開いた状態にする.
  • あるいは,マイブループリントパネルの変数サブタブの変数名を選択し,詳細パネルの「インスタンス編集可能」にチェックを入れる.

指定した範囲で往復する球のイベントグラフを作る

±1の範囲で左右に往復する球の変位にRangeを掛け算することによって,Rangeで指定した範囲で球を左右に往復させることができる.

インスタンス毎に範囲を変える

異なる範囲で左右に往復する球のインスタンスを作るには以下のようにすればよい.

  • 複数のインスタンスを作成する.
  • ビューポートあるいはアウトライナで各インスタンスを選択し,詳細パネルの「デフォルト」の「Range」で異なる値を設定する.

インスタンスの振る舞いを動的に変える

ここでは,MovableSphereという名前の左右に往復する球のインスタンスがあり,インスタンス編集可能な変数Rangeで往復する範囲が設定できるものとする.Aキーを押すとMobableSphereの往復する範囲Rangeが大きくなるという例を通し,インスタンス編集可能な変数の値を動的に変える方法を説明する.

MovableSphereのインスタンス編集可能な変数Rangeの値を取得するGetRangeノードと,Rangeに値を設定するSetRangeノードの作り方は以下の通りである.

  • レベルブループリントのイベントグラフタブを開く.
  • MovableSphereのリファレンスを作る.
  • MovableSphereの変数出力ピンからマウス左ドラッグでコネクタを伸ばし,イベントグラフの空白部分でドラッグを終了する.
  • 「状況に合わせた表示」にチェックをつける.
  • 検索窓で「GetRange(あるいはSetRange)」と入力し,GetRange(あるいはSetRange)ノードを作る.

Aキーが押されたときに,GetRangeノードで取得した値を大きくし,SetRangeノードで設定するようにすればよい.

課題で使用するノード

SetPlayRateノードを使用すると,変数入力ピンNewRateで指定した値に応じてタイムラインの再生速度を変更することができる.ターゲット変数入力ピンにはターゲットとなるタイムラインコンポーネントを繋げばよい.例えば,TimelineIntensityという名前のタイムラインノードを作成した場合,マイブループリントタブの変数サブタブのコンポーネントに「TimelineIntensity」ができる.変数の値をGetするときと同様の方法で,このコンポーネントをGetし,TimelineIntensityノードをターゲットピンに繋げばよい.

課題

以下の新規ブループリントプロジェクトを作り,課題を行え.

  • ファーストパーソン
  • デスクトップ/コンソール
  • ハイエンド
  • スターターコンテンツ有り

設計図

課題0

設計図の通りに壁と床と部屋を作れ.

課題1

全ての部屋にテーブルと椅子とポイントライトを配置せよ.

課題2

部屋Aの入口で球が往復するようにせよ.その際,往復する範囲をインスタンス毎に指定できるようにせよ.

課題3

部屋Bの入口で炎に包まれた球が往復するようにせよ.その際,往復する範囲と方向(xかyか)をインスタンス毎に指定できるようにせよ.

課題4

部屋Cの椅子の上でポイントライトの明るさが周期的に変わるようにせよ.その際,明るさの範囲(最大値と最小値)をインスタンス毎に指定できるようにせよ.

課題5

部屋Dの四隅でスタンドランプの明るさが周期的に変わるようにせよ.その際,明るさの範囲(最大値と最小値)と周期をインスタンス毎に指定できるようにせよ.

課題6

部屋Eのドアが周期的に開閉するようにせよ.その際,ドアが開く角度をインスタンス毎に指定できるようにせよ.

課題7

部屋Fのドアが周期的に開閉するようにせよ.その際,ドアが開く角度と開閉する周期をインスタンス毎に指定できるようにせよ.

課題8

部屋Gと部屋Hに点滅するポイントライトを配置し,部屋に入る度にその部屋のポイントライトの点滅間隔が短くなるようにせよ.

課題9

部屋Gと部屋Hのテーブルの上に大きさが周期的に変わる炎を配置し,部屋に入る度にその部屋の炎の大きさが変わる範囲が大きくなり,別の部屋の炎の大きさが変わる範囲が小さくなるようにせよ.