読者です 読者をやめる 読者になる 読者になる

佐藤のゲーム制作部屋

初心者の私が勉強しつつUnreal Engineで制作してみます

【UE4】 敵キャラのAI

23章

この章はちょっと辛かったデス。AI、思考の定義などを行ったのですが、新しいエディタが出てきてそれにチャレンジしました。

f:id:satoysan:20160820160706p:plain

ビヘイビアエディタ。AIの行動パターンを定義できるのですが、上から下へ左から右への優先順位で処理が行われます。またそれの順序の並び替えもビジュアル的に簡単にできます。ただ、いろいろなエディタと行き来することになり、少々混乱します。いろんなブループリントで定義したものがつながったり離れたり、また新しい言葉と意味を理解するという流れと、20章あたりからの説明量減少などもあいまって、理解と作業の量がなかなか一致しませんでした。

f:id:satoysan:20160820164534p:plain

わからないなりに、書籍を見つつ作ってみた。 上から下へ左から右へ処理が流れます。条件に見合わない限りスルーされたり進んだり。

f:id:satoysan:20160820163509g:plain

一応、書籍通りにAIを組んでみたけどなんとなく反応が悪い。直線の視線にヒットしない限り見つかったことにならないので、判定範囲を実際のゲームを作るときには調整する必要があると思う。

ただ、今回1回では理解しきれないので、書籍を一通り終了したら、自分のキャラクターでAIを組みなおしてみたいと思います。理解が足りないままでは投げ出してしまいそうですから。

今回はさらっと理解したということで、次章へ進みます。

次は!アニメーションです。キャラクターに骨を埋め込み動きを実装します。

楽しそうです。(とはいえもう1回では理解できないでしょうが) また新しいエディタを編集しそうでガクガクですがw

【UE4】 ナビゲーションと初の配列

22章

ついに敵キャラクターが動きました。特定のポイントに敵が移動するだけ、というものなのですが今までは自分だけしか動かなかったので、結構な感動です。そして配列も使いました。いつもプログラムで書いている配列イメージがあるので、理解は難しくはありませんでしたが、ブループリント上での使い方が不思議でした。

AIコントローラ

f:id:satoysan:20160819234551p:plain

ブループリント作成でAIコントローラを選択。ワクワクする展開です。自分が難しいことをしなくてもこれでいろいろ定義すれば動いてくれる!というだけで楽しいです。

f:id:satoysan:20160819234702g:plain

決められたポイントに敵キャラクターが向かっていきます。しかも中央の障害物を避けてです。すごいですね。

配列を使って、敵キャラクターの巡回ポイントを増やして移動する

f:id:satoysan:20160819234757g:plain

マップに敵キャラクターの巡回ポイントを4か所定義して、そのポイントを配列に定義。そしてその座標に向かってループして移動するというものです。障害物をちゃんと避けて移動する。

ゲームマップに配置

f:id:satoysan:20160819235057g:plain

イイ感じです。指定ポイントに問題なく移動しています。このあと移動速度も調整しましたが、そのまま次章でAIの強化を行う処理の準備しているので、ここでいったん終了。

だんだん形になってきてうれしいです。とはいえUE4の使い方を一通り理解してもほんとやることが山の様にあります。当然ですよね、世界を作ろうとしているので。

だからこそ思いますが、1つのゲームメーカーが同じジャンルに特化するのはできる限り財産の再利用を行いたいから、ノウハウをそのまま進化させたいからなんだと感じます。自分も1つのジャンルを作ったらやはりその財産を再利用、進化させたいと思うのは自然です。

しかし、ゲームを作るのは好きなだけではなく精神的パワーが必要だなって思います。 次章は本格的?AIに進むらしいです。(23章)

【UE4】 コリジョンをさらに深く

21章

この章ではより深くコリジョンの指定を学びます。といいつつ一通りやってみましたが、1回で理解を深めるのは難しいので、ココも習うより慣れろと強く感じました。そもそも人に説明できません。感覚的には理解できましたが難しいなというのが正直なところです。

まずはキャラのコリジョン設定を変更

f:id:satoysan:20160819000443g:plain

死亡したら所持コインが頭の上で飛散し、自分は死ぬという流れの準備です。 物理コリジョンなしにプレイヤーを設定しているため、余計な反応を無くしているから突き抜けている・・・みたいです。

f:id:satoysan:20160819000754g:plain

まずは、キャラの前に飛散するコインのコリジョンを整えて、互いに干渉しないようにします。 これできれいな円の形で飛び散る状態になりました。

f:id:satoysan:20160819000906g:plain

そのあと、キャラクターが死ぬ瞬間にコリジョン設定を行い正しく死亡するように設定しました。

f:id:satoysan:20160819001236p:plain

(死ぬ瞬間にSet Collision Profile NameにRagdollをセットすることでコリジョン判定を発生させる。)

視線もコリジョン

f:id:satoysan:20160819001455g:plain

いきなり敵キャラ登場ですが、ようやくついにです。プレイヤー以外のナニガシが登場です。コリジョンを学ぶ上の1つとして、視線によるコリジョンの設定をしました。書籍を読みながら適用しましたが、なんとなくしかわかりません。でも、こういう理屈で、敵キャラに発見された!みたいなのを判定させてるんですね。。

習うより慣れろ習うより慣れろですね。 そして、何度もトライし続けないといけませんね。

【UE4】 物理エンジンって難しそうなもの

20章

だんだん面白くはなってきたけど、ほんとここまでくると思います。ゲームってものすごく作るの大変だと。1つ1つ小さな事の積み重ねなんだと実感します。これゲームエンジンを使ってるからここまでいろいろ準備されているからいいけれど、フルでプログラム書いていたらそれこそもういくら時間があっても足りないくらい。集大成なんだなと強く感じました。

ダンボールを作ってみる

f:id:satoysan:20160818001239g:plain

物理エンジンというものを使ってダンボールを表現。いちいちいろいろ計算しなくてもヨロシクやってくれる素敵な機能。なんでこうなってるのかよくわかりませんが、すごいですね。

乗ったパネルが落下する

f:id:satoysan:20160818001518g:plain

これもよくあるギミック。パネルに1秒乗るとそのまま真っ逆さま。(実際はそのまま落ちてるけど)これも物理エンジンによる動き。ただ、踏むまではフリーズしている状態なので、処理が行われないというものです。なるほど、こういう処理で世のゲームにある乗ると落ちる床なのですね。

ダッシュすると持っているコインをまき散らす

f:id:satoysan:20160818001741g:plain

これは所持しているコインをまき散らす処理で、頭の上にまき散らすソケットというものを埋め込む。ここではいろいろな方向にランダムでまき散らすという処理になっています。初めてのランダム要素。 他に複数の処理を行えるシーケンスとループ処理なんかも初めて登場します。

ダンボールをステージ1に配置する

f:id:satoysan:20160818002241g:plain

章が進むにつれて徐々にステージ1にモノが配置されて、ゲームっぽさが増してきました。とはいえ色々やはり足りません。これを考えても本当にゲーム作りは大変です。もっと作り方を理解すればより楽しくなるんだろうなと思いつつも、簡単でないことを実感しています。

次の章も楽しもうと思います。

ううむ眠い。

【UE4】 死亡と復活、コイン取得などの変数や関数

18章と19章

だんだん難しくなってきました。というか、説明が端折られ始めました。もちろん過去の章過去の節を参照してください。あるいは動画を見てください。という説明はあるので、突き放されてるわけではないのですが、ボケーっと写経してると一瞬「んん?」となります。

18章は死亡と復活、プレイヤーの大事な要素

最初にスイッチを押すとコインが出現するという処理の実装を行った。

f:id:satoysan:20160817013812g:plain

何かを出現させることをスポーンと呼ぶらしく、これはスポーンの処理を実装したことになります。

この後、今までなかったプレイヤーの死亡と復活を実装。 なかなかここは難解なイメージが残っています。

f:id:satoysan:20160817013957p:plain

プレイヤー復活のブループリントなのですが、この記事を書いている際見直しましたが、 やはり理解が浅いためか、これがこうであーだから。。。とぱっと見はわかりません。 しかし、これを動かすと次のようにちゃんと動きました。

f:id:satoysan:20160817014110g:plain

床のないところにダイブすると死亡という判定を設定し、死亡だった場合スタート地点に復活するという流れ。 (なんでスタート地点に復活するのかは実はわかっていない。最初に生成されたところだから?これの説明はなかった気がする)

19章は変数、関数、マクロについて

プログラムチックになってきました。でも私はプログラムを書く仕事をしているので、ここらの基本的な説明は理解できた。変数を定義する、変数にコインを貯める関数、コインを減らす関数、コイン枚数を表示する関数。

また、変数型についても軽く触れる。キャスト(型変換)も触れました。

他、お気に入りの追加方法(簡単に関数やノードを呼ぶための機能)や条件式(>=のや=など)をつかった判定、イベントの呼び出しなどブループリントでかなりやり込みました。

この章はあまり画像で表現できるものはなく、裏方の処理が主だったので、もしかしてここで少し挫折する人とかいるかもしれないなあとぼんやり思いました。でも、ここをしっかり経験しておかないと、面白い表現は一切できないと思うので、今後もこの章は何度も見直すことになりそうです。

次は20章、物理エンジンみたいです。 がんばろう。

【UE4】 カスタムイベントを使う

17章

独自のイベントの作り方を学ぶ。

ふすまの開閉

UE4にデフォルトで入っているイベントではなく自分でイベントを作る準備をする。

f:id:satoysan:20160816190852p:plain

どんどん新しいことが出てきてなかなか覚えていけない。それでも、動いていける範囲が広がっていく感覚はなんとなくあるので、楽しくもあります。「ココでこんなことしたなぁ」ぐらいの感覚でまずは進めます。

f:id:satoysan:20160816191150p:plain

ここで、ふすまのブループリントに開く(open)と閉じる(close)をカスタムイベントで作ります。
前まではBegin Playで開始時に即時実行だったけど明示的な別名をつけることで、任意のタイミングで開閉できるようにします。

f:id:satoysan:20160816191422g:plain

これはキーを押している状態なら開こうとしてキーを話すと自動で閉まっていく扉にした状態。

f:id:satoysan:20160816191554p:plain

ブループリントで「O」キーが押されているときは開くように指定した状態。 この指定を使ってスイッチを押すと扉があくようにしました。

f:id:satoysan:20160816191804g:plain

最後にスイッチを押したら扉が開き、5秒後に自動で閉まるというスイッチと扉。

f:id:satoysan:20160816191936g:plain

出てきた言葉

  • カスタムイベント
  • カスタムノード
  • タイムラインの逆再生
  • イベントディスパッチャー
  • Switchノード
  • Delayノード

【UE4】 タイムラインをつかってモノを動かす

16章

今回はオブジェクトを動かす処理を学んだ。

コインとふすまが動く

f:id:satoysan:20160816014754g:plain

コインはループの処理、ふすまは特定の移動を行って扉が開く。

コインのタイムライン

f:id:satoysan:20160816015125p:plain

フロートトラックというもので、1秒かけてくるっと回る。をループさせることで動きを作る。

f:id:satoysan:20160816015257p:plain

ブループリントは「BeginPlay」から処理が開始されて、上記で指定しているタイムラインに接続。 Make Rotというノードを使ってYawを接続。といいつつなんとなくしかわかってないので、1つ1つ今後も理解を深めようと思います。

他、スイッチを作ったりもしたのですが、そこは省きます。

ふすま

f:id:satoysan:20160816020619p:plain

ふすまがすごいなかなか感動。 マテリアルをメッシュに張り付けてできた形なのだけど。。。

ブループリント f:id:satoysan:20160816021103p:plain

タイムライン f:id:satoysan:20160816021210p:plain

ふすまの内側が0.5秒で後ろに後ずさって、0.5秒目から左(右)に移動。ということなのだけれど、 そういうタイムライン。X軸、Y軸で時間で動かしている感じです。何もかも初めてなのでなるほどなーと思うところがあります。ゲームエンジンって便利ですね。(確かにプログラムで書くとしても同じ理屈だろうけどサ)

以上、あとは明日。 次はスイッチ押して扉が開くようになる!