【Advent Calendar】 webのサーバーエンジニアがunreal engineをさわってみた

# gloops Advent Calendar 23日目
[gloops Advent Calendar2016](http://qiita.com/advent-calendar/2016/gloops)もついに23日目。
今年gloopsに入社した、Webアプリケーションプログラマーの私t_shibakiがお送りいたします。
周りのできるエンジニアの方々が興味深い記事を投稿してくださっている中、私の記事がお目汚ししないかと不安ですが、よろしくお願いいたします。

本日は、個人的に興味があった「Unreal Engine 4」をgloopsでの仕事の合間に、少しだけ触ったので、そのことについて書こうと思います。

# Unreal Engine 4とは何者か
Unreal Engine 4はEpic Games様が開発された、ゲームエンジンです。
Unreal Engine 4のゲーム動作の開発手法は下記の2つがあります。
・Visual Studioを用いたC++開発
・ブループリント (Unreal Engine 4専用のビジュアル スクリプティング システム)
このうち、後者のブループリントの存在により、エンジニアが存在しなくても、プランナー/デザイナーが実動作を開発できるというのが強みの一つです。

現在は基本無料化されていて、Unreal Engine 4によってゲームやアプリケーションを制作・販売した際に、売り上げが一定以上になった際にロイヤリティが発生するようになっています。
触るだけならタダですよ！

# とりあえずインストールしてみる
環境にはVisual Studioがインストールされていることが前提です。

Unreal Engine 4公式サイト
https://www.unrealengine.com/ja/what-is-unreal-engine-4

とりあえずと言えるくらいに本当に簡単にインストールが終わります。
公式サイトで右上のダウンロード → EpicGamesアカウントの作成 → OSの選択
とすると、EpicGamesLancherのインストーラーがダウンロードされます。
インストールが終わると、EpicGamesLancherが立ち上がるので、上のタブからUnrealEngineを選択し、インストールしましょう。
ただし、リリース物はWindows32bit向けも作成できますが、64bit環境でしかUnrealEngineをインストールできないようです。
https://docs.unrealengine.com/latest/JPN/GettingStarted/RecommendedSpecifications/index.html

インストール時に、インストールオプションが出てきますが、C++を使用する場合は、デバッグ用エディタシンボルにチェックを入れておくとUnreal Engine側のコードでの変数チェックやブレークポイントを仕掛けたりできるようになります。
入れずにインストールした場合でも、後から起動ボタン右側のドロップダウンボタンのオプションからいつでも追加できます。

起動すると、プロジェクトブラウザが立ち上がります。
いくつかのテンプレートの中から、C++プロジェクトのThirdPersonを選択してみました。
C++プロジェクトを選択すると、最初からVisual Studioのソリューションが生成されて、アンリアルエディタとVisual Studioが同時に立ち上がります。
![アンリアルエディタ.png](https://qiita-image-store.s3.amazonaws.com/0/115698/8b09fe92-c793-0e15-5694-ac8ecd250947.png)

以後、必要であれば、アンリアルエディタのツールバーの[ファイル]からVisual Studioを起動できます。
C++側の処理のデバッグは、Visual Studioのデバッグからたたくと、Debug用にアンリアルエディタが立ち上がるので、そこで行うようです。
生成されたプロジェクト中のCharactor.cppファイルで、移動などにブレークポイントを張って、DEBUG用に立ち上がったアンリアルエディタ側で「プレイ」ボタンを押下し、操作すると、デバッグできていることが確認できます。

# ブルースクリプトでレベル遷移のプログラムを作ってみる
ここが一番興味がありました。
プログラムを書かなくても動作が作れるとは…。
今まで、ゲームを作る上でも常にプログラムを"書いて"きたので、すごく興味があります。

レベルの概念はUnityのレベル/シーンの概念に近く、要するにステージ構成のことです。
まったく違うUI(RPGなら、メニュー画面 / 戦闘画面 / 3Dの移動画面 等)などを個別に作って、条件を満たしたらレベルを切り替えることでそれぞれの画面遷移を作ります。

まずは、飛ぶ先のレベルがないと始まらないので、ファイル→レベルを開く、から、今のレベルをコピーして、レベルを作成しておきます。
ゴールのオブジェクトに接触したら、レベルが切り替わって、ここに飛んでくるのが目標です。

あんまり時間もないので、適当にCubeアクターに触れたら判定を行うようにしてみましょう。
"コンテンツ/Geometry/Meshes"の"1M_Cube"をコピーして、新しく"Goal"ファイルを生成します。
次に、そのファイルを3D ビューポート(画面中央のゲーム画面を見れるところ)にドラッグ&ドロップして位置を調整します。
アウトライナから"Goal"を選択、ブループリント/スクリプトを追加を押して、任意の保存先を選択して、ブループリントファイルを生成します。
すると、ブルースクリプトの編集ウィンドウが立ち上がるので、コンポーネントから、StaticMeshComponentを選択し、詳細のCollisin→Simulation Generates Hit Eventsにチェックを。
同じく詳細のイベントからOn Component Hitを有効に設定します。
これで、他のオブジェクトが接触した際のイベント"OnComponentHit"というイベントが使えるようになります。
![ブループリント.png](https://qiita-image-store.s3.amazonaws.com/0/115698/00ce3d8d-f685-4248-070d-c40a9721d3c5.png)

イベントグラフのOnComponentHitのOtherActorからドラッグしていくと、"ノード"というのが伸びていくので、任意の場所で離します。
すると、イベントが起こった際にOtherActor情報を受け取ってどのような動作をするか聞かれるので、"Cast To ThirdPersonCharactor"(ThirdPersonCharactorはプレイヤーキャラクタのオブジェクト名です)!
を選択します。
ここで、キャストに成功した場合の処理をさらに伸ばしていきます。
同じ手順で"Cast To ThirdPersonCharactor"の"実行"からさらにレベルを開く"Open Level"を呼び出すようにします。
"Open Level"の"Level Name"をコピーして作成したLevelの名前にすれば完成です。
![ブループリント2.png](https://qiita-image-store.s3.amazonaws.com/0/115698/dde1c7c0-0cc3-e706-4929-d0ce0e780e6a.png)

実際に動かしてみると、ちゃんとプレイヤーがGoalに設定したアクターに触れたらレベルが切り替わるようになっていました。
本当にプログラムを書かなくても動作が作れちゃうんですね。

# 最後に
やっぱり1日では少ししか触れませんでしたね…。
チュートリアル動画なども、ゆっくり見たかったのですが、年末が近づいていていることもあり、駆け足になってしまいました。
ゲームエンジンというとっつきづらさみたいなものはそんなになく、むしろかなり直観的に作られていて、触っていて楽しかったです。
触るだけなら無料ですし、公式/有志問わずチュートリアルや解説も充実しています(ただし、有志のものは大半は英語ですが)ので、年末年始に少し時間の空いた方は、Unreal Engine 4を触ってみてはいかがでしょうか？