オススメ機能
Twitter
鐃緒申��申鐃初姐�渇����鐃醇�鐃緒申鐃緒申膣�申����鐃初��膩��渇��膩��鰹申鐃緒申鐃初����鐃緒申��申鐃醇�鐃緒申��申鐃醇�鐃緒申��申鐃醇�鐃緒申��申鐃初姐�渇����鐃醇�鐃緒申鐃緒申膣�申����鐃初��膩��鰹申鐃順�渇����鐃初��膩��渇��膩��鰹申鐃処��申鐃初姐�渇����鐃醇�鐃緒申鐃緒申膣�申����鐃初��膩��渇��膩��鰹申鐃緒申鐃初����鐃緒申��申鐃醇�鐃緒申��申鐃初姐�渇��膩��渇����鐃緒申��申鐃初姐�渇����鐃醇�鐃緒申鐃緒申膣�申����鐃初��膩��渇��膩��鰹申鐃緒申鐃初����鐃緒申��申鐃醇�鐃緒申��申鐃醇柑鐃緒��鰹申薜合�渇��膩��渇����鐃緒申鐃緒申��膩��鰹申鐃順�渇����紮�鐃醇�鐃緒申��申鐃醇��牡��膩��括�鐃初��膩��渇��膩��鰹申鐃処��申鐃初姐�渇����鐃醇�鐃緒申鐃緒申膣�申����鐃初��膩��渇��膩��鰹申鐃処��申鐃初姐�渇����鐃緒申��鐃�
記事履歴
ランキング
お気に入りタイトル/ワード

タイトル/ワード名(記事数)

    鐃緒申��申鐃初姐�渇����鐃醇�鐃緒申鐃緒申膣�申����鐃初��膩��鰹申鐃順�渇����鐃初��膩��渇��膩��鰹申鐃処��申鐃醇�鐃緒申��申鐃初姐�渇��膩��渇����鐃緒申��申鐃初姐�渇����鐃醇�鐃緒申鐃緒申膣�申����鐃初��膩��渇��膩��鰹申鐃緒申鐃初����鐃緒申��申鐃醇�鐃緒申��申鐃初姐�渇��膩��渇����鐃緒申��申鐃初姐�渇����鐃醇�鐃緒申鐃緒申膣�申����鐃初��膩��渇��膩��鰹申鐃緒申鐃初����鐃緒申��申鐃醇�鐃緒申��申鐃初姐�渇��膩��渇����鐃緒申��申鐃初姐�渇����鐃醇�鐃緒申鐃緒申膣�申����鐃初��膩��渇��膩��鰹申鐃緒申鐃初����鐃緒申��申鐃醇�鐃緒申��申鐃初姐�渇��膩��渇����鐃緒申��申鐃初姐�渇����鐃醇�鐃緒申鐃緒申����鐃緒申��申鐃初姐�渇����鐃醇�鐃緒申鐃緒申膣�申����鐃初��膩��鰹申鐃順�渇����鐃初��膩��渇��膩��鰹申鐃処��申鐃初姐�渇����鐃醇�鐃緒申鐃緒申膣�申����鐃初��膩��渇��膩��鰹申鐃緒申鐃初����鐃緒申��申鐃醇�鐃緒申��申鐃初姐�渇��膩��渇����鐃緒申��申鐃初姐�渇����鐃醇�鐃緒申鐃緒申����鐃緒申��申鐃初姐�渇����鐃醇�鐃緒申鐃緒申����鐃緒申��申鐃初姐�渇����鐃初姐�括貴鐃緒申薜合�渇��膩��渇����������鐃緒申鐃緒申����鐃緒申��申鐃醇�鐃緒申��申鐃初姐�括�鐃初��膩��渇��膩��鰹申鐃緒申鐃初����鐃緒申��申鐃醇�鐃緒申��申鐃初姐�渇��膩��渇����鐃緒申��申鐃初姐�渇����鐃醇�鐃緒申鐃緒申膣�申����鐃初��膩��渇��膩��鰹申鐃緒申鐃初����鐃緒申��申鐃醇�鐃緒申��申鐃初姐�渇��膩��渇����鐃緒申��申鐃初姐�渇����鐃醇�鐃緒申鐃緒申膣�申����鐃初��膩��渇��膩��鰹申鐃緒申鐃初����鐃緒申��申鐃醇�鐃緒申��申鐃初姐�渇��膩��渇����鐃緒申��申鐃初姐�渇����鐃醇�鐃緒申鐃緒申����鐃緒申��申鐃醇�鐃緒申��申鐃初姐�渇��膩��渇����鐃緒申��申鐃初姐�渇����鐃醇�鐃緒申鐃緒申����鐃緒申��申鐃初姐�渇����鐃醇�鐃緒申鐃緒申膣�申����鐃初��膩��鰹申鐃緒申絮��渇��膩��括�鐃初��膩��渇��膩��鰹申羝�鐃緒申鐃緒申����鐃初��膩��渇��膩��活�o申�鰹申鐃緒申鐃初����鐃緒申��申鐃醇�鐃緒申��申鐃初姐�括�鐃初��膩��渇��膩��鰹申鐃緒申鐃初����鐃緒申��申鐃醇�鐃緒申��申鐃初姐�渇��膩��渇����鐃緒申��申鐃初姐�渇����鐃醇�鐃緒申鐃緒申膣�申����鐃初��膩��渇��膩��鰹申鐃緒申鐃初����鐃緒申��申鐃初姐�渇����鐃醇�鐃緒申��申鐃緒申/鐃緒申��申鐃初姐�渇����鐃醇�鐃緒申鐃緒申膣�申����鐃初��膩��鰹申鐃緒申絮��渇��膩��括�鐃初��膩��鰹申鐃順�渇����鐃初��膩��渇��膩��鰹申鐃処��申鐃初姐�渇����鐃醇�鐃緒申鐃緒申����鐃緒申��申鐃初姐�渇����鐃醇�鐃緒申鐃緒申膣�申��������膩��渇��膩��鰹申鐃緒申鐃初����鐃緒申��申鐃初姐�渇����鐃醇�鐃緒申鐃緒申��膩��鰹申薜合�渇��膩��渇����鐃緒申��申鐃初姐�渇����鐃醇�鐃緒申鐃緒申膣�申����鐃初��膩��渇��膩��鰹申鐃緒申鐃初����鐃緒申��申鐃醇�鐃緒申��申鐃醇柑鐃緒��鰹申薜合�渇��膩��渇����������鐃緒申鐃緒申����鐃緒申��申鐃初姐�渇����鐃醇�鐃緒申鐃緒申��膩��鰹申薜合�渇��膩��渇����鐃緒申��申鐃初姐�渇����鐃醇�鐃緒申鐃緒申膣�申����鐃初��膩��渇��膩��鰹申鐃緒申鐃初����鐃緒申��申鐃醇�鐃緒申��申鐃初姐�渇��膩��渇����鐃緒申��申鐃初姐�渇����鐃醇�鐃緒申鐃緒申膣�申����鐃初��膩��渇��膩��鰹申鐃緒申鐃初����鐃緒申��申鐃醇�鐃緒申��申鐃初姐�渇��膩��渇����鐃緒申��申鐃初姐�渇����鐃醇�鐃緒申鐃緒申����鐃緒申��申鐃初姐�渇����鐃醇�鐃緒申鐃緒申膣�申����鐃初��膩��鰹申鐃順�渇����鐃初��膩��渇��膩��鰹申鐃処��申鐃初姐�渇����鐃醇�鐃緒申鐃緒申膣�申����鐃初��膩��渇��膩��鰹申鐃処��申鐃初姐�渇����鐃緒申��鐃�20鐃緒申��申鐃初姐�渇����鐃醇�鐃緒申鐃緒申膣�申����鐃初��膩��渇��膩��鰹申羝�鐃緒申鐃緒申����鐃初��膩��渇��膩��活�o申�鰹申鐃緒申鐃初����鐃緒申��申鐃初姐�渇����鐃醇�鐃緒申鐃緒申鐃緒申鐃緒申��申鐃醇�鐃緒申��申鐃初姐�渇��膩��渇����鐃緒申鐃緒申��膩��鰹申鐃順�渇����鐃初��膩��鰹申鐃順�渇����紮�鐃醇�鐃緒申鐃緒申�渇����鐃醇�鐃緒申鐃緒申����鐃緒申��申鐃初姐�渇����鐃醇�鐃緒申鐃緒申膣�申����鐃緒申�鰹申鐃緒申鐃初��膩��鰹申鐃順�渇����鐃初��膩��鰹申鐃順�渇����紮�鐃醇�鐃緒申鐃緒申�渇����鐃醇�鐃緒申鐃緒申膣�申����鐃緒申�¥申鐃処��申鐃醇柑鐃緒申鐃緒申����鐃初��膩��鰹申鐃順�渇����鐃初��膩��渇��膩��鰹申鐃処��申鐃初姐�渇����鐃醇�鐃緒申鐃緒申膣�申����鐃初��膩��渇��膩��鰹申鐃緒申鐃初����鐃緒申��申鐃醇�鐃緒申��申鐃初姐�渇��膩��渇����鐃緒申��申鐃初姐�渇����鐃醇�鐃緒申鐃緒申����鐃緒申��申鐃初姐�渇����鐃醇�鐃緒申鐃緒申膣�申����鐃初��膩��渇��膩��鰹申羝�鐃緒申鐃緒申����鐃初��膩��渇��膩��活�o申�鰹申鐃緒申鐃初����鐃緒申��申鐃醇�鐃緒申��申鐃初姐�括�鐃初��膩��渇��膩��鰹申鐃緒申鐃初����鐃緒申��申鐃初姐�渇����鐃醇�鐃緒申��申鐃緒申

最近記事を読んだタイトル/ワード

タイトル/ワード名(記事数)

    LINEで4Gamerアカウントを登録
    【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう
    特集記事一覧
    注目のレビュー
    注目のムービー

    メディアパートナー

    【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう



    1 2 3 4 5 6 7 8 9 10 11 12 13

    10 メイン処理 スコアをカウントしよう P.5(10)へ



    10.スコアをカウントしよう
    メイン処理 2/2


     レベルと「的」が作れるようになった。これで,簡単な射撃演習場に仕上げることもできる。
     「そういえば,あのゲームはどんな感じに配置されてたっけ」と好きなゲームを起動して,それを参考にしながら,自分なりに作ってみても楽しいだろう。

     さて話は戻るが,本記事で目標としているのは「ミニゲーム」の完成だ。ミニゲームっぽくしていくために,ゲームルールを実装していこう。
     今回はレベル上の「的」を,すべて撃ち落とせばゲームクリアとする。制限時間やゲームオーバーはなしだ。

     実装の流れとしては,「スコアを加算していく仕組み」を作成し,「的」が撃たれたときに実行する処理を実装する。
     具体的には,スコアを加算していく「AddScore」というイベントを自作し,「的」の「On Component Hit(Cube)イベント」で「AddScoreイベント」を呼び出す流れだ。

     この仕組みを作り,少しずつ機能を広げながら,ゲームクリアまでを実装していこう。

    10-1:「コンテンツ ドロワー」(Ctrl+Spaceバー)で「BP_FirstPersonCharacter」を開く
    画像集 No.135のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう

    10-2:「BP_FirstPersonCharacter」の「イベントグラフ」を表示する
    画像集 No.136のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう

    10-3:空いているスペースを右クリックして,「Add Custom Event...」を押す
    画像集 No.137のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう

    10-4:赤いノードが追加される。これは「カスタムイベント」と呼ばれ,自由に作成できる。今回は,「スコアを加算するイベント」として使うので,名前は「AddScore」としよう
    画像集 No.138のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう

    Custom Event ノード
    画像集 No.315のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう 自由にカスタマイズできるイベント

    自動的にトリガーされる仕組みが備わっていないので,作っただけでは動かない
    しかるべきタイミングで呼び出して,動かそう


     さて,今作った「AddScoreイベント」の中身,つまり「スコアを加算する処理」を実装していこう。
     スコアを加算していくには,現在のスコアを記憶しておく仕組みが必要だ。現在のスコアを忘れてしまった状態で,「的」を撃ってスコアが1増えたとしても,結局いくつなのかが分からなくなる。

     現在のスコアを紙に書いておけば,そんな問題とはおさらばだ。紙に書いておくように,値を保存しておく「変数」というものを利用する。
     今回は「Score」という変数を用意して,「的」を撃ちぬいた数をカウントしていこう。

    10-5:画面左下の「変数」と書かれているところの「+」を押す
    画像集 No.150のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう

    10-6:名前をスコア用に「Score」にしよう。名前の変更は右クリックから「編集」を選ぶか,変数を選択した状態でF2キーで可能だ
    画像集 No.151のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう

    10-7:次に変数の型は,「Integer」を選択してほしい(説明は後述)。作った変数を選択した状態で,画面右側の「詳細」からも設定を変更可能だ
    画像集 No.152のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう

    10-8:とりあえず,赤枠で囲った部分と同じようになっていればOKだ
    画像集 No.149のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう


     「変数」と「型」について,簡単に説明しよう。
     まず,「変数」とは値を保存するための「箱」のようなものだ。この箱に保存された値を参照したり書き換えたりしていくことで,得点の管理やスコアボードの作成,プレイヤーネームの表示などさまざまなことができる。

     そして,「変数」には「型」というものがある。整数,小数などの数値や,文字列,オブジェクトなど,さまざまなデータの形式を表し,目的に合わせて使い分ける。
     今回作成するゲームは,「的」を落とした数を,そのままスコアとする。何かの個数を数える時は,1,2,3……と整数(数学的には自然数だが……)を用いるので,「Score変数」の「型」は「Integer」(整数)を選択した。

    変数 値を保存しておくための箱
    変数の形式(種類)

     整数を表現できる「型」は「Integer」のほかにも「Byte」や「Integer 64」などが用意されているのだが,どちらも癖があるので,基本的に整数を扱う場合は「Integer」と覚えて大丈夫だ。

     座学で覚えようとすると,大変かもしれない。ブループリントでは「型」ごとに色が設定されているので,色を頼りに作業していたら,自然と感覚が掴めていることだろう。詳細を覚えていくのは,その後からでも全然構わないのだ。

    「型」の種類によって,それぞれ色が付けられている
    画像集 No.153のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう

     数字でも「整数」や「小数を含む数」など,「型」が細かく分けられているのには,いくつか理由がある。その1つがリソースの削減だ。
     これは,ダンボールをイメージしてくれればよい。荷物を発送する際に,大きなダンボールがあればどんな荷物が来ても中に入れられるが,場合によっては無駄なスペースが大きくなる。変数も同じで,範囲が広いものを常に使用しているとリソースを食い荒らし,PCに余分な負荷をかけてしまうのだ。

     また,もう1つの理由として,意図しないデータのやり取りを防ぐことが挙げられる。
     例えば,WEBでフォームに入力する際,電話番号や郵便番号の入力で「全角数字」を入力したら「半角数字で入力してください」または,その逆で「半角数字」を入力して「全角数字で入力してください」と,怒られた経験はないだろうか。これは,入力できるデータ形式を制限することで,プログラマが想定していないデータの入力を防いでいるのだ。


    10-9:「Score変数」を「AddScoreイベント」付近にドラッグ&ドロップする
    画像集 No.154のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう

    10-10:「Get Score」を選択する
    画像集 No.155のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう

    10-11:追加された「Scoreノード」からワイヤーを伸ばし,「++」を検索して,「Increment Int」を押す。これは,変数に「1を加算する」処理であり,「Score変数」の値を「1増やす」という処理になる
    画像集 No.156のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう

    10-12:実行ピン同士を接続する
    画像集 No.157のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう

    Increment Intノード
    画像集 No.320のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう 「Integer型」の変数の値を1増やして,更新するノード

    increment(インクリメント)は,プログラミング分野で,変数の値を1増やすという処理を意味する。反対に,1減らす処理のことをdecrement(デクリメント)という。ノードを検索するときは,インクリメントの「++」に対して,「--」と入力すればよい

    10-13:「Print Stringノード」を追加する
    画像集 No.158のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう

    10-14:「++」からワイヤーを伸ばし,「In String」に接続する
    画像集 No.159のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう

    10-15:黄緑色と赤紫色のピンを持つノードが追加された。これは「Integer型」(黄緑色)を「String型」(赤紫色)に変換するもので,型の違いで本来は接続できないのを,接続できるようにする。このように,型を変換することを「キャスト」と呼ぶ
    画像集 No.160のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう


     「キャスト」とは変数の型を変更することだ。今回「Integer型」を「String型」に変更して,「Print Stringノード」で表示する文字列とした。

    キャスト 文字列の「型」を変更すること
    Integer型 整数のデータを保存するための「型」
    String型 文字列のデータを保存するための「型」
    文字列 「英数字」「かな文字」「記号」など,文字のみで構成されたデータ

     話を簡単にするため,数値で考えてみよう。
     例えば,整数「10」があるとする。この「10」に小数「0.1」を足した場合,整数のままでは小数が入り込む隙間がないので「0.1」は消え去り,値は「10」のままだ。
     この「10」を,小数を含む「10.0」に変換してから「0.1」を足せば,「10.1」というふうに小数を含む表現が可能となる。

    型のイメージ ※実際の処理を表現したものではない
    画像集 No.282のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう

     型を変更することで,小数を含む数を足し算できるようになった。このように,少しデータを足してあげることで型を揃えられるものは,データピン同士を繋いだタイミングで,自動的に「キャスト」の処理を追加してくれる。
     「整数」から「小数を含む数」へキャストする際に,小数部分のデータを足して調整するように,「Integer型」から「String型」へのキャストも,同じように少しデータを付け足して,調整しているイメ―ジである。

     今開いている「BP_FirstPersonCharacter」のイベントグラフは,キャラクターの視点移動処理も実装されている。ここで,マウス感度を調整する方法の1つを紹介しておこう。
     まず,イベントグラフを移動して,赤枠で示した「Camera Input」を探そう。

    「BP_FirstPersonCharacter」の視点移動処理
    画像集 No.280のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう

     「EnhancedInputAction IA_Lookノード」は,マウスを動かすたびにトリガーされるイベントだ。マウスの入力のうち,横移動量を「Action Value Xピン」,縦移動量を「Action Value Yピン」で取得できる。

    EnhancedInputAction IA_Lookノード
    画像集 No.343のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう テンプレートに用意されている,マウスの入力を取得するノード

    [Action Value Xピン]
    ・マウスの横移動量を取得できる

    [Action Value Yピン]
    ・マウスの縦移動量を取得できる

     横移動量は「Add Controller Yaw Inputノード」の「Valピン」へ,縦移動量は「Add Controller Pitch Inputノード」の「Valピン」へそれぞれ接続されている。
     この「Valピン」に接続された値が「視点移動の量」である。

     ここで「Valピン」へ接続される値を0.1倍すれば,「視点移動の量」が本来の0.1倍,つまり,感度を10分の1にすることができる。

    Add Controller Yaw Inputノード
    画像集 No.346のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう 操作しているキャラクターに縦回転(Yaw:ヨー)の入力を与えるノード

    [Valピン]
    ・縦回転の量

    [Targetピン]
    ・入力の対象とするキャラクター
    ・「self」の場合,このノードを配置した「ブループリント クラス」を対象とする
    Add Controller Pitch Inputノード
    画像集 No.345のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう 操作しているキャラクターに横回転(Pitch:ピッチ)の入力を与えるノード

    [Valピン]
    ・横回転の量

    [Targetピン]
    ・入力の対象とするキャラクター
    ・「self」の場合,このノードを配置した「ブループリント クラス」を対象とする

     以下の画像では,「Action Value X」「Action Value Y」をそれぞれ0.4倍した例である。画像を参考に感度調整を行ってみてほしい。

    視点移動のノードに入力される値を0.4倍した例。Action Value X(Y)からワイヤーを伸ばし,「*」を検索し「Multiplyノード」をそれぞれ配置する
    画像集 No.281のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう

    Multiplyノード
    画像集 No.344のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう 掛け算を行うノード

    [左側のデータピン]
    ・掛け算に使用する数値

    [右側のデータピン]
    ・掛け算の結果


     「AddScoreイベント」を作成したが,このままでは動作しない。「的」を撃った時に動作するように,「的」のヒットイベントから「AddScoreイベント」を実行する処理を実装していこう。

    実装イメージ:「AddScoreイベント」は自作した「カスタムイベント」のため,自動的にトリガーされる仕組みがない。そのため,どこからか処理を呼び出す必要がある。さて,「的」を作った際に,弾が当たったら「的」が落下する処理を実装したが,スコアを加算するのも同じタイミングで良いだろう。「的」の落下処理に続けて,プレイヤーに実装した「AddScoreイベント」を,「的」から呼び出していこう
    画像集 No.161のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう

    グレイマン
    画像集 No.351のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう このキャラクターは「グレイマン」という名前だ。UE4で,サンプルとして用意されていたキャラクターモデルである

    UE5が正式リリースされてから2年以上経過している現在でも,よく見かける印象がある。意外と人気キャラなんだろうか
    だんだん愛着が湧いて,かわいく見えてしまっているのは,筆者だけではないだろう

    10-16:「BP_SimpleTarget」のイベントグラフを開く
    画像集 No.162のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう

    10-17:「On Component Hit(Cube)ノード」に実装した処理の,末尾のノード付近に移動しよう。空いているスペースを右クリックして,「Get Player Characterノード」を追加する。画像では「Set Simulate Physicsノード」の後に実装していくが,エフェクトを実装した人は「Spawn Emitter at Locationノード」の後など,適宜読み替えてほしい
    画像集 No.163のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう

    10-18:「Get Player Characterノード」の「Return Valueピン」からワイヤーを伸ばして,「Cast To BP_FirstPersonCharacter」を追加
    画像集 No.164のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう

    10-19:図のようにできたらOKだ。これで,「BP_FirstPersonCharacter」に実装した「AddScoreイベント」に,アクセスするための前準備が整った
    画像集 No.165のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう

    Get Player Characterノード
    画像集 No.318のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう プレイヤーが操作している「キャラクター」を取得するノード

    [Return Valueピン]
    ・取得したキャラクターのデータ

    [Player Indexピン]
    ・どのプレイヤーを対象とするか
    ・1人目のプレイヤーは「0」,2人目のプレイヤーは「1」という風に指定する
    ・今回は「0」から変更しない
    Cast To BP_FirstPersonCharacterノード
    画像集 No.314のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう 「Objectピン」に接続されたものが「BP_FirstPersonCharacterクラス」として扱えるか調べるノード

    [As BP First Person Characterピン]
    ・「BP_FirstPersonCharacterクラス」として,実装されたものにアクセスできるデータピン


     「Cast To BP_FirstPersonCharacterノード」について,詳しく説明をしよう。再びクラスの概念についての説明になるため,内容をキチンと把握するのが難しい内容かもしれないが,できる限りかみ砕いて説明したつもりだ。

     まず前提として,Unreal Engineのすべてのオブジェクトは,「Objectクラス」というものをベースとして作られている。万物の根源は「Objectクラス」だったのだ。

    ブループリント作成時,「すべてのクラス」を確認すると,どのクラスも「Objectクラス」から派生していることが分かる
    画像集 No.309のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう

     「Objectクラス」は万物なので,「的」「キャラクター」「銃」などすべてのオブジェクトを,ざっくり「Objectクラス」として取り扱うことができる。
     対象を「特定のクラス」ではなく「ざっくりとしたクラス」にすることで,「クラス」の違いに関係ない同じような処理を,いちいち固有の処理として実装する必要がなくなるのだ。

     一方,特定の「クラス」固有の処理を実行したい場合は,ざっくりとした認識ではなく,その「クラス」だと明確に認識しないといけない。

     「お客様の中に,お医者様はいませんか」が,いい例だ。航空機などで急患が出た際,客室乗務員が呼びかけているシチュエーションを想定しよう。
     一人ひとりに確認をして,もし手を上げてくれた人がいれば,その人への認識が「お客様」から「お医者様」に変化する。ここでやっと「患者を診る」という,「医者固有の処理」をしてもらえるようになるのだ。

     今回は,「Cast To BP_FirstPersonCharacterノード」を使うことで,キャラクターが「BP_FirstPersonCharacterクラス」であるかどうかを確認している。
     確認をしたことによって,「BP_FirstPersonCharacterクラス」に実装した,固有の処理である「AddScoreイベント」を実行できるようになるのだ。


    10-20:「As BP First Person Characterピン」からワイヤーを伸ばし,「Add Score」を追加する
    画像集 No.166のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう

    10-21:「AddScoreノード」が追加された。ノードをよく見ると「Target is BP First Person Character」と書かれているように,「BP_FirstPersonCharacter」で作成したカスタムイベントの「AddScore」を呼び出している
    画像集 No.167のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう

    10-22:実装できたらプレイで確認だ。「的」を落とすたびに,左上にスコアが表示され,数値が1ずつ増えていくのを確認しよう(画像では,弾の速度やマテリアルを変更している。変更方法については,次章で説明する)
    画像集 No.340のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう

     「的」を落とした数をカウントできるようになった。
     ゲームのクリア条件は,レベル上の「的」をすべて落とすことなので,レベル上の「的」の総数を取得して,その数にスコアが達したら「Clear!」と表示する処理を実装しよう。

     処理は実行するタイミングも考慮しなければいけない。現実だと「いつ誰が確認するんだ」というイメージである。
     スコアがクリア条件を満たしているか「毎フレーム」確認する方法もあるが,今回は「的」を撃ちぬいて「スコアが加算されたタイミング」で判定をしてみよう。

     具体的に書くと,「AddScoreイベント」で「Score変数」を1加算した結果,レベル上の「的」の総数と同じかを判定し,もし同じなら「Clear!」と表示する流れである。

    10-23:「BP_FirstPersonCharacter」のイベントグラフを開く。「AddScoreイベント」の「++」のあとに「Get All Actors Of Classノード」を追加しよう。なお「Scoreノード」と接続していた「Print Stringノード」は,「Score変数」の値が増えていくことを確認したので削除して大丈夫だ
    画像集 No.169のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう

    10-24:「Get All Actors Of Classノード」が追加された。これは,「指定したクラスを持つオブジェクト」をすべて取得する,というノードである
    画像集 No.170のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう

    10-25:このノードの「Actor Class」のプルダウンメニューから「BP_SimpleTarget」を指定する。これでレベル上の,すべての「的」の情報を取得できる
    画像集 No.171のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう

    10-26:取得した「的」の個数を数えよう。「Get All Actors Of Classノード」の「Out Actorsピン」からワイヤーを伸ばし,「Length」を追加
    画像集 No.172のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう

    10-27:「LENGTH」と書かれたノードが追加された。右側のピンに見覚えがあると思うが,黄緑色なので「Integer」,つまり整数である。この整数は「的」の総数を表し,「Score変数」の値と一致すると,「的」をすべて倒したことになる
    画像集 No.173のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう

    Get All Actors Of Classノード
    画像集 No.317のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう 指定した「クラス」を持つ,オブジェクトの情報をすべて取得するノード

    取得した情報は「Out Actorsピン」から取得できる
    「Out Actorsピン」の形は1つの円ではなく四角の集合体となっているように,複数の「変数」の集合体となっている
    Lengthノード
    画像集 No.319のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう データの要素数(個数)を数えるノード

    「Get All Actors Of Classノード」と組み合わせることで,特定の「クラス」を持つオブジェクトの総数を数えられる


    10-28:「的の総数」と「スコア」が一致するか,判定する仕組みを作っていこう。変数リストから「Score」をイベントグラフに追加する。Ctrlキーを押しながらドラッグ&ドロップすれば,「Get Score」を選択する手順を省略できる
    画像集 No.174のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう

    10-29:「Lengthノード」からワイヤーを伸ばし,「==」を検索する。「Equal」が表示されるので選択する。これは,2値が同じかどうかを判定するノードだ
    画像集 No.175のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう

    10-30:画像を参考にしながら,「Equalノード」に「Scoreノード」も接続する
    画像集 No.176のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう

    10-31:「Equalノード」の赤色のピンからワイヤーを伸ばし,「Branchノード」を追加する。なお,赤色のピンはTrue/Falseのどちらかを持つ「型」であり,「Equalノード」で2値を比較した結果,同じなら「True」,異なる場合は「False」になる
    画像集 No.177のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう

    10-32:「Branchノード」が追加された。右側の実行ピンが2つあり,「True」「False」と書かれているように,「Conditionピン」に接続された値が「True」なら「True実行ピン」へ,「False」なら「False実行ピン」へ進む。今回の場合,「Score変数」の値が「的の総数」と同じなら「True実行ピンへ」,それ以外(クリア条件を満たしていない状態)なら「False実行ピン」へ進む
    画像集 No.178のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう

    Equalノード
    画像集 No.316のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう 2値の値が一致するか判定するノード

    左側のデータピンに,それぞれ接続した値が同じなら,右のデータピンは「True」に,それ以外なら「False」になる
    Branchノード
    画像集 No.313のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう 「Conditionピン」に接続された値を元に,処理を分岐させるノード

    「Condition」に「True」が設定されると,「True」と書かれた実行ピンに進む
    同様に,「False」が設定されると,「False」と書かれた実行ピンに進む


    10-33:「True実行ピン」にはクリア条件を満たした場合に進むので,ここにゲームクリアの処理を実装していく。まずは,クリアが分かるように「Print Stringノード」を追加し,「Clear!」という文字を表示してみよう
    画像集 No.179のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう

    10-34:フィールド上の「的」をすべて落としたら,「Clear!」と左上に表示される
    画像集 No.180のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう

     これで「的」を落とした数をカウントしていき,レベル上の「的」をすべて落としたら「Clear!」と表示されるというゲームルールが完成した。
     次章からは,UIや演出を追加してさらにゲームっぽくしていこう。

     本章の内容をすべて行った例を以下に示す。

    ・BP_SimpleTarget
     - プレイヤーが操作しているキャラクターを情報を取得
     - 取得した情報を判定し,BP_FirstPersonCharacterならAddScoreイベントを呼び出す


    BP_SimpleTarget
    画像集 No.385のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう


    ・BP_FirstPersonCharacter
     - 感度調整
     - Score変数の設定
     - Score変数の加算
     - レベル上のBP_SimpleTarget(的)の総数取得
     - スコアがBP_SimpleTargetの総数に達したか判定


    BP_FirstPersonCharacter
    画像集 No.383のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう
    画像集 No.384のサムネイル画像 / 【完全ガイド】制作経験ゼロの社会人向けゲーム制作入門。夏休みを使って,Unreal EngineのFPSミニゲームを完成させてみよう

    • 関連タイトル:

      Unreal Engine

    • この記事のURL:
    ����尊����贈����造����孫����造����属����造��但��|����造����足����造���束 G123����造���遜����促����族����臓����村����促����

    ��但��消���続����其����臓����臓����則G123

    4Gamer.net最新情報
    スペシャルコンテンツ
    注目記事ランキング
    集計:03月01日~03月02日
    4Gamerからお知らせ