気づけばツール漬け

3D,2Dのツールを色々使ってみた記録を書いていきたいです。

「冂と亠で円」制作メモ 企画について

f:id:mi-zmix:20190409220604p:plain

はじめに

第11回ぷちコン応募作の「冂と亠で円」(これとこれでえん)の制作メモです。
何度か制作メモを書いていますが、どれも長めだったので今回のはいくつかに分割してみようと思います。
ということで、まずは企画についてから。

作成したゲームのパッケージは下記リンクへ上げました。

drive.google.com



応募動画はこちらです。

第11回UE4ぷちコン応募作「冂と亠で円」 - YouTube

 

使用したUE4のバージョンは、4.21.2 です。トップダウンテンプレートで作りはじめました。
最初はテンプレートのままマウスクリックで動かしていましたが、操作がしにくい感じになってしまったので、キー操作で動くように切り替えました。すばやく狙って撃つタイプの動きにはあってなかったです。

テーマについて

テーマが「えん」だったので、円の漢字で考えました。
紙の上でぐりぐり考えていたら、「この字、脚っぽい」と、思いつきそこから広げていきました。
この「冂」の部分って、単独で文字としてあるんだろか? と心配になって、手書き文字入力で確かめてみたら、ちゃんとありました。(テキスト書くときは、ほぼ毎回手書き入力で取り出してからコピペしてます。はた迷惑なタイトルです)そこから、「亠」とあわせて「円」という文字になる、と、こじつけて作成開始しました。
敵も「冂」と合わさって文字として完成するという部分は説明しないとわからないので、ひねってみたけどスピンしすぎてダメになったパターンとも言えます。


漢字を分解してると早速ゲシュタルト崩壊して、こんな形だっけ?ってなってました。一部だけ抜き出すと、ほんとにわからなくなります。
内、肉、同、岡と作りましたが、他にも巾とかも考えてました。さらに、罔(あみ)、囘(かい)、网(あみ)冉(ねん)などの字もあります。

文字は全部0からモデリングしてます。テキストからポリゴンへ変換するという手順はとりませんでした。
MagicaVoxel > MODO > 3Dcort > Akeytsu と、ツールを渡り歩いて作りました。このあたりは、モデル編とかで書こうかと思います。

今回の学習目標

一応ぷちコンに参加するときは毎回学習目標をたててるのですが、今回は、

  • アクションゲームの基礎的なところをやってみる。(攻撃して、リアクションしてという流れ)
  • Castを使わなくてよいところは使わないようにする。
  • Tickをできるだけ使わないようにする。

という項目でした。
ダメージの受け渡しと、ピックアップアイテム(亠です)を拾った時は、キャストせずインターフェイスメッセージとイベントでやり取りしました。

f:id:mi-zmix:20190409221511p:plain

f:id:mi-zmix:20190409221544p:plain

f:id:mi-zmix:20190409222102p:plain

f:id:mi-zmix:20190410215139p:plainその他は、結局CastTo使ってます。
Tickの方は、アクターのBPを作ったらまずはDetails内にある、ActorTickのStart with Tick Enabledのチェックを外すというところからはじめました。最初から薄く存在しているイベントノードもすぐに削除です。どうしても使いたいところは、負けた気分になってチェックを入れなおしました。
Tickを使わないことによって、「内容を更新するタイミングはいつなのか」「現時点の変数の中はどうなっているのか」など、かなり意識させられました。「炎の点」は、4個取ったあとにもう一回イベント送らないとウィジェットが更新されないとか、あたりまえかもなのですがTick(バインド)に頼っていたら気をつけなかったところです。

その他、ナイアガラも使ってみましたが、中途半端だったので今後の課題にします。

円ゲートについて

プレイヤーの選択によってスコアが変わると良いと思ったので、たくさん集めてから円ゲートをくぐるほど良いというルールにしました。はじめは、取れば取るほど重さが増えて、脚が遅くなるって考えていたのですが、ちょっとネガティブすぎるかなと思ってやめてました。むしろそっちのほうが、「たくさん集めておくリスク」が明確になって良かったかもしれません。

f:id:mi-zmix:20190409225006p:plain

とりあえずルールとして実装するのは難しくはなかったですが、不具合が多数あったので地味に試行錯誤を繰り返しました。
円ゲートでどんな不具合がでたかというと、

くぐる判定のコライダーにぎりぎりかぶるようにピックアップが置かれてしまう。取りに行ったらくぐったことになってしまう。
> ゲートの近くにいるときは、射撃できないようにしました。
> またゲートの周りにバリアをつけて、プロジェクタイル弾をはねかえすようにしました。

ぎりぎりの場所にあるピックアップを取ってすぐにくぐったとしても、最後にとったピックアップは集計に入ってない。(1マイナスの状態で通過したことになった。クリア判定になるタイミングで、クリアしてないことになっていた)
> ほんとにギリギリの場所には、ピックアップアイテムが置かれないようにした(まれに置かれることがあります)
> クリア直前でレベル上のピックアップアイテムを改めてサーチするようにした。

ゲートの中で敵にぶつかる。ばらまいてしまうので、タイミングによって所持している数と通過した数が異なる。
> ゲートのバリアに敵が入らないようにしました。
> プレイヤーがバリア内にいれば攻撃してこないという対処をしました。

という、行動を制限する形で対応しました。そもそも「スコアとゲームの根幹にかかわる大事なものなのに、力いっぱいばらまく」仕様が良くないともいえます。

「亠」の数は、GameModeで0.33秒ごとにタイマーのイベントを発行して、Tagで全部探すようにしました。同時に、残っている敵の数も探っています。

f:id:mi-zmix:20190411224652p:plain

 

レベルについて

最初の想定では、レベルは倍以上の広さがあったのですが、プレイ時間とバランスを調整して狭い感じで落ち着きました。プレイヤーがやることはあまり変わらないので、レベルを広くしても変化が少なくダレてしまうので、さっくり終わるようにしました。
アクションゲームを面白くするには、マップギミックや敵のメリハリ等、工夫がたくさん必要なんだなと実感しました。3Dだとなおさら大変だと思います。

壁はブロッキングボリュームを並べる形にしてました。
斜めになっている壁は、立方体の状態からエディットしてエッジを調整しましたが、継ぎ目の部分でヒットが抜けることがまれにありました。下図のような形にして並べていましたが、斜めの中央のエッジ付近でよくHitが抜けていました(たまたまかもしれませんが)。こういう形は、3Dモデラーとしては避けて通りたい四角ポリゴンで、なにかこうムズムズと気持ち悪い感覚が拭えない状態でしたが、並べちゃいました。

f:id:mi-zmix:20190409223658p:plain

普通に遊んでいれば問題はないですが、壁にぴったりくっついた状態で敵にやられるとダメでした。そのため、長い直方体を斜めに配置する形に変えました。まっすぐの壁ならば、ブロックを並べるのではなく、1個のコリジョンだけにするのがいいのかもしれません。下図のように対処しました。

f:id:mi-zmix:20190409224134p:plain

それでも絶対に抜けないとは言えないので、床の下にコライダを置いて、そこにHitしたら指定の場所にテレポートさせるようにしました。たぶんほっとけばキルゾーンに到達してデストロイすると思いますが、スコアの元が消えてしまうのは気持ち悪いので、レベル上に戻ってくるように対応しました。

f:id:mi-zmix:20190409224357p:plain

以上、企画についてでした。

次はプレイヤーまわりについて書きます。