UE4 ガンシューティングゲームを作ろう!その3 敵の作成

f:id:YumaDogidogi:20150819032454p:plain

はい!今回は前回の宣言通り、敵を作っていこうと思います。敵を弾で撃ったらHPが減っていって倒せるようにしましょう。これができたら結構ゲームらしくなってくると思います。

それでは張り切っていきましょう!!

 

今のガンシューティングゲーム(プロジェクト)には敵の素材がまだ入っていません。ブロックを組み合わせて作ってみてもいいのですが、今回は公式様の素晴らしい素材を使わしていただいてウハウハしたいと思います。パソコンをネットにつないでください。

いつもUE4を起動するときに開くランチャを開きます。そこで左側にあるマーケットプレイスをクリックします。

f:id:YumaDogidogi:20150811164618p:plainするとたくさんのアセットが出てきます。これらは本当にすごいので、気に入ったものがあったら購入をオススメします。

今回は現在2015年8月にマーケットプレイスにEpic Games様が出されている無料のアニメーションスターターパックを使わせていただきたいと思います。アニメーションスターターパックをクリックしてください。

f:id:YumaDogidogi:20150811163955p:plainすると画像ではダウンロードになっていますが、画面右側の無料ボタンを押してください。するとダウンロードボタンが出てくるので、クリックしましょう。

ダウンロードが終わったらプロジェクトへ追加が出てくるので、クリックします。

f:id:YumaDogidogi:20150811165454p:plainするとどのプロジェクトへ追加するかが出てきます。ここではGunShootingを選択し、プロジェクトに追加ボタンを押します。これでGunShootingにアニメーションスターターパックが追加されました。

 

それではエディタを開いてください。コンテンツブラウザを確認すると、AnimStarterPackというファイルが追加されているのが確認できます。

f:id:YumaDogidogi:20150811165724p:plainこちらのアセットは、名前通りキャラクターのアニメーションがたくさん入っています。今回はこちらを使用して敵を作っていきます。

では敵を作っていきます。いつも通りビューポート上部にあるブループリントからブループリントを新規作成します。今回はCharacterを選びます。

f:id:YumaDogidogi:20150811170231p:plain

BPエディタ画面が開きますので、左側にあるMeshをクリックします。そうすると画面右側に詳細タブが出てきます。ここでAnimationの欄のAnimation ModeをUse Animation Assetにします。さらにそこから下にあるMeshの欄のSkeletal MeshをHeroTPPにします。

f:id:YumaDogidogi:20150811170757p:plainそうしましたら画像のようにMesh(ここでは人型のモデル)が、薄ピンクの楕円の中に納まるように調整します。

位置を移動するときはPlayer StartやSplineを動かした時と同じように、真ん中の画面の上部にある十字ボタンを押して、3本の軸をドラッグすることで移動させることができます。(3本の軸が出てこない方は画面左のMeshが選択されていない可能性があります。Meshを選択した状態で位置や大きさを変えましょう)

大きさを変えるときは十字ボタンの2つ右にある2本の矢印ボタンを押します。これも3つの軸をドラッグすることでx,y,zそれぞれの方向の大きさを変えることができます。x,y,zの比率を保ったままサイズを変えるときは、3つの軸が交わっている白い点にポインターを合わせ、3つの軸が黄色くなった時にクリックし、ドラッグすると比率を保ったまま大きさを変えることができます。

次はアニメーションをつけます。Anim to Playの右にある▼ボタンを押すと、アニメが選べます。ここでは敵の初期のアニメを選びましょう。私は止まっている敵を作るので、Idle_Rifle_Ironsightsを選びました。ライフルを構えていますね。

f:id:YumaDogidogi:20150811175028p:plain

ピンクの楕円は当たり判定ですMeshにも当たり判定があるのですが、今回はこちらを判定に使っていきます。

ではMyLevelに戻ってコンテンツブラウザからドラッグ&ドロップして敵を設置してみましょう。画像では2体目を配置しようとしています。このように複数対出すこともできます。

f:id:YumaDogidogi:20150811175740p:plainではプレイしてみましょう。弾を撃ってみてください。弾がはじかれてしまいますね。当たり判定はしっかりとあるのですが、当たったら何をするということがまだ設定されていません。ではブループリントで設定してみましょう。

MyEnemyのBPに戻ってもらいまして、画面左側のCapsuleComponentを右クリックします、そこからイベントを追加→OnComponentHitを選びましょう。

f:id:YumaDogidogi:20150811180319p:plainするとOnComponentHitのノードが作られます。そこから線を伸ばして適当なところで離します。

今回は弾に当たったときのアクションを追加したいので、弾のBPであるFirstPersonProjectileへキャストするを選択します。

f:id:YumaDogidogi:20150811180710p:plainキャストノードができましたら、画像のようにOther ActorとObjectをつなぎ、そしてキャストノードの一番右上から線を引っ張ってPlayAnimationを出しましょう。

f:id:YumaDogidogi:20150811182128p:plainPlay AnimationノードのNew Anim to Playの欄があるので、弾に当たったときのアクションを選びましょう。Reactと検索すると、くらいモーションが出てきます。僕はHit_React_4にしました。お好みでどうぞ。

真ん中画面左上のコンパイルボタンを押して、プレイしてみてください。手間を充てると敵が暗いモーションをしてくれるようになりました。

 

では次は倒せるようにしましょう。前回の復習です。Float型の変数HPを作ります。

編集可能にチェックを入れます。

コンパイルボタンを押してコンパイルすると、デフォルト値が決められるようになるので、とりあえず5にします。

f:id:YumaDogidogi:20150811183535p:plain画面左側の変数の欄のHPを真ん中の画面にドラッグ&ドロップし、取得(Get)と値の取得(Set)を出します。そして画像の緑で囲っているようにつなげてみてください。これでHPがマイナスされるようになりました。

次はHPが0以下か0大きいかでで処理を変えるようにしましょう。

キャストノードから線を引っ張り、「if」もしくは「ブランチ」と検索してブランチノードを出しましょう。

f:id:YumaDogidogi:20150811184259p:plain

まずHPを取得します。そこから線を出して離し、「>」と検索して、Float>floatを出します。このノードは2つの値を比較し、上につながれた値(HP)>下につながれた値(今回は数値をダイレクトに指定して0にしています)が正しければ、「True」を返し、違えば「False」を赤い線から送り出します。

f:id:YumaDogidogi:20150811184819p:plainブランチはその赤い線を受け取って、Trueであれば右側の上の線を実行し、Falseであれば下の線を実行します。

ブランチは本当によく使うので覚えておきましょう。(プログラミングをしたことがある人はわかるかと思いますが、if-else文と同じです。

ノードがごちゃごちゃしてきた人は、左ドラッグで範囲を選択して手を放した後、左ドラッグをすることで一気にノードを動かせます。左ドラッグだけで1つずつ動かすこともできます。見やすいように調整しましょう。

f:id:YumaDogidogi:20150811190028p:plainではHPが0以下になったときの処理を書いていきましょう。Falseから線を出し、Play Animationを出します。今回は敵には倒れてほしいので、deathと検索し、Deathを選びます。僕はDeath_1を選びました。こちらもお好みでどうぞ。

f:id:YumaDogidogi:20150811190747p:plainここまでできたらコンパイルをしてプレイしてみましょう。6回撃つと倒れてくれるようになりましたね!しかし倒れた後に撃つともう一度倒れてしまいますね。こちらを直していきましょう。

様々な方法がありますが、今回は先ほどの薄ピンクの楕円の当たり判定を消してしまいましょう。

下の画像のように線を引っ張りSet Collision Enabled(CapsuleComponent)を出します。

f:id:YumaDogidogi:20150811192159p:plainノードが出てきましたらNew TypeをNo Collisionにしましょう。Collisionというのは当たり判定です。それをNoにすることで当たり判定をなくしています。

f:id:YumaDogidogi:20150811193456p:plain

さあコンパイルしてプレイしてみましょう。ちゃんと倒れた後にもう一度倒れなくなっていて、Meshの当たり判定は残っているおかげで弾は跳ね返ってきますね。

 

さて、これでガンシューティングの基礎は完成しました!おめでとうございます!!!好きなマップを作って、コースを作って敵を配置して楽しんでください。

しかしこれからも要素を追加することで様々なUE4の機能を紹介していこうと思いますので、よろしくお願いします。

 

今回はもう少し続きます。

次は敵に当たった瞬間に弾が消えて、爆発のエフェクトが出て、音が鳴るようにしましょう。以下の画像のようなノードを追加します。(すぐ後にこれらの詳細を書きます)

f:id:YumaDogidogi:20150814203158p:plain

まず弾が消えるようにします。先ほどブランチノードを間に追加したのと同じように、キャストノードとブランチノードの間にDestroy Component(Projectile)を追加します。つながっている線を切りたいときはAltキーを押しながら線が出てきているところをクリックします。

f:id:YumaDogidogi:20150814203733p:plainDestroyは破壊という意味です。Projectileというのは弾の事なので、弾を壊すという意味になります。それを敵と弾が当たったときに実行するので、弾が当たって消えるようになるということです。そして下の画像のようにしっかりと青い線をつなぎましょう。

次は音が鳴るようにします。DestroyノードからPlay Sound at Locationを出します。これは指定した場所(Location)から音を鳴らすことができるノードです。今回は爆発の音を鳴らすので、Explosion01を選びました。

f:id:YumaDogidogi:20150814204746p:plainそしてキャストノードの一番右下から青い線を引っ張り、Get Actor Locationを出します。これは物体やキャラクターの位置を取得することができるノードです。それをPlay Sound at Locationにつなげることで、弾が爆発した位置から音を鳴らすようにしています。

次は爆発エフェクトが出るようにします。Play Soundノードから線を引っ張り、spawnと検索し、「クラスからアクタをスポーンします」を選びます。

スポーンとは産むという意味があります。つまりアクタ(物体やキャラクターやエフェクト)を発生させるノードになります。

f:id:YumaDogidogi:20150814205656p:plain

今回は爆発を出すので、Classの部分をBlueprint_Effect_Explosionにしました。

f:id:YumaDogidogi:20150814210324p:plain

Spawn Transformにこのように線をつなげて離します。すると自動でノードが作成されます。ここではどこにActorを発生するかを決めることができます。

f:id:YumaDogidogi:20150814211057p:plain最後に忘れずにブランチノードに線をつなぎます。

f:id:YumaDogidogi:20150814211441p:plain

これで完成です!コンパイルをしてゲームを始めてみてください。

最後に敵によってマテリアルを変えたり、HPを変えたりします。

マテリアルを変える方法は、コンテンツブラウザでMaterialsというファイルを検索します。そのファイルを開くと、マテリアルがあるので、それをマップに設置した敵にドラッグ&ドロップします。これで敵のマテリアルが変えられます。

f:id:YumaDogidogi:20150814212823p:plainHPを変えるには、ブループリントで変数HPを編集可能にしておきましょう。(この記事通りに作っていればなっているはずです)

f:id:YumaDogidogi:20150814213239p:plainマップに設置した敵を選択した状態で画面右にある詳細からDefaultを探します。そこにHPとあるので、そこの値を変えるとHPが変えられます。

 

 

今回はここまでです、お疲れさまでした!弾が敵に当たると爆発して音が鳴り、弾が消えますね。これで一気にクオリティが上がりました。好きに敵を配置して遊んでみてください。

マーケットプレイスからアセットを入手しました

・Characterを新規作成しました

・物体の大きさを変えました

・アニメーションを設定しました

・物体同士が当たったときのイベントを作りました

・ブランチ(if文)を使いました

・当たり判定(コリジョン)をなくしました

・Actorを消しました

・エフェクトを出しました

・音を鳴らしました

・Actorのマテリアルを変えました

・敵によってそれぞれのHPを持たせました。

 

次回はある物体を見ることによってイベントを発生させる、視線選択をしていきたいと思います(こちらのぶっさん様の記事を参考にさせていただきます)。かなりブループリントをいじるので、前回や今回でやったことをよく覚えておきましょう。

では、今回はこの辺で!

UE4 ガンシューティングゲームを作ろう!その4 - YumaDogidogi’s blog