春日部つむぎ no ゲーム作ってみよう!【UE5/UE4】 - アクターの配置(直線配列とランダム配列)【UE5/UE4】


https://youtu.be/aUwCYlUegNE?si=HSwXsnfRFWOq-BJR

00:00 オープニング
00:45 1.直線配列
01:00 1-1.配置するStaticMeshの個数の指定
01:42 1-2.StaticMeshの指定
02:24 1-3.StaticMeshの配置処理
02:47 1-4.配置間隔の指定
03:14 1-5.Transformの指定
04:11 1-6.レベルに配置
05:00 2.ランダム配列
05:15 2-1.配置するStaticMeshの個数の指定
05:57 2-2.StaticMeshの指定
06:30 2-3.配置範囲の指定
07:03 2-4.StaticMeshの配置処理
07:25 2-5.ランダム配置の指定
08:07 2-6.レベルに配置
08:35 3.コンストラクションスクリプトとは?
08:57 4.EventBeginPlayとの違いは?
09:25 設定ファイル
09:32 エンディング

1.直線配列 00:45

スタティックメッシュを直線上に等間隔に配置します。

右クリック>ブループリントクラス>Actorで、
名前を「BP_LinearArrays」にします。

ファイルを開きます。

1-1.配置するStaticMeshの個数の指定 01:00

今回はイベントグラフではなくて、
Construction Scriptに記載していきます。

For Loopノードをつなぎます。

変数を追加します。
変数Count Integer型
変数名CountをInteger型で追加します。
インスタンス編集可能を有効にします。
コンパイルしてデフォルト値を「1」にします。

変数Count Getノードを配置します。

For LoopノードのFirst Indexピンが「0」から始まっているので
「1」引いてLast Indexピンにつなぎます。

Countで指定した数だけFor Loopノード以降の処理が行われます。

1-2.StaticMeshの指定 01:42

コンポーネントを追加します。
「+」追加より
[InstancedStaticMesh]を追加します。
Instanced Static Meshは、
共通部分はそのままに、違う部分だけを差し替えて描画してくれるもの(インスタンシング描画)です。
CPU負荷を最小限に抑えられます。

InstancedStaticMeshをドラッグアンドドロップで配置します。
InstancedStaticMeshより
Set Static Meshノードを配置します。
NewMeshピンを右クリックで変数に昇格します。
名前をStaticMeshにします。
インスタンス編集可能を有効にします。

Set Static MeshノードをFor LoopノードのLoop Bodyピンにつなぎます。

1-3.StaticMeshの配置処理 02:24

InstancedStaticMeshコンポーネントに指定した
スタティックメッシュをビューポートに配置する処理を作成します。

InstancedStaticMeshをドラッグアンドドロップで配置します。

InstancedStaticMeshより
Add Instanceノードを配置します。

Set Static Meshノードにつなぎます。

1-4.配置間隔の指定 02:47

For LoopノードのIndexピンよりMultiplyノードを配置します。
変数を追加します。
変数Distance Float型
変数名DistanceをFloat型で追加します。
インスタンス編集可能を有効にします。
コンパイルして
デフォルト値を「100」にします。

変数Distance GetノードをMultiplyノードにつなぎます。

1-5.Transformの指定 03:14

Make Transformノードを配置します。
Location、Rotation、Scaleピンそれぞれを変数に昇格します。
それぞれのインスタンス編集可能を有効にします。
コンパイルしてデフォルト値を
Locationは「1.0」、「0.0」、「0.0」にします。
Rotationはそのまま「0.0」、「0.0」、「0.0」にします。
Scaleはすべて「1.0」、「1.0」、「1.0」にします。

配置間隔のMultiplyノードよりMultiplyノードをつなぎます。
下のピンをVectorに変更します。

変数Locationを切断して
Multiplyノードの下のピンにつなぎます。
MultiplyノードをMake TransformノードのLocationにつなぎます。

Returm ValueをAdd InstanceノードのInstance Transformピンにつなぎます。

コンパイルして保存します。

1-6.レベルに配置 04:11

BP_LinearArraysをレベルに配置します。

StaticMeshを指定します。

Countで配置するStaticMeshの個数を指定します。
Distanceで配置間隔を指定します。
LocationでX軸、Y軸、Z軸を指定します。
Rotationで向きを指定します。
Scaleで大きさを指定します。

2.ランダム配列 05:00

スタティックメッシュを特定の範囲内にランダムに配置します。

右クリック>ブループリントクラス>Actorで、
名前を「BP_RandomArrays」にします。

ファイルを開きます。

2-1.配置するStaticMeshの個数の指定 05:15

Construction Scriptに記載していきます。

For Loopノードをつなぎます。

変数を追加します。
変数Count Integer型
変数名CountをInteger型で追加します。
インスタンス編集可能を有効にします。
コンパイルしてデフォルト値を「1」にします。

変数Count Getノードを配置します。

For LoopノードのFirst Indexピンが「0」から始まっているので
「1」引いてLast Indexピンにつなぎます。

Countで指定した数だけFor Loopノード以降の処理が行われます。

2-2.StaticMeshの指定 05:57

コンポーネントを追加します。
「+」追加より
[InstancedStaticMesh]を追加します。

InstancedStaticMeshをドラッグアンドドロップで配置します。
InstancedStaticMeshより
Set Static Meshノードを配置します。
NewMeshピンを右クリックで変数に昇格します。
名前をStaticMeshにします。
インスタンス編集可能を有効にします。

Set Static MeshノードをFor LoopノードのLoop Bodyピンにつなぎます。

2-3.配置範囲の指定 06:30

コンポーネントを追加します。
「+」追加より
[Box Collision]を追加します。

[Box Collision]を配置します。

[Box Collision]よりSet Box Extentノードを配置します。

In Box Extentピンを右クリックで『変数へ昇格』します。
インスタンス編集可能を有効にします。
コンパイルしてデフォルト値を「100:100:0」にします。

Set Box ExtentノードをSet Static Meshノードにつなぎます。

2-4.StaticMeshの配置処理 07:03

InstancedStaticMeshコンポーネントに指定した
スタティックメッシュをビューポートに配置する処理を作成します。

InstancedStaticMeshをドラッグアンドドロップで配置します。

InstancedStaticMeshより
Add Instanceノードを配置します。

Set Box Extentノードにつなぎます。

2-5.ランダム配置の指定 07:25

Random Point in Bounding Boxノードを配置します。
変数In Box Extent Getノードを配置します。
Half Sizeピンにつなぎます。

Make Transformノードを配置します。
Locationピンに
Random Point in Bounding Boxノードをつなぎます。

Rotation、Scaleピンそれぞれを変数に昇格します。
それぞれのインスタンス編集可能を有効にします。
コンパイルしてデフォルト値を
Rotationはそのまま「0.0」、「0.0」、「0.0」にします。
Scaleはすべて「1.0」、「1.0」、「1.0」にします。
Returm ValueをAdd InstanceノードのInstance Transformピンにつなぎます。

コンパイルして保存します。

2-6.レベルに配置 08:07

BP_RandomArraysをレベルに配置します。

StaticMeshを指定します。

Countで配置するStaticMeshの個数を指定します。
In Box Extentで配置範囲を指定します。
Rotationで向きを指定します。
Scaleで大きさを指定します。

3.コンストラクションスクリプトとは? 08:35

レベルに配置した時に処理されます。
場所を動かしたり、変数を変更したりするとその場で処理されます。
ゲーム起動前に確認できるので、環境構築には最適です。

4.EventBeginPlayとの違いは? 08:57

レベルに配置した時には処理されません。
ゲーム起動後、アクターが配置された後に処理されます。

配置個数が多い場合はゲームを起動すると一気に処理が走りますので、
その時はコンストラクションスクリプトに記載する方がいいです。

設定ファイル 09:25

■BP_LinearArrays


■BP_RandomArrays

ゲームのステージ構築(レベルデザイン)を行うメリットとは?

プレイヤーの興味を引きつける
 ステージを工夫することで、プレイヤーがゲームに没頭しやすくなります。

ゲームの難易度を調整する
 ステージの難易度を調整することで、プレイヤーに目標を持たせることができます。

ゲームの長さを調整する
 ステージの数を調整することで、ゲーム時間を調整することができます。

ゲームのストーリーを進める
 ステージにストーリーを盛り込むことで、ステージを通じてストーリーを楽しむことができます。

プレイヤーのスキルを向上させる
 ステージを工夫することで、プレイヤーのスキルを向上させることができます。

以上のようなメリットがあるようです。