【UE5 初心者】球を転がして迷路を攻略するTPSゲームを作る(1) -プロジェクト作成~プレイヤーキャラクターをプロジェクトに設定する-

# はじめに
以下の点に注意して頂ければ幸いです。
・初心者による初心者のための記事です。文章に誤りのある場合がありますので注意ください。
・UE(Unreal Engine)のバージョンは5.5.3-39772772+++UE5+Release-5.5、OSはWindows10です。
・UE5のインストールについては完了している想定とします。
・本記事ではスクリプト(C++)は使用せず、UE5で使用されるビジュアルスクリプティングであるブループリントのみを使用します。

# 概要
・プレイヤーが球を操作してゴールを目指す迷路ゲームを作成します。
・UE5の基本操作に慣れるためのチュートリアルを目的としています。
・本記事ではプロジェクトの作成と、キャラクターを作成してそれをゲーム内で表示させるまでを目的としています。
# もくじ
- [1.プロジェクト作成](#1.プロジェクト作成)
-  [2.球(プレイヤーキャラクター)の作成](#2.球(プレイヤーキャラクター)の作成)
   - [2-a.プレイヤーのブループリントアセットの作成](#2-a.プレイヤーのブループリントアセットの作成)
   - [2-b.プレイヤーの基本設定(外見・物理演算の設定)](#2-b.プレイヤーの基本設定(外見・物理演算の設定))
   - [2-c.TPS視点のカメラの実装](#2-c.TPS視点のカメラの実装)
- [3.プロジェクトの設定](#3.プロジェクトの設定)
  - [3-a.ゲームモードの設定](#3-a.ゲームモードの設定)
  - [3-b.プレイヤーキャラクター(デフォルトポーン)の設定](#3-b.プレイヤーキャラクター(デフォルトポーン)の設定)


# 1.プロジェクト作成
UEを起動するとプロジェクトを選択する画面が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3992369/cd5f7ae7-e326-4cc7-b245-0043d307af3f.png)
UE5では最低限の機能の含まれたプロジェクトが提供されていますが、今回は初期から実装を行うため、ブランクを選択します。
左のタブからゲームを選択し、ブランクを選択してください。
右側のプロジェクトデフォルトの欄はブループリントを選択し、スターターコンテンツのチェックを外してください。
プロジェクトの保存場所とプロジェクト名は任意で決めて頂ければいいと思います。

# 2.球(プレイヤーキャラクター)の作成
プロジェクトを作成すると暫く待った後に画面が表示されます。
各項目については適宜軽く説明を行いますが、詳細は以下のページを参照して頂ければ幸いです。
<a href=https://dev.epicgames.com/documentation/ja-jp/unreal-engine/unreal-editor-interface>公式ドキュメント Unreal Editor のインターフェース</a>
## 2-a.プレイヤーのブループリントアセットの作成
まず、キャラクターの作成を行います。
ゲーム内で使用するすべてのコンテンツはコンテンツドロワーで管理されます。画面左下のコンテンツドロワーをクリックすると展開することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3992369/6e5fbe6a-caf5-47d9-a0a2-4fb66b9d2ecf.png)

コンテンツドロワーを開いたら左部分の「コンテンツ」フォルダを開き、中央部分の空白を右クリックして「Character」フォルダを作成します。
そうしたらCharacterフォルダを開き、空白部分を右クリックして今度はブループリント>ブループリントクラスを選択(または、基本アセットからブループリントクラスを指定)して、ブループリントアセットを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3992369/326b23ae-31fe-4233-997d-1c8f8e1f8f48.png)

ブループリントクラスを使用する場合、目的に応じた親クラスを設定する必要があります。
今回はプレイヤーキャラクターを作るため、プレイヤーが操作可能なオブジェクトのクラスである「ポーン」「キャラクター」のいずれかから選択する必要があります。一般的にはキャラクターの方が多機能なのですが、クラス横の説明文にある通り「歩行能力を持つオブジェクト」向きであるため、今回はポーンを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3992369/ff32a914-1cb1-4d3f-a354-1e87e8afe3c6.png)

出来たブループリントアセットの名称は「BP_Character」としてください。
(命名規則について詳しく知りたい方は<a hfef=https://dev.epicgames.com/documentation/ja-jp/unreal-engine/recommended-asset-naming-conventions-in-unreal-engine-projects?application_version=5.5>公式ドキュメント アセットの命名規則に関する推奨事項</a>)

## 2-b.プレイヤーの基本設定(外見・物理演算の設定)
作成したブループリントアセットをダブルクリックするとブループリントエディタが開きます。
ブループリントエディタではブループリントアセットのロジック(例えば、プレイヤーの入力によってキャラクターが動く処理など)をイベントグラフで作成することができます。
まずは基本的な機能の実装のためにコンポーネントの追加を行います。コンポーネントは特定の機能について実装を簡単にしてくれる便利な部品のようなものです。
コンポーネントの追加は画面左部分のコンポーネント部分の[+追加]ボタンからできます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3992369/66fb3814-6069-415d-a9fc-25e9e39edc05.png)

まず、球コンポーネントを追加し、DefaultSceneRootにドラッグしてデフォルトのルートを変更します。デフォルトのルートに指定されたコンポーネントがこのオブジェクトの中心になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3992369/bc8ff885-be96-450f-ad3e-288af54ca1d1.png)

(ちなみに後々不都合が生まれるため、ルートは後で変更します。)
球コンポーネントをダブルクリック(またはビューポートタブを選択)すると、画面に球が出現すると思います。
球の物理演算を有効にするため、コンポーネントタブでSphereコンポーネントが指定されているのを確認してから物理タブのSimulate Physicsにチェックを入れます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3992369/12ab9b6b-eae9-47ff-a10a-d48269474687.png)

## 2-c.TPS視点のカメラの実装

次に、キャラクターを表示するカメラを作成します。これはカメラコンポーネントを追加することで実装できます。
Sphereコンポーネントの下の階層に位置するようにカメラコンポーネントを加えます。(色々カメラの種類がありますが、普通のカメラ コンポーネントを追加してください)
そうしたら、画面にカメラが追加されると思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3992369/978dab93-935b-4994-b472-8a86af3744b9.png)


現在はカメラが中心の部分に位置しているため、球が映るように移動させます。カメラコンポーネントが選択されていることを確認してビューポート内の三色の矢印をドラッグするか、詳細タブのトランスフォームの値を直接指定して移動を行います。調整は後々行うので、大体離れていれば大丈夫です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3992369/f54a6c23-de81-46f0-bb73-e433ada0c8b3.png)

ここまで終わったらコンポーネントの上の方のコンパイルを押し、CTRL+Sを押して保存して、ブループリントエディタを閉じてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3992369/cc37189f-d876-46bf-b093-ee3e4f7e10be.png)
# 3.プロジェクトの設定
自分の作成したプレイヤーキャラクターをプレイヤーに設定するにはプロジェクト設定のゲームモードから設定する必要があります。
プロジェクトの設定は画面上部のメニューバーの編集>プロジェクト設定から開くことができます。
ここでは上記の他に、プロジェクトの概要やライセンス情報などプロジェクト全体の設定を行うことができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3992369/3fded438-91a0-4cda-a02c-537feda8341e.png)

今回のブランクプロジェクトであってもデフォルトの設定が適応されているため、現段階で上部の開始ボタンを押してゲームを開始した際に操作することができるようになっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3992369/38f6a8ad-4c74-4514-a724-0e911d121950.png)

## 3-a.ゲームモードの設定

まずは、ゲームモードを作成する必要があります。ので、コンテンツドロワーを開きコンテンツの空白部分を右クリックしてブループリントを作成します。
親クラスにはゲームモードベースを指定し、アセット名はBP_GameModeとしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3992369/a4a515f5-f84b-48ea-9710-b291de072fad.png)
そうしたら、編集>プロジェクト設定からプロジェクト設定を開き、マップ&モードのデフォルトのゲームモードにBP_GameModeを設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3992369/07750e23-7a4e-4999-a5a7-836d8c9c982b.png)


## 3-b.プレイヤーキャラクターの設定
コンテンツドロワーの方に戻り、BP_GameModeをダブルクリックして開きます。キャラクターを開いた際とは異なり、以下のような詳細だけが表示されるような状態になると思います。
クラスから「デフォルトのポーンクラス」という項目を探し、先ほど作成したキャラクターBP_Characterを設定してください。これによって開始時に現れるキャラクターが自作したものと入れ替わります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3992369/b61f8330-8e39-4dfc-9240-3f8b28becdae.png)
完了したらコンパイルし、保存してエディタを閉じます。

そうしたら開始ボタンを押して確認してみましょう。球が表示されるようになっていればキャラクターが設定されている証拠です。

# おわりに
本記事ではプレイヤーを作成する部分まで行いました。次回はこのプレイヤーを動かす部分の実装に移ります。
初心者の方にこちらの内容がお役に立てば幸いです。

# おまけ(キャラクタークラスを親にして作成する利点について軽く)
<details><summary>おりたたみ</summary>

今回はポーンクラスを親クラスにしてプレイヤー(球)を作成しました。
プレイヤーキャラクターを作成するときに使用できるクラスではキャラクタークラスという今回使用しなかったクラスがあります。これは、人型のキャラクターを作成する際に充実した機能を利用でき便利です。
キャラクタークラスはポーンクラスから派生したクラス(つまり、ポーンの子供みたいなもの)である一方、人型キャラクターを作るのに特化することで独自性を得ています。
特にキャラクタークラス専用のCharacterMovementコンポーネントは移動、ジャンプ、泳ぐ、飛ぶなどの動作の実装を容易にし、またそれぞれの最高速度、速度減衰といったパラメータの管理、さらに重力や質量などの物理演算の要素を管理することができます。
また、Capsule Collisionコンポーネントと連携にしてCollisionの大きさに合わせた物理演算を自動的に行ってくれます。
詳しくは以下

<a href=https://dev.epicgames.com/documentation/ja-jp/unreal-engine/understanding-networked-movement-in-the-character-movement-component-for-unreal-engine?application_version=5.5>引用 公式ドキュメント CharacterMovement コンポーネント</a>

:::note info
ACharacter は APawn から派生していますが、キャラクターは、単にポーンに character movement コンポーネントが追加されたものではありません。 UCharacterMovementComponent と ACharacter は同時に使用するように設計されており、 ACharacter は、特に UCharacterMovementComponent でのレプリケーションを簡単にするために、複数のレプリケートされた変数と関数をオーバーライドします。
:::

</details>