学習ノート

学習者ゆえ、記事の内容は間違っていることもあります。ご了承ください。

視聴メモ「Spawn ノードを使って色んなものを出してみよう!」(2)

今回のメモの範囲(35:15 ~ End)


www.youtube.com

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コンポーネント

  1. 弾のBPにProjectile Movementコンポーネントを追加
  2. Projectile MovementコンポーネントのInitial SpeedとMax Speedに任意の値を設定
  3. Projectile MovementコンポーネントのProjectile Gravity Scale(重力)を0に設定
  4. Projectile MovementコンポーネントのRotation Follows Velocityにチェック

 

Projectile Gravity Scaleは重力の設定(デフォルトは1.0)

デフォルト値のままだと弾は重力に引かれて落ちていく

 

Rotation Follows Velocityにチェックをいれておくことで

進んでいる方向にアクタの回転を調整してくれる

 

1.3. 弾がモノにあたったら跳ね返るようにする

  1. Box Collisionコンポーネントを追加
  2. Box Collisionコンポーネントをルートに変更(DefaultSceneRootにドラッグ&ドロップ)
  3. Box CollisionコンポーネントコリジョンプリセットをBlockAllDynamicに変更
  4. Projectile MovementコンポーネントのShould Bounceにチェック

 

Box Collisionを利用せずにMesh(Sphere)をルートにしても再現できる

Box Collisionを利用すると弾のあたり判定を調節できるのが利点

Box Collisionの大きさはシェイプの値で調整する

 

4でShould Bounceにチェック入れない場合、弾は跳ね返らないで静止する

 

1.4. 大砲から弾を出す

1.4.1. Tickを使って弾を出す
  1. SpawnActorノードを配置してTickとリンク
  2. 大砲のBPにArrowコンポーネントを追加
  3. ビューポートでArrowの位置を調整(Arrowの位置を弾を出す位置として利用)
  4. Arrow -> GetWorldLocation -> SpawnActor(Spawn Transform Locationピン)リンク
  5. Arrow -> GetWorldRotation -> SpawnActor(Spawn Transform Rotationピン)リンク
  6. 大砲のBPのルート(BP_Cannon)を選択しTick Intervalの値を調整

 

SpawnActorノードにはCollision Handling Overrideという設定値がある

スポーンの際にコリジョンが発生場合の動作を指定できる

Defaultの場合は、アクタクラスのSpawn Collision Handling Methodの値が適用される

 

1.4.2. 効果音を鳴らす

soundeffect-lab.info

上記のサイトは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ノードを利用する

  1. BPを作成しBox Collisionコンポーネントを追加
  2. Box Collisionコンポーネントのシェイプの値を設定
  3. Arrowコンポーネントを追加
  4. Box -> GetWorldLocation -> Random Point in Bounding Box(Originピン)
  5. Box -> Box Extent-> Random Point in Bounding Box(Box Extentピン)
  6. Random Point in Bounding Box -> SpawnActor(Spawn Transform Locationピン)
  7. Arrow -> GetWorldRotation -> SpawnActor(Spawn Transform Rotationピン)
  8. SpawnActorノードのClassを選択
  9. Tick -> SpawnActor

 

2.2. 弾をホーミングさせる

レベルに配置した砲台から弾にサードパーソンの情報を引き継ぐのが肝

  1. 砲台のBPにThird Person型の変数Characterを作成(インスタンス編集可能)
  2. レベルに配置した砲台のCharacter変数にThirdPersonCharacterを設定
  3. 弾のBPにThird Person型の変数Characterを作成(インスタンス編集可能、スポーン時に公開)
  4. 砲台のBPのSpawnActor BP BulletにCharacterピン(3の手順で追加)に変数Characterをリンク
  5. 弾のBPにProjetile Movementコンポーネントを配置
  6. Projetile Movement -> Set Homing TargetComponent(ターゲットピン)
  7. Character -> Mesh -> Set Homing TargetComponent(Homing Target Componentピン)
  8. Projetile Movementの詳細パネルでIs Homing Projectileにチェック
  9. 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の後にも呼ばれる