妹でもわかるUnrealEngine4

毎日更新? 妹に説明するために書いてるけど、たまにわかってない場合もあるUnrealEngine4を中心としたゲーム制作の話。略すとイモリアル

毎日更新? 妹に説明するために書いてるけど、たまにわかってない場合もあるUnrealEngine4を中心としたゲーム制作の話。略すとイモリアル

ブループリント

ブループリントエディタの設定

妹「兄のブループリント見てると、時々トゲのはえたやつがあるよね?」「それはブループリントエディタの設定を試してるやつだよ。線の向きに合わせて矢印が出るという」「メニューから、編集 > エディタの環境設定の順番でクリックして、コンテンツエディタ…

rerouteノードの仕組み

妹「ノードをつなぐ線を曲げる時とかに、丸いポイントを付けてるけど、これって曲げるだけじゃなくて、その丸いやつから複数のノードにつなげるよね?」「つなげるよ」妹「でもドキュメントにはそれ書いてなかったような……あ、今見たら書いてあった」docs.un…

NavLinkProxyを置いただけではジャンプ出来ない

妹「ナビメッシュのところにNavLinkProxyを置くと、歩くだけじゃなくてジャンプも出来るって話だから置いてみたんだけど、やってみてもAIの敵はジャンプしてくれなかった……」docs.unrealengine.com妹「英語のページとか色々見てみたところ、ジャンプさせない…

マウスカーソルを表示するとマウスの移動量が取得出来ない問題

※4/20 UE4.11.2で修正が入ったので、追加記事を書きました UE4.11.2でマウスカーソル表示時の不具合が修正 - 妹でもわかるUnrealEngine4 妹「ちょっとマウスカーソルを表示しようとしてたんだけど、そしたら1度画面をクリックした後は、カメラが動かなくな…

ビヘイビアツリー研究② ブラックボードの使い方

妹「ブラックボード? というやつが、ビヘイビアツリーの変数なんだよね? これの設定の仕方もよくわからないんだけど。関係するノードはいくつか見つかったけど、どこにSETするのか決める方法が謎だったりとか」「とりあえずブラックボードにSETしたりGETし…

ビヘイビアツリー研究① サービスとデコレーターとタスクの違い

4/11 FinishExecuteについて少し追記妹「そろそろ花粉が収まってきたので、ぷちコンのゲームを作り始めようと思うんだけど」「今から?」妹「間に合うかどうかはあれだけど。とりあえずAIで思いついたのを作ってみたいんだけど、ビヘイビアツリーの、サービ…

スポーンアクタノードに初期値設定用のピンを追加する

妹「なんかスポーンする時のノードに、パラメータとか増やせるようになってる気がするんだけど」「それは前からそうなってるね。4.10かなあ」妹「知ってたなら教えてくれ」「まだ自分でもあんまり使ってない機能だったから……」「編集可能と、スポーンに公開…

拾った物をなげる

妹「手に持ってるアイテムを投げる仕組みが出来た。投げる角度はまだ調整前だけど。手に持ってるアイテムはただのスプライトで、投げる時は同じ場所に新しいアクターをスポーンしてProjectileMovementで飛ばしてる。持ってたアイテムは見えないようにすると…

UE4.11新機能 構造体のピンを省略出来る

「4.11の新機能で、構造体のピンの要らないやつ、詳細パネルから設定して省略出来るっていうのがあって、早速試してみてるんだけど……」妹「それはいいやつでは? 2DゲームだとVectorのY軸が要らないこととかあるから、それが省略できるとスッキリしそう」「……

サイコロを投げる前にRandomRotatorを使うといい感じになる

「理想的なサイコロの転がり方について調整してたけど、やっぱり投げる前のサイコロの向きを調整すると良さそう。どんな投げ方でも偏りは出るけど、それはどの目が出やすいっていうんじゃなく、その時に上になってる目が出やすいとか、その隣が出やすいとか…

レトロゲームプロジェクトの研究(7) サイコロころがし編(DiceGame)

forums.unrealengine.com「2Dのプロジェクトばかり紹介してきたけど、3Dのプロジェクトもある。ただゲームとして成立していない、あくまでテンプレートとして作られた物が多い。DiceGameもそうで、サイコロで何かゲームをするわけじゃなく、ただ2つのサイコ…

レトロゲームプロジェクトの研究⑤Asteroids編

forums.unrealengine.com「レトロゲーム研究を再開。今日はAsteroidsプロジェクト。これを何と説明したらいいのかわからないけど、マップはスクロールしていくタイプではなく、敵が次々に襲ってくるタイプのゲーム。そして自機は回転しながら全方向に迎え撃…

別の物体や崖っぷちに当たると反転する敵キャラ

imoue.hatenablog.com妹「前に言ってた、敵キャラのベロシティを調べて、0だったら反対を向くようにしたやつが出来たよ。でもなんかおかしいというか、途中でりんごっぴーと、なしっぴーが、並んで歩いちゃうんだよ。必ずこうなるわけじゃないんだけど……」「…

かさなってしまったアイテムが、ちゃんとバラけるようにする仕組み

妹「アイテムが画面上で重なってしまうと、そこに何個あるのかわからないし、拾う時にもわかりにくい。ということで重ならないように勝手に動く仕組みを考えた。」「何かが重なってることを検知した場合、重ならない方向に動かしていく感じなのかな。完全に…

ブループリントからコンポーネントを追加する時の内容設定

妹「昨日のやつ作っててちょっと謎だったのが、1列目のスプライトは何も設定しなくても表示されるけど、2列目のはSetSpriteで中身を指定しないと絵がでなかった。一体どういう違いがあるのか」「1列目用のPaperSpriteComponentを追加ノードには、ノードの詳…

コンストラクションで自動的に地面を広げる実験+縦方向

妹「縦方向の増築も出来るようになった。なんとなく仕組みがスマートじゃない気はするけど、思ってたような動き方になった」 妹「とりあえず最初に縦横の範囲を調べて、スプライト何枚分か計算して、その回数分だけループさせてスプライトを追加している。最…

ブループリントではゼロ除算エラーは起きない

※3/20 割る数と割られる数を逆にして実験してしまっていて、説明と図に間違いがあったので修正妹「今コンストラクションで色々やる仕組みを作ってるんだけど、割り算の時にゼロって使っても良かったんだっけ? パラメータによってはそんな事になる可能性があ…

SpriteStudioのユーザーデータに変数を埋め込んでUE4で取り出す

imoue.hatenablog.com「この前の無限ループになってたやつ、やりたいこととしてはSpriteStudioのアニメに合わせてコリジョンをオン・オフしたかったんだよね?」妹「そーだよ」「だったらSpriteStudioのユーザーデータを使うといいのでは?」妹「ユーザーデ…

InRange - 数値が特定の範囲ならTrueを返すノード

docs.unrealengine.com妹「数字がある一定の範囲内の時だけっていう分岐を作ろうとしてたんだけど、InRangeっていう使えそうなノードを発見した」「たしかにこれだとノードが少なくて済みそう。なぜFloat版しかないのかは気になるけど」妹「……あれ? Floatし…

全然無限じゃないのに無限ループと言われる問題

妹「パンチのボタンを押した時に、アニメーション中の特定のタイミングでだけ当たり判定を出したいんだけど、なんか無限ループだと言われるんだよ。タイミング的に1秒もないだろうし、全然無限じゃないよね?」「なるほど、これは見事な無限ループですな妹「…

サンプルプロジェクト紹介 ラジアルインパクト(RadialImpact)

「タッピーチキンさん達がラーニングから居なくなったけど、代わりになんか見たことのないのがあったから紹介」「ゲーム内容としては単純、画面上のランダムな位置に二重丸が出てきて、片方の丸が拡大縮小するから、2つの丸が重なったタイミングでクリック…

ProjectileMovementが別の物に当たるとそこから動かなくなる問題の解決法

妹「前にProjectileに設定したやつに、1度あたるともう落ちてこない問題ってあったじゃん? ブログに書いてたかどうかは思い出せないけど」imoue.hatenablog.com「あったねそんなこと。半年ぐらい前のに書いてあった」妹「その問題がついに解決したんじゃよ…

ブループリントからSpriteStudioで設定したデータを調べる

「ちょっとパーツの名前を確認したいから、妹が作ったSpriteStudioのデータが欲しいんだけど」妹「別にいいけど、名前だけならUE4からでもわかるよ」妹「SsProjectって書いてあるアセットをダブルクリックすると、こういうアニメーションの確認が出来る画面…

InputAxisの呼び出しタイミング

妹「インプットAxisのノードには、フレームごとに呼び出されるって書いてあるけど、よく考えるとこれってティックとは違うんだよね?」「ティックのと一緒だと思うけど」妹「でもティックは、色々忙しい時にフレーム飛ばしてることもあるんでしょ? そしたら…

継承したブループリントの関数から、親クラスの関数を呼び出す

「ブループリント関数のオーバーライドをやった時に、親の関数呼び出す方法がないのは変だなと思ってたんだけど、その方法が見つかったよ」前のやつ imoue.hatenablog.com「関数やイベントのブループリントで、最初に出てくる入り口用のノードを右クリックす…

論理演算ノードについて

妹「両方ともTrueだったら、Trueが出てくるのがANDノードだよね? これ逆に両方ともFalseだとTrueが出てくるノードはないのかな?」「ANDとかORとか全部ひっくるめて論理演算っていうんだけど……」妹「それ。自分で調べてみてたんだけど、何やら数学めいた言…

ゲームパッドの振動とスマートフォンの振動は同じノード

「UnrealMatch3で遊んでると、なぜかXBOX360コントローラーがブルブルいってて、なぜこんな不思議仕様になってるかと調べてみたら、振動に使うノードが同じだった。ClientPlayForceFeedbackノードで、ゲームパッドがあればそれを、スマホで動かしてればスマ…

英語の名前を付けるときの区切り方

妹「名前に日本語が使えないのはしょうがない……いやしょうがなくはないんだけど、とりあえず単語の区切り方はどうしたらいいんだろう。スペースはまずいんだよね? あと出来ればSHIFTキー使わない方法で」「なんでSHIFTキー?」妹「押しにくいじゃん」「うー…

多重スクロール実践編

「えー、今日はUE4で多重スクロールをやってみます」妹「背景を遠くの方に置けばいいのかな?」「今は遠近感ゼロの、2D仕様のカメラ使ってるから、それだと多重にならない」妹「カメラの設定を変える……と見え方も変わるのか」「そういう前提で調整するんだっ…

下からジャンプで通り抜けられる足場・その3(実践編)

妹「というわけで、昨日兄に言われた方法で雲を作ってみた。でもこれ上から降りてきた時はいいんだけど、下からいった時に頭ゴンゴンして上手くいかないんじゃよ。足場の上に頭が出た瞬間に、落下防止判定に引っかかるわけだから、通り過ぎる前にBlockになっ…

DestroyActorした後もデータは残ってる問題

imoue.hatenablog.com「一昨日書いた変数を空っぽにする方法なんだけど、妹の要望が変数を空にするだけだったから、Nullを入れとけばいいという話をしたんだけど、アクタそのものを削除したいという場合はちょっと話が違ってくる」妹「アクタそのものを削除…

変数を空っぽにする方法

妹「アクターが入った変数ってあるでしょ、水色のやつ。あれを削除するっていうのは出来ないのかな?」「変数の削除というのは無いかも。配列だったらRemove出来るけど、あれは例外だし、それでも配列そのものを消すことは出来なくて長さ0の配列になる」妹「…

配列のInsertとSetArrayElemの違い

妹「配列のInsertとSetArrayElemって一体何が違うのかと思って、マニュアル見たけど全然わからなくて、色々やってみた結果、Insertだとそれより後ろやつが1つずつずれていって、SeArrayElemというのだと上書きすることがわかった」「うーん、それはマニュア…

ハシゴにぴったりフィットさせたい問題

妹「ハシゴを登るという仕組みを前に作ったわけだけど、なんか気に入らないというか、ハシゴの中心からかなり外れてても登れちゃうというか……」「頑張ってつかんで登ってるんじゃないの?」妹「そんな謎の握力はないよ! で、まあ色々考えたんだけど、ハシゴ…

アクター同士の二次元距離を調べる

妹「前々回の話でさらっと流されてたんだけど、アクターの距離を調べるマクロを作ってあるんだよ。何回も使うし、ブループリントがごちゃごちゃするからこうした方がいいかと思って」「あったよ。知ってる知ってる」妹「いや知ってるとかじゃなくて、これで…

インターフェースのinputピン・outputピンを活用する

「ブループリントの中身を見ていて気になったところがあるんだけど」 「Overlapの時に自機アクターを変数に入れてるみたいだけど、これはインターフェースのinputピンから渡した方がいいのでは?」妹「インターフェースのinputピン? 見たことはあるけど、別…

配列処理に失敗してたところを探した話

妹「ヒジョーに困ったことになってるんだけど、何が困ってるのかよくわからないので困っている。完璧な計画だったはずなんだけど……」「どういう計画だったの?」妹「基本的には近くに操作可能な物があるとわかるようになるという仕組み。隠れられる茂みとか…

ブループリントを実行するのにかかる時間を調べる

妹「イベントティックで、配列の中身をループさせてチェックするとかやっていいのかな?」「やってもいいと思うけど、なんで?」妹「茂みとかもそうだけど、アクションが起こせるアクターの近くに行った時に、それとわかるような演出を出したいんだよ。で、…

茂みをアニメーションをさせる方法を考える

「InterpToMovementでやるのはあんまり向いて無さそうということで、今日はそうじゃない方法を考えてみることに」妹「まず考えたのはマチネってやつなんだけど。よく知らないけど、たしか何を動かすみたいな話だったような気が」docs.unrealengine.com「動か…

InterpToMovementで正確な回数ループさせるのは難しい

imoue.hatenablog.com昨日の続き妹「それで次に困っているのが茂みに出入りする時に、ガサゴソ動いて茂みが揺れる演出があるんだけど」「あー、揺れてるとこはいまいち動画に写ってないかも。フレームレート落としてあるもんだから」妹「そうなの!? そこ大…

茂みに隠れるやつ

妹「まだ調整中だけど、こういうものができた。そのへんに茂みの中に隠れられるようになっている」「これはどういう時に使うの?」妹「敵が通る時とかによけられる。あと弾みたいなのも。この状態だと動けないけど無敵」妹「茂みのコリジョンと重なってる時…

入力したコメントが消えてしまう問題の調査・その2

12/15 ②の1行目の入力でもバグることがあったので内容修正imoue.hatenablog.com妹「いろいろやってたらコメントが変になるやつ再現出来るようになったよ。どこがおかしいのかはともかく、3種類ぐらい気になる動作がある。カクカクシカジカで……」①・コメント…

ウィジェットのイベントConstructが発生するタイミング・その2

前回の話imoue.hatenablog.com「……ということを書いていたところ、AddToViewportするまでConstructが働かないなら、むしろ最初にAddToViewportしちゃうという方法を教えてもらったよ」妹「最初からAddViewportするとウィジェットが一瞬見えちゃうんじゃない…

ウィジェットのイベントConstructが発生するタイミング

妹「ウィジェットのConstructイベントから、こういうブループリントに繋がってるんだけど、ここが呼び出されるのが表示の後だから、表示される前に配列の大きさを使えないんだよ。Constructって作成した時に呼び出されるもんだとばっかり思ってたんだけど」…

ブループリントにおけるオーバーライド関数とイベントの違い

妹「オーバーライド関数も使うと色々出来るのはわかったけど、これイベントと何が違うの? 全部イベントでいいんじゃない? 関数よりわかりやすいし」「色々眺めた感じだと、あんまり変わらないのかなって感じはする。例えばウィジェットのオーバーライド関…

OnMouseMoveで自作カーソルを動かす……のはあんまり良くない

imoue.hatenablog.com「前にウィジェットでマウスカーソル作った時にOnMouseMoveがないか探してたんだけど、オーバーライドのところで見つかったから、今日はこれを使って自作カーソルの移動処理を作ってみました」「Canvasでカーソル作ってslotを経由したり…

OnKeyDownとOnPreviewKeyDownの違い

妹「結局のところOnPreviewKeyDownのプレビューというのはなんだったの? べつにOnKeyDownでも良かったの?」「OnKeyDownはそのウィジェットにフォーカスがある時だけ動くんだけど、OnPreviewKeyDownだとそれが子ウィジェットにフォーカスがあっても動く、と…

イベントでHandledを返して標準操作を無効化する

imoue.hatenablog.com「昨日の、フォーカス移動を自前のキー処理でやってても、カーソルキーとかでも動かせちゃう問題だけど、こういう風にすると対応出来る」「昨日のブループリントだと、A・S・Dの3つのキーのどれでもないキーが押された時、最後のブラン…

OnPreviewKeyDownイベントでウィジェットのフォーカスを制御する

妹「EventReply関係の話を探していたら、なんかウィジェットをキーボードを動かそうとしてる話を見つけたんだけど、その人がやってた方法はこうやってOnPreviewKeyDownイベントをオーバーライドしてたんだよ」「同じやり方を新しいウィジェット用に試したん…

Event Reply(イベント応答)を設定する

LogBlueprint:Warning: [compiler メニュー] 警告 Event Reply Return Value should not be empty. Return a reply such as Handled or Unhandled. LogBlueprint:Warning: [compiler メニュー] 警告 [0074.05] メニュー のコンパイルに成功しましたが、1 個…