ネリスさん備忘録

主にUE4の備忘録を残すよ!

【UE4】3Dのサイドスクロールアクションゲームを作ろう!【第二回】

lunanelis.hatenablog.com

続きです。

今回は攻撃を実装していきます。

結果的にこうなる

 

youtu.be

 

 目次

 

 

弾を作ろう

攻撃手段はショットだからまず必要なのは弾。

コンテンツブラウザで右クリックしブループリントクラスを選びActorを作成
名前はBP_Bulletにしておこう

f:id:LunaNelis:20210409030247p:plain
f:id:LunaNelis:20210409030406p:plain

BP_Bulletを開いてもまだ何もないため、まずは弾の見た目を付ける。
コンポーネントを追加からを選ぶとビューポートに白い球が出てくる。
これが今回の弾の見た目となる。

f:id:LunaNelis:20210409030732p:plain

同じようにしてSphereCollisionも追加する。
これが弾の当たり判定となる。
この二つを追加することで、見た目と当たり判定がそろった。

f:id:LunaNelis:20210409031129p:plain

ただ、このままだと弾がでかいのでいい感じに小さくする

Sphereを選択してトランスフォーム拡大縮小0.2ぐらいにしておくとちょうどいい感じのサイズになってくれる。
また、当たり判定のほうもシェイプSphereRadius16ぐらいにしておくとちょうどよくなる。

f:id:LunaNelis:20210409031328p:plainf:id:LunaNelis:20210409031650p:plain

また、Sphereにはデフォルトで当たり判定が存在し、キャラクターを押し返してしまうので、当たり判定をなくす。
Sphereの子リジョン設定のコリジョンプリセットNoCollisionに変更。
これでキャラクターがぶつかって押しのけられることはなくなる。

f:id:LunaNelis:20210411230733p:plain

弾を動かそう

さて、見た目は問題なくなったところでワールドに配置してプレイしてみると
動いてないことに気づく。そう、弾なのに進んでないのだ。

それもそのはず、弾が移動する処理を書いていないから。

というわけで弾が前に直進する処理を実装していく。

f:id:LunaNelis:20210412002131p:plain

処理の内容は、正面に向かって進む。これの役割がわかるのは後でだけど、2D3D関わらず正面に進むという実装は大事。

あと、速度を簡単に調整できるように、速度を変数にする
変数の「+」を押して変数を追加して設定を

f:id:LunaNelis:20210412003412p:plain

そしてFloat型にしてちょろっと設定する

f:id:LunaNelis:20210412003532p:plain

そして繋ぐ。

f:id:LunaNelis:20210412005608p:plain

また、このままだと無限に飛んで行ってしまうため一定時間で消えるように設定しておく。
必須というわけではないが、作法のようなものなのでとりあえずマネしておいてね

f:id:LunaNelis:20210412012232p:plain

これで弾が飛ぶようになったので次は実際に発射してみる。

弾を発射しよう

弾を発射するにあたって、まず入力が足りない。
「ショットをするためのボタン」が設定されていないので、それを設定する。 

プロジェクト設定を開き…

f:id:LunaNelis:20210412005938p:plain

左のリストからインプットを選択し、バインディングアクションマッピングを開く。

f:id:LunaNelis:20210412010013p:plain

右の「+」でアクションマッピングを一つ追加し、マウスの左ボタンを設定する。

f:id:LunaNelis:20210412010140p:plain

それが終わったらキャラクターに発射の処理を書く。
開くのはSideScrollCharacterのブループリント。その中のイベントグラフに記述する
どれ?って人は[SideScrollerBP/Blueprints]の中にあるから探してみよう

f:id:LunaNelis:20210412010811p:plain

何もないところで右クリックして「Shot」と入れればさっき追加した入力設定が出てくるはずなので、選択する

f:id:LunaNelis:20210412011035p:plain

そしてこんな感じに処理を書く。
SpawnActorでClassの場所に今回作ったBP_Bulletクラスを設定。
Shotに設定したボタンが押されたら、弾をプレイヤーの位置から、プレイヤーの向きで生成するという処理。
GetActorTransformの中には座標・向き・拡縮率が入っている。

f:id:LunaNelis:20210412011127p:plain

これにより、生成された弾の正面はプレイヤーの向きと同じになるため、弾はキャラクターの向いている方向に向かって飛んでいく。

キャラクターの方向に弾が飛ぶなんて常識じゃん。頭おかしいんか?って思うかもしれないけど、X方向に向かって進む。とか書くとキャラの背中から弾が出てきたりするからね。
良い子はこんな処理書いちゃダメだぞ

f:id:LunaNelis:20210412013703p:plain




ここまで問題なければ、こんな感じに動くはず。
ロックマンみが増してきた

youtu.be

 

- 次回予告 -

今回はここまで。

プレイヤーが能動的に弾を発射できるようになったので敵を倒せる準備ができた。
しかし
モーションもなく腹から弾が出てくるのはどうなん…?
と思われても仕方ないので、次回はプレイヤーのモーションを設定してちゃんと弾を発射してるっぽい動きにする。