【UE4】FirstPersonテンプレートで連射をする方法

# 補足
本記事は過去(2015-03-03)にブロマガで書いた記事の移植です。

<h1>はじめに</h1>
<br>
　本日からUE4の無料化がされましたね。いやぁすごい。<br>
僕がUE4を使い始めたのは去年の秋のCEDECが終わった辺りなんですけれども、<br>
サブスクリプション申し込んだ次の週くらいに学生は無料になって、<br>
気がついてみれば本日に至るわけでして。<br>
<br>
　というわけで僕はしがないただの大学生ですが、そんな奴が書いた記事でも需要も出てきそうなので、<br>
備忘録的な感じでUE4について書いていこうと思います。<br>
（なお本人は三日坊主なので(ry)）<br>
<h1>プロジェクトの準備</h1>
まずはテンプレートで<span style="color:rgb(255,0,0);">FirstPerson</span>を選びます。<br>
<br>
<img data-ubi="102692" src="http://bmimg.nicovideo.jp/image/ch2559076/102692/53b9f898c0fd7dbf642a0d2dfc36a43cd7ae02c9.jpg" width="680" alt=""><br>
<br>
はい、最初の画面です。<br>
<br>
ではまず準備をします。<br>
<span style="color:rgb(255,0,0);">編集＞プロジェクトの設定＞エンジン＞入力<span style="color:rgb(0,0,0);">を選択します。</span></span><br>
<br>
<img data-ubi="102704" src="http://bmimg.nicovideo.jp/image/ch2559076/102704/0898f433441377bf3fb933fc63141760782a18be.png" width="680" alt=""><br>
<br>
ここの<span style="color:rgb(255,0,0);">AxisMappings<span style="color:rgb(0,0,0);">の横にある「<span style="color:rgb(255,0,0);">＋</span>」をクリックして</span></span><br>
<br>
<img data-ubi="102705" src="http://bmimg.nicovideo.jp/image/ch2559076/102705/c2f49d36692f61ba4c1016fc480396a4be6c0c9e.png" width="680" alt=""><br>
<br>
図のように追加します。<br>
ちなみにこのAction/Axis <span style="color:rgb(0,0,0);">Mappingsなんですが、</span><br>
<span style="color:rgb(0,0,0);">キー等を押したか離されたかのみを返す/キーやその他デバイスを押した際の状況を変数でも返すの違いです。</span><br>
<span style="color:rgb(0,0,0);">ここで追加した項目は後で使います。</span><br>
<h1>Blueprintの編集</h1>
<br>
<span style="color:rgb(0,0,0);">次はBluePrintの編集です。</span><br>
<span style="color:rgb(0,0,0);">Content＞FirstPersonBP＞Blueprints＞FirstPersonCharacterを開きます。</span><br>
<br>
<span style="color:rgb(0,0,0);"><img data-ubi="102689" src="http://bmimg.nicovideo.jp/image/ch2559076/102689/dac9bfb275fc7de7fd727aad0eda5144ea332f42.png" height="400" alt=""></span><br>
<br>
<span style="color:rgb(0,0,0);">テンプレートって素晴らしい・・・</span><br>
<span style="color:rgb(0,0,0);">今回いじるのは一番下のSpawnProjectileです。</span><br>
<br>
<span style="color:rgb(0,0,0);"><img data-ubi="102688" src="http://bmimg.nicovideo.jp/image/ch2559076/102688/f1d566f3cc3495558a9d34b4ef19de35e8474d08.png" alt=""></span><br>
<br>
<span style="color:rgb(0,0,0);">イベント開始部分のInputActionFireを・・・</span><br>
<br>
<span style="color:rgb(0,0,0);"><img data-ubi="102695" src="http://bmimg.nicovideo.jp/image/ch2559076/102695/2dcd4ee8942199f02c8e27d978f4177919d358b5.png" alt=""></span><br>
<br>
<span style="color:rgb(0,0,0);">先ほど追加したInputAxisContinuityFireに変えます。</span><br>
<span style="color:rgb(0,0,0);">右クリックして「ContinuityFire」と打てばで出てきます。</span><br>
<br>
<span style="color:rgb(0,0,0);"><img data-ubi="102696" src="http://bmimg.nicovideo.jp/image/ch2559076/102696/829a4ab5e2f2feb5fb93d6ae2ddd32daea96d253.png" width="680" alt=""></span><br>
<br>
<span style="color:rgb(0,0,0);">それを図のように<span>不等号とブランチを</span>追加・配置します。</span><br>
<span style="color:rgb(0,0,0);">ここのContinuityFireから出てるAxisValueなんですが、<br>
今回の場合は<span style="color:rgb(255,0,0);"><span>押していない</span><span>間は0.0、押してる間は1.0</span></span>を返します。<br>
</span>元あったFireと違って押してる間は常にイベントが発生します。<br>
<br>
この状態でちょっと実行してみましょう！<br>
<span style="color:rgb(255,0,0);">注意：爆音がなります<br>
</span><br>
<img data-ubi="102697" src="http://bmimg.nicovideo.jp/image/ch2559076/102697/dd5eb90d27225e8242b8d552e72775e3252439c2.jpg" width="680" alt=""><br>
<br>
あわわわわ！なんだか凄いことに・・・<br>
それもそのはずマウスを押している間は常にイベントが発生しますので、<br>
初期設定だと秒間120発弾を発射しちゃいます。<br>
<br>
ではこれをフラグを使って制御してみましょう。<br>
<br>
<img data-ubi="102694" src="http://bmimg.nicovideo.jp/image/ch2559076/102694/87a3129bf09bf9bde33fb0cc148bad64051f0aa5.png" alt=""><br>
<br>
<span style="color:rgb(255,0,0);">Bool型のCanShot<span style="color:rgb(0,0,0);">という変数を追加します。</span></span><br>
<br>
<img data-ubi="102706" src="http://bmimg.nicovideo.jp/image/ch2559076/102706/e49f484ef9a45dfd4c838268c4d2d901b5582864.png" alt=""><br>
<br>
デフォルト値を<span style="color:rgb(255,0,0);">True<span style="color:rgb(0,0,0);">にしておきます。<br>
</span></span><br>
<img data-ubi="102699" src="http://bmimg.nicovideo.jp/image/ch2559076/102699/a5d3e6e25d8a3fb4b4e394253c5c8a926956eab2.png" width="680" alt=""><br>
<br>
ここに・・・<br>
<br>
<img data-ubi="102700" src="http://bmimg.nicovideo.jp/image/ch2559076/102700/8036bbbbc01857ad0c3d69424569fbbe5e5a44e6.png" alt=""><br>
<br>
図のように<span style="color:rgb(255,0,0);"><span>ブランチとGetCanShot</span></span>を追加します。<br>
<br>
このままだとずっとTrueなので結局さっきのような状況になってしまいますので、<br>
<br>
<img data-ubi="102701" src="http://bmimg.nicovideo.jp/image/ch2559076/102701/9ab4597f2aea5a7f4c995f52d5c0593130b2ec8e.png" alt=""><br>
<br>
フラグを<span style="color:rgb(255,0,0);"><span>False</span></span>にしてあげます。<br>
<br>
さてこれで実行してみましょう。<br>
<br>
<img data-ubi="102702" src="http://bmimg.nicovideo.jp/image/ch2559076/102702/d53eba233613ce3548b712fcc9573d601d2de45a.jpg" width="680" alt=""><br>
<br>
いくら長く押そうが連打しようが最初の一発しか出ません。<br>
このままだとCanShotが一回Falseになったら永遠にTrueにされる機会がありませんからね・・・<br>
<br>
ということで<span style="color:rgb(255,0,0);"><span>節度を守ってCanShotをTrueに</span></span>していこうと思います。<br>
方法はいたって簡単です。<br>
<br>
<img data-ubi="102698" src="http://bmimg.nicovideo.jp/image/ch2559076/102698/b0771a8ab40713997f6c1e1c8983aeb3f7115750.png" width="680" alt=""><br>
<br>
図のように<span style="color:rgb(255,0,0);"><span>最後にDelayとSetCanShotをTrueにするノード</span></span>を設置するだけです。<br>
こうすることによって、CanShotがDelayのDurationの値の秒数たつまでTrueになりません。<br>
よって最初のような秒間120発出ることなく適度に連射されます。<br>
ここのDurationの値を変更することによって発射間隔を変えることができます。<br>
<h1>おわりに</h1>
現在サークルの制作物をUE4で作っているわけなんですが、<br>
それに使っていたものを今回記事にいたしました。<br>
今後もこんなかんじに書けたらなーと思ってたり。<br>