前回からの続きです。
操作する Blocks が床についた後、キューブは BoardLayout 側で管理します。
Blocks 自体は前回作成した ShiftQueue で消えるので、BoardLayout の値を更新し Blocks が最後にいた座標に同型のキューブを表示させる処理が必要になります。
1.種類別のインスタンスメッシュの作成
今回は BoardLayout の値に対応するインスタンスメッシュを表示させる方法を取るため、まずはブロックの種類分(色分)のインスタンスメッシュを追加します。Tetris ブループリントを開き、Components → Add Component → Instanced Static Mesh を選択、追加したメッシュの Details → Static Mesh に BlockStaticMesh を指定します。
今作ったインスタンスメッシュをコピー&ペーストし、合計7つ同じものを作ります。
名前は Block02 ~ Block08 とつけました。
それぞれの Block0* インスタンスに着色していく処理を、Construction Script に追加します。
Construction Script の処理は ColorsOfType に値をセットしたところで終わっているので、そこから以下の処理を繋げます。
画像の見切れてしまっているところは、Block08 まで Create Dynamic Material Instance と Set Vector Parameter Value を繰り返しているだけです。
2.種類を指定するとそのメッシュが返ってくる関数の作成
各メッシュを数字で管理できるようにするため、種類の値を入力すると対応するメッシュを返してくれる関数を作ってしまいましょう。GetBlockMeshOfType という関数を作成し、Inputs と Outputs を以下のように設定。
変数名 | 型 | 説明 |
BlockType | Integer | Inputs |
Mesh | Instanced Static Mesh Component | Outputs |
処理は以下のように組みます。
3.Blocks が床に張り付き次の Blocks に操作がうつる処理の作成
それでは GetBlockMeshOfType を活用して、BoardLayout 側にキューブを置く関数を作りましょう。InsertControlledBlockToBoard という名前の関数を作成し、以下のように組みます。
Blocks の基点の現在地とそれに付随する各キューブの座標を取得して、BoardLayout の対応する座標に Blocks のタイプを入れていっています。同時にその座標にインスタンスメッシュを追加しています。
最後に Shift Queue を実行して、順番待ちの Blocks をコントロールできるようにしています。
レベル編集画面に戻り Blocks をダブルクリックで開き、DownBlocks 関数のグラフを開きます。
CheckPutBlock の判定処理で False だった場合は「これ以上下に進めない」ということなので、ここに InsertControlledBlockToBoard の実行処理を追加します。
それではテストプレイをしてみましょう。
テスト時はフィールドの大きさを小さくしたほうがやり易いので、レベル上に配置されている Tetris の Details → Default の各値を小さめにすると良いです。
ブロックがフィールドに置かれるようになりました。
-目次-
Part.00.説明
Part.01.キューブの作成
Part.02.フィールドの作成
Part.03.様々な形のブロックの作成
Part.04.カメラとブロックの配置
Part.05.ブロックの移動処理
Part.06.ブロックの接地処理
Part.07.ライン消去処理
Part.08.自動落下とゲームオーバー処理
Part.01.キューブの作成
Part.02.フィールドの作成
Part.03.様々な形のブロックの作成
Part.04.カメラとブロックの配置
Part.05.ブロックの移動処理
Part.06.ブロックの接地処理
Part.07.ライン消去処理
Part.08.自動落下とゲームオーバー処理
0 件のコメント:
コメントを投稿