てんちょーの技術日誌

自分がつまづいたこととかメモ

【UE4】第5回ぷちコンに応募しました トロンとカノ編 【概要とか】

はじめに

今回は2作品応募したので、こちらも書きます

今回はこちら

www.youtube.com

もう1つのほうはこちら

shop-0761.hatenablog.com

応募時に送ったスクリーンショット

f:id:shop_0761:20160422004153p:plain

f:id:shop_0761:20160422004210p:plain

f:id:shop_0761:20160422004233p:plain

f:id:shop_0761:20160422004246p:plain

f:id:shop_0761:20160422004312p:plain

概要

今回は2人称視点+姉妹愛をテーマにしてます。1人称と3人称視点のゲームがあるならなぜ2人称はないのかと思って作り始めました。 といっても、何を持って2人称なのかははっきり決まってないみたいです。そんな時、こちらの記事を読みました。

ぺぺぺな日々 ゲームにおける二人称視点カメラってなんだ走り書き

個人的なその一例が昔スーパーファミコンで遊んだことのある「ハロー!パックマン」です。

ハロー!パックマンを知っている方がどれだけいるか分かりませんが(ほぼいない気がする)、過去にやったことがあるので個人的にはなるほどと思いました。

動画

www.youtube.com

これはあのパックマンをパチンコを使って誘導したり、アシストするといったようなプレイスタイルです。そしてパックマンの機嫌も攻略の鍵になったりします。 なので、プレイヤーの感情的には「なにやってるんだよ!!」とか「よくやった!!」とパックマンとプレイヤー間のコミュニケーションがある程度発生するので、 結構面白い試みだったんだと思って参考にしました。

作ったものはここまで濃い感じのコミュニケーションではないですが、指示を出す、アシストしてもらう、といったコミュニケーション面に目を向けてみました。

愛の方のテーマとしては、OPで原因不明でなかちゃんが倒れてしまったのでそれを助けに妹が頑張る、みたいな設定にしてみました。

ちなみにトロンはTrace OnというBASICコマンドのTRONを引っ張ってきて、"追跡する"とかいう意味で使ってます。

技術的なおはなし

今回いろいろやってみて、使えそうな感じのものは別記事にして検索しやすいように1記事1ネタみたいにしようと思ってます。 以下リスト書いておきます。他にもここどうなってるのみたいのがあれば書くので、@までお願いします。

思いついたら追記するかもです(多いなこれ…

ほかにも

  • LightはLightSource(intensity0)と多分skyLightくらいしか残ってなくて全部UnlitでEmissiveColorだった
  • 最初はVR対応を考えてたのでカノちゃん操作時は頭のスケールめっちゃ小さくしてた
  • 後ろ振り返るの面倒だから後ろ見るボタン作ってあった
  • リターゲットしても微妙なモーションがいっぱいだったからアニメーションブレンドで誤魔化した
  • 見えない床はCSVファイルで生成パターンを変えれるようにした
  • 最初の"カ…ノ…"は既存ボイスから無理やり切り出した
  • Dissolve大好きマンになって多用した
  • 壁の色が変わるやつも気に入って多用した
  • PhotoShopの体験版でLookUpTableで絵作りしようとして結果ボツにした
  • 座標から図形を割り出してみた

などなどあります。

そして今回使った素材はtextureとMesh系は全部自作しました。 ボツになったのも含めてtexture(UI用も含む)は約70点、Mesh(skeltalも含む)は約30点をクリスタとBlenderで作ってましたね…

BGMやSEは以下のサイトなどからお借りしました。ありがとうございました!!

パッケージングしたものはすでにあって公開できると思うのですが、どこにあげるのが一番いいのか分からなくて困ってます(dropBoxとかだと容量があとあと辛くなるので避けたい)

どこかいいところがあれば教えて下さい。

googleDriveにあげてみました。何かあればご連絡ください。

TronAndKano.zip - Google ドライブ

そして今回ゲームを作るにあたって友人の@Shooter_nmに色々と意見を頂きました、ありがとうございました。

【UE4】ビヘイビアツリーでちょっといいAIMoveToもどきを作ってみた

はじめに

ぷちコンで作ったもろもろ紹介編です

元記事

shop-0761.hatenablog.com

すでにあるAIMoveToはなんか使いにくくありませんか…

移動にかかる時間がわからないし、障害物に引っかかってもなかなか中断できないしでやや困り者です。 さらに言うなら、トロンのように空中を動き回るものには使えなかった気がします。(ただこちらはPluginがあるみたいです 

forums.unrealengine.com

なら自分で作っちゃえってことで作りました

まあ無理やりな感じなのでバッドノウハウな気がします…

作ったもの

ビヘイビアツリーではTimeLineノードが使えません。なので、使いたい場合は別のBPのイベントを呼んで、そちらで実装する必要があります。

Task側はこんなイメージです(画像はBossの攻撃分岐ですが…

f:id:shop_0761:20160422111352p:plain

これBindは1回すればいいみたいなのでこう書き換えたほうが処理的にはいいかもしれませんね(分岐の上だけ書き換えてみた

f:id:shop_0761:20160422111839p:plain

流れとしては、

  1. Event Receive Execute AI
  2. OwnerController/ControlledPawnをcast
  3. EventDispactherとbind
  4. castした変数からイベントを呼ぶ
  5. そのイベントが終わった時にEventDispactherをCallする

って感じです。ここでは4までやってます。よくあるイベントディスパッチャと同じです。

で、ビヘイビアツリーのタスクはFinish Executeを呼ばないかぎり、そのタスクが実行中になります。

それを逆手?に取ってbindしたものが呼ばれるまで他のBPのイベントの処理待ちが出来ます。

なので中断するときも同様に実装してあげれば好きなタイミングで中断させられますね。

中断はこんな感じで使ってました。

f:id:shop_0761:20160422113047p:plain

で、あとは呼び出した先で自由に処理すればいいわけです。

実装例

トロン

トロンの移動はこうなってます。

f:id:shop_0761:20160422113619p:plain

最後にEventDispactherをCallしてます。

そしてちょっと注意が必要なのがTimeLineノードでのlerpノードに使うalpha値です。ただの0から1の直線にすると変化が急すぎたりします。(特にLocationのほう)

なのでトロンの場合は最後にギュッとあげるよう調整してますが、動画にある通りなめらかに動いてくれてます。

f:id:shop_0761:20160422114115p:plain

トロンの場合は空中移動なので、歩くなどのモーションが絡んでこないため楽ですがボスのように走り回る場合は調整が大変でした。

ボス

1つのアニメーションのplayRateを書き換えることで走る速さを距離によってCurveを使って変えてました。

そのCurveはこんな感じです。縦軸がPlayRateで、横軸が目的の位置までの距離です。

f:id:shop_0761:20160422115704p:plain

移動可能な最小距離を400にしてたので微妙な位置からはじまってますね…

(デバッグ中に距離とPlayRateを出して早すぎたり遅すぎたりしたら点を追加して…みたいにつくりました)

こればっかりは自分で見て納得がいくまで調整が必要なので、歩いたり走ったりするモーションが含まれるものの調整は大変です…

メリット・デメリット

この方法のいいところはTimeLineで調整するため、LengthやPlayRateを自分で調整できて、かつ中断するのも容易です。AIMoveToでは目的地につくまでゴリゴリ進んだりすることが多いので…

そして、NavMeshBoundsVolumeが要りません。設定し忘れでハマることも減りそうです。SetActorLocationのSweepにチェックをつければ、壁にぶつかってすり抜けなくなったり、逆にすり抜けさせることも出来るかと思います。

悪いところとしては、AIController/ControlledPawnのBPに処理を書くことが多いのでビヘイビアツリーが形骸化してるようにも思います…(そしてBPが重くなる

さらに現在地のZ値と目的地のZ値が異なると、キャラクターが傾いたりするのでちょっと注意が必要です。

良くも悪くも調整するところがたくさんありますが、今回の方法のほうがTimeLineノードのようにタスクで使えないノードもあったりするので凝った処理をするなら いろいろ都合がいいのかなと思いました。

質問などがあれば@shop_0761までお願いしますー