第20回UE5ぷちコン参加振り返り

# はじめに
ぷちコン開催20回目おめでとうございます！
historia様主催のぷちコンも今回で20回目。もう10年も続いていると考えると感慨深いです。
そんなわけで、第20回UE5ぷちコン(テーマ「コントロール」)に参加しましたので、その振り返りになります。

応募した作品の動画は以下になります。

https://youtu.be/6GziRvWR23I
- 使用バージョン：UE5.2.1

# 方向
今回は言葉遊びがしにくいテーマだと感じました。
極論を言ってしまえば、自機を動かせば「コントロールしている」でテーマ回収として逃げる手も…
相手の動きをコントロールするなど、色々と考えました。最終的には、動きに制限がある中でコントロールしてクリアを目指すゲームにすることにしました。
[![20230910_ぷちコン20_マインドマップサムネ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165865/8ff896e9-c56a-0f1c-3e3c-842f5ff74ae3.png)](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165865/56f52e67-469b-398f-2d34-6a2dfb3dc1a7.png)


# 今回目指したこと
仕事のウェイトが大きくなってきたので、今回はなるべくシンプルに、のんびりと進めることを目指しました。
以下の考えで、ゲーム内の操作や各オブジェクトの挙動などが決まっていきました。

- コントロール
  - 自機を動かすのに思い通りにいかないことが伝わる
    - 慣性
    - ある程度の重力
    - 操作でエネルギー消費
      - 操作しないと回復
        - 慣性や重力を利用して操作しない時間を作る
   - 壁にぶつかるとダメージ
     - バウンドするので操作が慎重になる

- 軸
  - ある惑星の調査
    - 鉱石の採掘と回収
      - 時間がかかる
      - その間に他のことができる
    - 調査衛星の起動
      - その場にとどまりながら何かをする
  - 調査をして着陸地点に戻る
    - 着陸姿勢でボーナス

- 補助
  - 砲台
    - その場にとどまれないようにする
    - 制限のある中での操作を促す
  - UFO
    - 採掘の妨害
    - 阻止するために操作を促す
  - 隕石
    - 砲台ほどではないが操作にアクセント
  - 噴出
    - 自由な移動に制限
  - 宝石・星
    - 移動を促す
      - 取らなくても良いが、移動したらご褒美
    - ルート指示

# 今回やってみたこと
## サイドビュー
「シンプル」を目指すため、見てわかりやすいサイドビューを選びました。
このタイプのゲームは作ったことが無かったので、挑戦としては良いかなと思いました。
<img width="50%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165865/abbf387b-29b5-6b83-0f0e-1aa82c1f50c2.png">
問題としては、パースの都合で画面端のオブジェクトの隙間など少し直観的じゃない感じになってしまっています。
<img width="50%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165865/1a0ce956-f1ce-0893-9c44-5daee9ca09d0.png">
UE5.3で正投影レンダリングが導入されたので、見映えがどう変わるか試してみました。
狭く見えていた画面左側の隙間が、ぎりぎり通れる間隔で表示されていることがわかります。

<img width="50%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165865/5658e8a8-1e53-05be-9780-a7b3b4087ef2.png">

何か懐かしい、きっちりとした2Dっぽさがある画面になりました。これは良い感じです。
ただ、パースが効かないため、サイドビューのようなゲームは床面がまったく見えなくなるので、そのあたりを踏まえたデザインも必要になります。

背景は空が見えなくなるなど、見え方がかなり変ります。
遠いものでも同じ大きさになるので、透視投影のカメラとは違った調整が必要になりそうです。

## スクロール開始範囲
サイドビューということで、ある一定の範囲内ではカメラを動かさないようにしてみました。
画面中央付近を移動するなら固定画面として見ることができます。
忙しく画面が動かないようにしたいのと、自分中心のカメラだけしか扱ったことが無いので、勉強も兼ねて対応してみました。
![Petitcon20_スクロール開始範囲.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165865/97e806bb-1e5b-f9b4-7a5f-5d62ff542ac1.gif)
画面の赤枠はカメラの移動開始判定用の範囲で、視錐台から計算しています。以下の記事を少し参考にさせていただきました。

https://historia.co.jp/archives/9290/

プレイヤーの移動する面上の視錐台のサイズが算出できれば良いだけなので、BPで簡単に書くことができました。
Fov-y(垂直)と思い込んでいたため、計算と範囲が一致せず少々悩みはしましたが…
![BP_StageCamera-CalcScreenSize.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165865/cdb88bbb-bca8-e987-1681-be8afd8db035.png)

狙い通り、カメラがある程度固定されるため、落ち着いてプレイできるようにはなったかと思います。
しかし、画面外側のオブジェクトが見えにくい場面もあるので、一長一短でした。
<img width="50%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165865/bbf5ccd7-fea6-785a-bd18-28382cab928b.png">
そのため、ステージ開始時には引きのカメラで全体が見えるようにしています。
ステージが広くなるほど、カメラを引いて全体を納めるため、オブジェクトが小さくなってしまう欠点があります。
<img width="50%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165865/a61a7493-0ff4-b6d6-b2d9-88bb19c577ff.png"><img width="50%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165865/e5cf07f3-298b-30a7-7217-924a07b9ee87.png">
ステージのサイズが広くなる想定がある時は、ミニマップなりカメラ移動で見せるなどの対応を検討しておいた方が良いかと思います。


## べたなロケットを作る
今回使用するアセットは、シンプルなものをイメージ。
アセットストアから探すのもありでしたが、シンプルなもので良かったので練習を兼ねて作ってみました。
<img width="50%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165865/dc63ba0c-3074-d8be-eafd-84532c34a2da.png"><img width="50%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165865/90bf3692-b0ec-0cda-32b1-fbdb3949a532.png">
背景もこんな感じです。メッシュの頂点を移動して凹凸をつけただけですが、ライティングも加わるとそれっぽくなりました。ディテールは今後の課題です。

<img width="50%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165865/29bfd436-0551-ae85-1ded-cb9d1a6e742b.png">

自機のモデルは、頂点カラーとUE上のマテリアルだけで対応しようかと思いましたが、何となく購入していたSubstance 3D Painterがあったので使ってみました。単純な形状なら手軽に材質を割り当てられるので便利です。そして、手描きしなくても良いのは有難いです。

<img width="50%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165865/15a2e6fc-9303-6bcc-392c-b1dca407d656.png">

また、練習として採掘のアニメーションを作ってみました。
![Petitcon20_採掘アニメーション.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165865/c309c49f-e934-226e-d76e-0e1e8efb79d2.gif)
やっぱり、コントロールリグは便利です。
そして、グレイマンは、こういった動きには適役だと思います。
<img width="50%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165865/39c67755-4476-fbd7-a94a-06e18fb4203f.png">

## エフェクトとループ音

Niagaraエフェクトにもイベントが設定できることに今更気付きました。
エフェクトの再生と停止のタイミングが取れるのでループSEのON/OFFの制御が簡単にできます。
エフェクトを再生・停止している以上、そこに処理を挟めば良いだけですが、こうするとノードを分散して記述できるのでBPをすっきりできるかと思います。
理想を言えば、データテーブルなどでまとめて、処理・管理すると良いかもしれませんが、それは機会があれば。

![20230910_エフェクトとイベント.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/165865/24e1d46e-816a-3a65-8d77-66046be5b306.png)


# 振り返り
## Keep
- Substance Designer/Painterを使う
- Blenderを使う
  - 作れるものを増やしていく

## Problem
- ゲームの構成要素のみを考え過ぎた
  - 早目にレベルデザインして、イテレーションを重視する必要がある

## Try
- 早目のレベルデザインとフィードバック
  - ゲームプレイを通して改善→反映を早めに行う
- インプットを増やす
  - ツールを使いこなすために単純に手を動かす
  - 仕組みやデータの作りを学ぶため、アセットなど目を通しておく

ゲーム内容自体がまとまりきらない状況が提出1週間前まで続いた。今回はいつもと違う意味で「終わらないかも」と感じた。
想像力が足りず、頭の中で遊ぶだけではゲームをうまく動かせないので、早い段階からレベルデザインのイテレーションに力を入れて、ゲームとしてのまとまりを意識して作業を進めるようにしたい。

ツールをある程度使えるようになってきた感じがある。今後は普通に使っていくと思うので、特にKeepに明示しない。AbilitySystemも同様。

# 最後に

テーマである「コントロール」で良いアイデアが思いつかず、いつも通り普通に作った感じになりました。
振り返ってみれば、アイデアがまとまらずに参加を見送っていた3年前の日々からは少しは変われたかと思っています。
センスが無く、他の方のような斬新な視点、素敵な発想も無い私ですが、自分なりに考えることで形を作っていけるようにしたいです。

いつもながら今回もぷちコンを楽しませていただきました。短い期間で制作の一通りの流れを体験できる良いイベントです。
historia様、Epic様、運営と審査お疲れ様です。これからも自身の勉強のため、ぷちコンに参加させていただきたいと思いす。

# 使用素材とアセット

- グレイマンにアニメーションをつける時はこれ。

https://www.unrealengine.com/marketplace/ja/product/control-rig-mannequin

- 今回は爆発エフェクトのみを使用。

https://www.unrealengine.com/marketplace/ja/product/advancedmagicfx13

- SEはこれでほぼほぼ間に合います。

https://www.unrealengine.com/marketplace/ja/product/pro-sound-collection

- BGMはこちらから購入。定期的にセールされているパックがお買い得。

https://audiostock.jp/