久之Tweetはじめに前回まで、VRコンテンツを作るために必要な機能を紹介しました。今後はブループリントで処理を作る作業が増えてくるので、メイキングは1回お休みし、今回はブループリントの基本的な使い方を解説します。「特定のモノを作る」という目標があり、それに向かって手を動かしていくメイキングと比べて、ひたすらブループリントの処理を書き続けるのは少し面白みに欠けるかもしれません。ここを頑張れば自分で考えた処理を実装することもできるようになりますよ!なお、今回の解説は「もう少し詳しいブループリントの扱い方」を学ぶためのもので、メイキングとは関係のない内容となります。したがって、「ブループリントがある程度できる」という方は読み飛ばしていただいても問題ありません。ブループリントの探し方ブループリントには様々な種類があり、またUE4がアップデートされるたびに追加・削除されるため、全ての機能の使い方を覚えるのはあまり現実的ではありません。そこで、使いたいノードを上手に見つけるために、まずはブループリントのノードを検索する方法を覚えましょう!work/BPにアクターのブループリントを作成し、「sample」と名前を付けましょう(図1)。ブループリントの作成方法は第4回を参照してください。次に、作成したブループリントのイベントグラフ上で右クリックし、ブループリントの追加メニューを開きます(図2)。メニュー上部に“検索ボックス”があり、その下に“AI”“Audio”などのカテゴリが並んでいます。図2:ノード追加メニューノードを見つけるには、検索機能を使う方法と、カテゴリから探す方法の二通りがあります。検索機能を使う方法から試してみましょう。検索機能を使ってノードを探す検索機能を使ってノードを探す場合は、まず検索のキーとなる文字列の“あたり”をつける必要があります。普段からUnityやActionScriptに触れている方ならば直感的にどのようなキーワードで検索すれば良いか分かると思いますが、産業系エンジニア一筋という方には感覚がつかみにくいでしょう。以下に主要な検索ワードの一覧を用意しました。図3は“Spawn”をキーに検索した結果例です。パーティクルやオーディオなど、何かを発生させるために使用するノードが検索されました(一覧を参考に色々と検索してみてください)。VR」など特定のプラットフォーム向けのノードを探す時や、検索で使うキーワードのイメージが沸かないときはカテゴリから探すのが有効です。VR」のカテゴリを開きました。VR」固有のノードが一覧で表示されています。VR」固有のノード一覧ちなみに、デフォルト状態では現在のロケーションで扱うことのできるブループリントしか表示されないようになっているので、使用の可否に関係なくブループリントの一覧を見たい場合は右上の”状況に合わせた表示”のチェックを外す必要があります。変数とマクロ変数を定義する次に、ブループリント上で変数を定義する方法を学びましょう。変数を新規に追加します。画面左側にある変数項目の「+変数」ボタンをクリックしてください(図5)。画面左側の変数名に「sampleNum」と設定してください(図6)。デフォルトではBoolean型の変数が追加されます。図6:プルダウンメニューから変数の型変更を行う“Boolean”と表示されている右側にあるカプセルのようなマークをクリックすると、変数の型を変更できます。ここではInteger型に変更してください。これでInteger型の変数を定義できました。マクロを使う次はマクロを定義して、先ほど定義した変数を使ってみましょう。画面左側にあるマクロ項目で「+マクロ」ボタン(図7)をクリックして新規マクロを作成し、すぐ下の入力ボックスに「sampleMacro」と名前を入力してください。続いて、画面右側にあるインプットとアウトプットの「+」をクリックして、それぞれに「integer」型の値を追加します(新規にマクロを作成すると、自動でマクロ編集タブに遷移します)。すると、ブループリントにインプットとアウトプットのノードが追加されます。次に、追加された「インプット」と「アウトプット」の中間に「integer+integer」ノードを追加します。イベントグラフ上で右クリックしてブループリントの追加メニューを開き、検索ブロックに“integer”と入力して検索するとすぐに見つけることができます(図8)。「integer+integer」ノードを追加すると、図9のような配置になります。「integer+integer」ノードには「integer」を入力するためのピンが2つあります。片方にインプットノードから入力された「integer」ピンを入力し、もう片方には「10」と入力してください。これで、受け取った「Integer」型の値を+10して返すマクロができました。図9:「integer+integer」ノード配置後それでは、先ほど作成した「sampleMacro」を使ってみましょう。その前に、少し準備をします。イベントグラフタブに戻って、画面右から「sampleMacro」と「sampleNum」のゲッタをイベントグラフにドラッグ&ドロップで追加します(図10)。Text」を追加し、図11のようにノードを繋いで「sampleNum」のデフォルト値に「10」を入力してコンパイルします。Text」のインプットピンを繋ぐと自動で追加されます。ブループリントに編集を加えた場合はコンパイルが必須となります。変数のデフォルト値など、一度コンパイルしないと編集できない項目もあるので、こまめにコンパイルしましょう。これで、「sampleMacro」が入力値としてInteger型の変数「sampleNum」に設定された値「10」を受け取り、さらに「10」を加えた値をテキスト出力するブループリントの処理が完成しました。「sampleMacro」の動作を確かめたいと思いますが、毎回実際に動かして出力値を確かめるのは面倒なので、今回はデバッグ機能を使って動作を検証します。Text」ノードを右クリックして、表示されるメニューから「ブレークポイントを追加」を選択します(図12)。図12:ブレークポイントを追加するブレークポイントが追加できたら、動かしてみましょう。画面右上にある「プレイ」ボタン横のプルダウンメニューから「シミュレート」をクリックしてください(図13)。図13:シミュレートモードで実行ブレークポイントを追加した状態でブループリントを実行すると、ブレークポイントの位置で処理が中断されます(図14)。図14:ブレークポイントで処理が中断した様子デバッグ画面が表示された状態でマウスカーソルを変数の入出力ピンの上に持って行くと、その時点での変数の値が表示されます(図15)。マクロを通過する前はデフォルト値の「10」、通過後は「20」となっているはずです。図15:マウスオーバーで変数の中身を表示これで「sampleMacro」の動作を検証できました。使用頻度の高いブループリントここからは、ブループリントの中で使用頻度の高いものをいくつか紹介します。丸暗記する必要はないので、「こうやって処理を書くんだな」という感じで読んでみてください。BranchノードBooleanの値を受け取って処理を分岐させるノードです。Boolean”の値を受け取り、値がTrueであれば“TRUE”と出力、Falseであれば“FALSE”と出力しています。図16:Branchノード実装サンプルForLoopノードプログラムで言うFor文的な動作をするノードです。Num2”を1~10までカウントアップしながら値を出力しています。図17:ForLoopノード実装サンプルSwitchノードプログラムで言うSwitch文的な動きをするノードです。入力された変数によって異なるノードを実行したい場合などに使います(Tickはフレーム毎に呼ばれるイベントです)。図18:Switchノード実装サンプルSequenceノード上から順に処理を実行するノードです(図19)。ノードを普通に繋げる場合と動きは変わりませんが、横長の処理を書きたくないときなどに便利です。図19:Sequenceノード実装サンプルDoOnceノード一度しか実行されないノードです(図20)。複数回実行されると困る処理を書くときに重宝します。基本的に、変数は定義したブループリント内でしか使用できないため、複数のブループリントで同一の変数を使いたい場合は、変数をインスタンス変数として定義する必要があります。それでは、インスタンス変数を定義してみましょう。Class”の“+”ボタンをクリックします(図21)。Instanceを作成してください(図21)。図22:ゲームインスタンス作成ダイアログ作成したindustrialGameInstanceを開き、integer型のインスタンス変数“SampleInstanceNum”を作成します(図23)。変数の作成手順は通常のブループリントと同じです。Class”に設定してください。図24:ゲームインスタンスを設定これで、インスタンス変数を使う準備が整いました。インスタンス変数を使ってみましょう。インスタンス変数を使うwork/BP以下に“industrialUser1””industrialUser2”という名前でアクターブループリントを作成してください(図25)。図25:インスタンス変数を扱うブループリントインスタンス変数に値をSETする“industrialUser1”のイベントグラフに図26の通りに処理を記述してください。Instance」ノードでゲームインスタンスを取得し、取得したゲームインスタンスが変数に値をセットするという流れになっています。sampleInstanceNum」ノードはゲームインスタンスから使用する必要があるため、画面の何もないところで右クリックしてノード追加ダイアログを表示しても選択できません。ノード追加ダイアログ右上の“状況に合わせた表示”チェックを外すか、ゲームインスタンスからノードを引っ張り、何もないところで離したときに表示されるノード追加ダイアログから選択してください。インスタンス変数に値をGETする“industrialUser2”のイベントグラフに図27の通りに処理を記述してください。処理内容は「ゲームインスタンスから変数を取得し、テキストとして出力する」ことです。図27:インスタンス変数GET実装サンプル“industrialUser1”と“industrialUser2”をレベルに追加して動かすと、“sampleInstanceNum”が3秒ごとにカウントアップされながら表示されるはずです(図28)。図28:インスタンス変数利用サンプルこれで、インスタンス変数を利用できました。ここまでで、ブループリントの基本についての解説はおしまいです。次回からはメイキングに戻ってゴリゴリと処理を作っていく予定なので、今回の内容をしっかりと復習しておくとスムーズに進められると思います。「ブループリントをもっと学びたい!」という方は、こちらの書籍がおすすめです。ゲーム・映像制作現場で役立つビジュアルスクリプトガイド』(翔泳社)~コラム:~ビジュアルプログラミングの未来~2020年より、小学校におけるプログラミング言語教育の必修化が決定しました。その際に使用されると言われているのが、ブループリントと同じビジュアルグラミング言語の“Scratch”です(図29)。blockly”など、視覚的に分かりやすく簡単にプログラミングを行える環境として、ビジュアルプログラミング言語は近年大きな注目を集めています。言っても、普通にプログラミングするのと比べて自由度や汎用性は低いので、現状ではゲームの処理や教育など特定の分野に絞って利用されています。欧米ではScratchなどのビジュアルプログラミング言語を用いた教育が既に必修化されていることや(参考:CURIOUS)、ビジュアルプログラミング言語によるプログラミング教育を必修科目として導入する国が年々増加していることを考えれば、近い将来に若者が誰でもビジュアルプログラミング言語でプログラミングができるという時代がやってくると考えられます。OpenGLやDirectXを知らなければできなかったハイエンドな3Dコンテンツの開発がUE4やUnityで簡単にできるようになり、今ではメジャーな開発手法となったように、もしかしたらコーディング作業の殆どをビジュアルプログラミング言語で行うといった未来がくるかもしれませんね。富士ソフト株式会社で業務系のSEをしています。StoreやGooglePlayでVR作品のリリースをしたりしています。そんな活動について社内のSNSで発言していたところ、「メディアでコラムを書いてみないか」という話になり、今回の連載を書かせていただくことになりました。ITでは、より付加価値の高いコンテンツを会員サービスとして提供しています。ITのWebサイトにログインすることでさまざまな限定特典を入手できるようになります。VeloCloudが選ばれる理由SD-WANとはなにか。Linuxエンジニア育成への思いF5とNGINXの組み合わせで、サービス公開をよりセキュアに。ITがお届けするポッドキャストです。