視聴メモ「Spawn ノードを使って色んなものを出してみよう!」(2)
今回のメモの範囲(35:15 ~ End)
※ UE4(4.25.0)の初心者向け動画を視聴して、UE5(5.0.0早期アクセス)の学習をします
※ 全内容のメモではありません 学習者は元動画の視聴を強くお勧めします
※ 略記 UE = Unreal Engine , BP = Blueprint
Agenda
1. Spawnノードを使って弾を出してみよう!
1.1. Arrowコンポーネント
弾のBPにArrowコンポーネントを追加しておくと、どちらが前方かわかりやすくなる
Arrowの向きを変えても前方が変わるわけではない
1.2. Projectile Movementコンポーネント
- 弾のBPにProjectile Movementコンポーネントを追加
- Projectile MovementコンポーネントのInitial SpeedとMax Speedに任意の値を設定
- Projectile MovementコンポーネントのProjectile Gravity Scale(重力)を0に設定
- Projectile MovementコンポーネントのRotation Follows Velocityにチェック
Projectile Gravity Scaleは重力の設定(デフォルトは1.0)
デフォルト値のままだと弾は重力に引かれて落ちていく
Rotation Follows Velocityにチェックをいれておくことで
進んでいる方向にアクタの回転を調整してくれる
1.3. 弾がモノにあたったら跳ね返るようにする
- Box Collisionコンポーネントを追加
- Box Collisionコンポーネントをルートに変更(DefaultSceneRootにドラッグ&ドロップ)
- Box CollisionコンポーネントのコリジョンプリセットをBlockAllDynamicに変更
- Projectile MovementコンポーネントのShould Bounceにチェック
Box Collisionを利用せずにMesh(Sphere)をルートにしても再現できる
Box Collisionを利用すると弾のあたり判定を調節できるのが利点
Box Collisionの大きさはシェイプの値で調整する
4でShould Bounceにチェック入れない場合、弾は跳ね返らないで静止する
1.4. 大砲から弾を出す
1.4.1. Tickを使って弾を出す
- SpawnActorノードを配置してTickとリンク
- 大砲のBPにArrowコンポーネントを追加
- ビューポートでArrowの位置を調整(Arrowの位置を弾を出す位置として利用)
- Arrow -> GetWorldLocation -> SpawnActor(Spawn Transform Locationピン)リンク
- Arrow -> GetWorldRotation -> SpawnActor(Spawn Transform Rotationピン)リンク
- 大砲のBPのルート(BP_Cannon)を選択しTick Intervalの値を調整
SpawnActorノードにはCollision Handling Overrideという設定値がある
スポーンの際にコリジョンが発生場合の動作を指定できる
Defaultの場合は、アクタクラスのSpawn Collision Handling Methodの値が適用される
1.4.2. 効果音を鳴らす
上記のサイトはMP3形式で配布
UEはMP3に対応していないので何らかのツールでWAV形式に変換する
WAVファイルをコンテンツブラウザにドラッグ&ドロップする
必要ならば音声ファイルをダブルクリックして音量(Volume)の調整を行う
大砲のBPのSpawnActorノードの後にSpawn Soundノードをリンクする方法もあるが
弾のBPのBeginPlayにリンクする方法も同じ
1.4.3. 弾にエフェクトを追加する
弾のBPにParticleSystemコンポーネントを追加する
2. Tips
2.1. ある一定の範囲にランダムで弾を出す
Random Point in Bounding Boxノードを利用する
- BPを作成しBox Collisionコンポーネントを追加
- Box Collisionコンポーネントのシェイプの値を設定
- Arrowコンポーネントを追加
- Box -> GetWorldLocation -> Random Point in Bounding Box(Originピン)
- Box -> Box Extent-> Random Point in Bounding Box(Box Extentピン)
- Random Point in Bounding Box -> SpawnActor(Spawn Transform Locationピン)
- Arrow -> GetWorldRotation -> SpawnActor(Spawn Transform Rotationピン)
- SpawnActorノードのClassを選択
- Tick -> SpawnActor
2.2. 弾をホーミングさせる
レベルに配置した砲台から弾にサードパーソンの情報を引き継ぐのが肝
- 砲台のBPにThird Person型の変数Characterを作成(インスタンス編集可能)
- レベルに配置した砲台のCharacter変数にThirdPersonCharacterを設定
- 弾のBPにThird Person型の変数Characterを作成(インスタンス編集可能、スポーン時に公開)
- 砲台のBPのSpawnActor BP BulletにCharacterピン(3の手順で追加)に変数Characterをリンク
- 弾のBPにProjetile Movementコンポーネントを配置
- Projetile Movement -> Set Homing TargetComponent(ターゲットピン)
- Character -> Mesh -> Set Homing TargetComponent(Homing Target Componentピン)
- Projetile Movementの詳細パネルでIs Homing Projectileにチェック
- Projetile Movementの詳細パネルでHoming Acceleration Magnitudeの値を調整
7の手順、ホーミングの対象はアクタではなく、コンポーネントに対して指定する
7の手順でMeshを指定するとSkeltal Mesh Componentの原点である足元を狙ってくる
MeshをGetRootComponentに変更すると胴(ルートのArrow)を狙ってくる
2.3. 弾の寿命を設定する
弾のBPのルート(BP_Bullet)のInitial Life Spanで設定(秒)する
0(デフォルト)は寿命の設定なし
End Playノードで寿命が尽きた時にイベントを発生させることができる
ただしEnd PlayはDestroyActorの後にも呼ばれる