投稿記事

2023年 05月の記事 (6)

わんころのUE5勉強会 2023/05/30 20:04

雑談編:アンリアルクエスト5に初参加させて頂きました!

皆様、こんばんは!

今回初参加となったアンリアルクエストの振り返り記事となります。
特に技術的なお話はありません。使用した機能や実装例については別記事にしようと思っております。


1週間という期間が設けられていたんですが、土日は作業できなさそうだったので、仕事終わりの時間と休日1日を利用して参加させて頂きました。

▼ アンリアルクエスト5のページ
https://historia.co.jp/unrealquest05


今回参加を決めた経緯と自分に課した課題

「剣を使って敵を倒そう!」とお題が提示され、恐らくアニメーション周りの実装も絡んできそうな雰囲気でした。

当初の目的は剣で攻撃するアニメーションが貰えると生放送で言ってたのでただの乞食目的で、イベント自体に参加するつもりはありませんでした。


私は UE5 を触って丁度1年になるのですが、まがいなりにも UE5 の解説系動画を投稿している手前、現在自分の知識がどれくらい増えたのかが結構気になってました。

調べながらあれこれ実装すると全然間に合わない気がしたので、もし調べないといけないものがあれば後日自分への課題とし、今ある知識だけでどこまで実装できるかという制限を自分へ設けました。

正直全然実装出来ないんじゃないかと思ってましたが、力試しをしたい!という思いからクエストクリア方式で参加を決めました。

1日目

クエスト開始1日目なんですが、なにを思ったのかクエストは明日から開始だー^^と思っておりまさかの出オチから始まります。何も言うことはありません。


2日目:お題いきなり難しくない?

<1日目のお題>
初級「敵を倒せるようにしよう!」
中級「敵に死亡演出をつけよう!」
上級「ビヘイビアツリーを使って敵を賢くしよう」

<2日目のお題>
初級「敵を全滅させたら勝ち」
中級「敵が自動的に出てくる仕組みを作ろう」
  「敵にHPをつけよう」
上級「敵の攻撃をはじく仕組みを作ろう」

ようやくクエストの発表がありましたね!()
ということで2日分のお題をここで確認します。

敵を倒すというのがいきなり初級で来ました!
初級の割に難易度難しくないですかね?と思ってました。明日以降どうなるんだ...と不安でしかありません。

https://twitter.com/UE5wancoro/status/1660666731290034178

こちらが初日の成果です。サンプルプロジェクトが配布されていたので、どういうプロジェクトなのかざっと目を通してこの日は終わりました(白目)

サンプルプロジェクトには予め剣を振るモーションなどが用意されており、当たり判定部分を実装すればこの辺はクリアできるという優しい配慮がされていました。

(作業時間:おおよそ1時間半)


3日目:時間足りなくない?

<3日目のお題>
初級「前転する仕組みを作ろう」
  「プレイヤーのHPを削られたら負け」
中級「連続攻撃をしよう」
上級「必殺技を入れよう」

相変わらず初級の難易度が高く感じています。

ただでさえ出オチを決めているのにここにきて怒涛のお題が攻めてきます。もはやこの時点でゲームが出来ているといってもいいレベルのお題です。

https://twitter.com/UE5wancoro/status/1661037351479697409

ツイートの下が2日目です(上は1日目と同じものです)。
敵のスポーンはできましたが、敵のHPはなく、全て撃破したという判定もないため、ここまででクリア出来てるお題は1日目の初級のみです。

やばすぎるって...
普段はとっくに就寝してる時間なんですが、この日は少しでも取り返そうと夜更かししてここまで進めました。

(作業時間:おおよそ4時間)


4日目:準備したものが少し活きる

<4日目のお題>
初級「ステージを作って飾ろう」
  「回復アイテムを入れよう」
中級「爆弾を作ろう」
上級「敵のバリエーションを作ろう」

サンプルプロジェクトに入ってるアセットで以降のお題が推測できたことをここでようやく掴みます(遅い)


https://twitter.com/UE5wancoro/status/1661487599821918208
こちらが3日目です。準備してたものを組み合わせ、敵の死亡エフェクトや連続攻撃、ローリングでの回避が実装できました。

前日 GAS を用意して準備は出来ていたためこの辺りの状態遷移は割と楽だったと思います。

また、2日目で夜更かししたせいで、帰って御飯を食べそのまま就寝。朝3時半ごろに目が覚め仕事前までちょっと作業を進めることにしました。

(作業時間:おおよそ3時間)

https://twitter.com/UE5wancoro/status/1661721840233107456
更に同日、夜に少し作業を行いHP処理を実装。
ただ HP を減らせばいいのに謎のイージング処理を入れて少しだけ見た目を良くしましたが、HPバーがダサすぎて帳消しになった感じがしますね。

(作業時間:おおよそ2時間)


5日目:もうお題の最終日なんですか!?

<5日目のお題>
初級「SE・BGMをつけよう」
  「エフェクトを入れよう」
中級「UIを実装しよう」
上級「こだわりのヒットストップを作ろう」

最終日のお題が一番初級っぽい気がしますねぇ?

この日は休みで、作業時間がまとまって取れる日でもあり、実質の作業最終日でもありました。これを逃せば終わりです。
とにかくできる作業をごりごり実装していくしかありませんでした。

この日のツイートを探してみましたが進捗動画の投稿をしてなかったようです。

(作業時間:おおよそ8時間)

そして一足先に撤退させて頂きこの日を終えました。
とにかくできる限りのことはやった...もはやスポーツなのでは...


6日目:提出用の動画を作成して投稿!

帰宅して提出用の動画を作らないと...
クエストクリアが分かるプレイ動画を用意し、動画で字幕だけつけようと思い編集開始。

動画時間が短いとはいえ20分も掛からず動画の編集~書き出しまで終了。いつも VOICEVOX 使って音声を入れてますが、これがないだけでだいぶ楽ですね。癖になりそうです。

そしてこの数日で完成した成果物はこちらです!

https://youtu.be/BYxKQX5MN9g

クエストはどれくらいクリアできたか

初級:全てクリア
中級:4日目の爆弾以外実装
上級:4日目の敵バリエーションのみ実装

<時間があればクリアできた課題>
2日目上級:敵の攻撃を弾く仕組み
2日目上級:必殺技を入れよう
4日目中級:爆弾を実装しよう

<調べないと分からなかった課題>
1日目上級:ビヘイビアツリーを使って敵を賢く
5日目上級:ヒットストップ


こんな感じでした。最終日は結構時間を取れたと思うんですが、それでも実装を見送るものが多かったです。

最後に:参加してみて

冒頭で記載した 自分の知識だけでどこまでいけるのか? にチャレンジしてみましたが、お題に出たアニメーション周りは意外と実装できたなぁと思いました。

今回のイベントでとても有意義な時間を過ごせました!決められたお題をクリアしていくというのがかなり楽しかったです!

また何かのイベントに参加してみたいな~~と思いました!

運営様や参加された皆様、本当に本当にお疲れ様でした!

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

わんころのUE5勉強会 2023/05/30 15:36

自作ゲームの進捗13:導入部のムービー仮置きとテスト

皆様、こんにちは!

久々の自作ゲーム進捗報告です。
レベルシーケンスを使った最初のムービーを仮置きしました。

ムービー自体を本格的に作ろうといった趣旨ではなく、レベルシーケンスから色々なイベントを呼んで制御したくてテストしてました。

レベルシーケンスは丁度一年前 UE5 の基本操作を少し覚えた時に初めて触ったもので、そこで YouTube のエンドカードを作成しました。

あの時は Active にするかしないか、Actor の位置をなんとか調整したりなど、使ってる機能は非常に限定的でした(そもそもイベントを呼ぶといった概念すらも知りませんでした)

そして1年越しに、UE5 の操作もあの頃よりは扱えるようになってるんじゃないかと思い実験したかったという感じです。


ムービー内で下記のことを行いました。
- 起き上がる時の目線
位置や角度を調整しただけなので凄く不自然ですが、後々調整します

- シーケンサー内で Widget を表示する
今回一番やりたかったことで、出来るかな~と思いながら試したら普通に Widget を表示するのとほとんど変わらずでした。


まずはこの Level Sequencer が有効になったタイミングで「Initialize」という自作のカスタムイベントを呼び、そこで色々な初期化処理を行います。

その一部分に、シーケンサ内で表示する文字を DataTable から読み込み、扱いやすいように変数に持っておきます。



Level Sequencer 内でメッセージを表示したい場所にキーを打ち、そこから呼びたいイベントをバインドします。

イベントがこんな感じの実装になっていて、本プロジェクトでは Player Controller が Widget を持っているので、Blueprint Interface を使って「Get Player Controller」->「BPIの関数」で呼んでいます。



「Get Next Message」という関数は現在のページを示す変数 CurrentPage と、DataTable の最終行を示す変数 LastPage を比較して、ページがまだ残ってる場合は先程 DataTable から読み込んだメッセージ用の配列にインデックス(CurrentPage)を指定して戻り値で受け取れるようにしています。

以前会話イベントを作成する動画を作成したことがあったのでこの辺りの仕組みもだいぶ理解が深まったと思いました。


- シーケンサー内で効果音を鳴らす
最後に、ベッド横に置いてあるスマホが持つ Audio Component に対してアラーム音(バイブ音)を再生し、インタラクト時に再生を止めるという所までの一連のイベントが完成出来ました。

ただ Actor を動かすだけだったシーケンサで、色々な制御が出来るようになってたのは驚きました。



スマホは UE5 のモデリングモードを使って作成してみました。

今後のことを考えて Blender とか勉強した方がいいんですが、簡単なものなら UE5 上で完結できるのでちょいちょいお世話になってます。

そんな感じで本日の進捗はシーケンスのお話でした。
これで特定の場所へ行ったときのムービーシーンなど、出来る幅が広がったのでとても嬉しいですね!

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

わんころのUE5勉強会 2023/05/20 21:05

【UE5】ブレークポイントで停止中にメモリ使用量が大きくなっていく

https://youtu.be/RG3loFS2Yw0

先日、ブループリントのデバッグ入門編みたいな動画を作成してみました。
この動画なんですが、実は作成するのにめちゃくちゃ苦労したんです!!というお話と、何に苦労したのかを記事にしてみました。
(まぁタイトルの通りなんですけどね...)



UE5.1.1 でサードパーソンから新規プロジェクトを作成しただけの状態です。メモリ使用量は約1520MBになっています。


そして BP_ThirdPersonCharacter に1キーを押したら BP_Enemy型の変数 Enemy から IntValue という変数をゲットし、その変数にセットするという何の意味もない処理を追加します。

画像はないですが BP_Enemy は BP_ThirdPersonCharacter を複製して名前を変えただけのもので、それをレベル上に配置したものになっています。



そして、この処理にブレークポイントを置き、プレイしてから1キーを押すと画像の状態で一時停止します。

ここで Enemy のピンや、そこから Get してる IntValue のピンの上にマウスオーバーすると変数の値を確認することができます。

この一時停止している状態で、タスクマネージャーのメモリ使用量に注目しながら、マウスオーバーを何度か繰り返し行ってみたという画像です。

今回は極端に20~30回ほどマウスオーバーを繰り返したんですが、使用量は約1962MB に増えており、先程の状態が約1520MB なので、約400MB ほどメモリの使用量が増えたということになります。


メモリ使用量のお話を先にしてますが、動画作成中はまさかそんな現象が発生しているとは思っておりませんでした。そして、動画の撮影中に初めて録画ソフトが落ち、更に UE5.1 も落ちました。

この PC は UE5 を使うにはスペック的に心許無いのは分かってて使ってるので、デバッグしながら録画はちょっときついか~と思ってました。

しかし2回、3回と落ち始め流石におかしいと思い、上記のタスクマネージャーを開きながら確認したところ、ブレークポイントで停止中、ピンの上にマウスオーバーする操作を繰り返すごとにメモリの使用量が上がっていく現象に気が付きました。

しかもデバッグを中止したにも関わらずメモリは増えたままで解放されていませんでした。私の PC はメモリ 16GB なので VOICEVOX + 録画 + 動画編集ソフト + UE のセットでいつも編集中はメモリ10~12GB 前後使ってるのでメモリリークなんて追い打ちをされた日にはたまったもんじゃありませんね。

これを解消するにはエディタごと再起動すれば治りますので、デバッグが終わったらこまめに UE を再起動して、また動画を撮って...と繰り返してました。VOICEVOX の音声に合わせているので動画が一発撮りで終わるわけもなく、これ動画出来上がるんか!?と思いながら編集に2週間ほど掛けようやくといった所で落ち着きました。


この症状は UE5.0.3 / UE5.1.1 で確認できました。
(UE5.2.0 はまだ未確認)

恐らくなんですが、オブジェクト参照の変数に対して先程の操作を行うと発生するのではないかなと思いました。
(オブジェクト参照以外見てないので分かりませんが...)

普通の Integer 型の変数を作成して Get/Set するだけの処理では特に変わってないような気がしました。

仕様なのか不具合なのかいまいち線引きが難しいのはやめて欲しいですね~。


2023-05-20 追記:

https://issues.unrealengine.com/issue/UE-145543

多分症状これっぽいですね...
Fixed になってて、Target Fix が UE5.2 になってるので UE5.2 で治ってるのかもしれません。

時間が出来たら確認してみます。

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

わんころのUE5勉強会 2023/05/17 23:14

【UE5】未だに変数のウォッチがよく分かってない話

UE5 にて Blueprint のデバッグをする際に役立つ機能の1つ、変数のウォッチが未だによく分かってないというお話です。

【公式ドキュメント】ブループリント デバッガ

使い方は上記ドキュメントに記載されています。



変数のピンで右クリック> "この値をウォッチ" と選択すると


青色の虫眼鏡マークが付き、ブレークポイントで止まったタイミングで、ウォッチ対象にした変数の中身がリアルタイムで確認できるようになります。


DummyFunc1 が実行された時点では、Boolean型の変数(DummyFlag)に True がセットされています。


ここからステップ実行していくと、ブランチの分岐から True 側を通り、DummyFlag へ False をセットします。
そのタイミングで、ウォッチ対象の変数がリアルタイムで変更され、現在は False であることが確認できます。



これを構造体とか配列の変数をウォッチするとこんな感じで見えますが、ノードに被ったり、インデントなどがなく一列で表示されているため見にくくなってます。

また、ブレークポイントで止まってる間はノードをずらすことは出来ないようです。



そこで、メニューバー「デバッグ」>「ブループリントデバッガ」を開くと、かなり情報が見やすくなります。


赤文字で 表示したいBPを選ぶ と書いてますが、ブレークポイントで止まると、自動でそのブループリントの情報がブループリントデバッガのウインドウに表示されます。

更に情報を展開すると、ウォッチ対象の変数がここに表示され凄く見やすくなっていることが確認できます。凄い便利になりました。


さて、前置きが長くなりましたが未だによく分かっていないというのがここからで、ウォッチ対象の変数は Blueprint グラフ上ではリアルタイムで更新されるんですが、ブループリントデバッガのウインドウではリアルタイムに更新されません。


例えば画像のように、初期値を 0 に設定した Integer型の変数を Increment Int するだけの処理を何個か繋げ、この変数をウォッチに登録し、ステップ実行していったという図です。

5回目の Increment Int(白い矢印がある所) はまだ実行前なので変数の値は 4 になっており、リアルタイムでここは変化していきます。


ブループリントデバッガの方で確認した時の画像です。
上半分がセルフ(この Actor 内の変数一覧が見れる部分です)で、下半分がウォッチに登録した変数です。

同じ変数を見ているのに、セルフの方は 4 になっているんですが、ウォッチに登録した方は 0 のままでリアルタイムで更新されていません。

この状態でウォッチを解除してもう一度ウォッチに登録するか、ブループリントデバッガパネルを閉じて、メニューバー「デバッグ」>「ブループリントデバッガ」でもう一度開くと 4 に更新されました。
(リアルタイムではなく手動で更新してるような感じです)

この挙動は UE5.0.3 / UE5.1.1 / UE5.2.0 で同じ挙動を示していることを確認しました。


UE4.27.2 ではウォッチした値はリアルタイムで更新されてました。


UE4 はメニューバー「ウインドウ」>「デベロッパーツール」>「ブループリントデバッガ」に入ってるんですね。少し探しましたよ。


UE4 はウォッチタブというのがあるみたいでここで一覧表示されるようです。こっちの方が見やすい気もしますね。

フォーラムや reddit 等含め一応ネットで調べてみましたが、検索が下手くそすぎて UE5 のブループリントデバッガの情報がそこまで見当たらなかったです(デバッグにこういうのが使えますよみたいなものしか確認できず)

デバッグは皆さんやってそうですし、この挙動のままバージョンアップしてきてるならこれが仕様なのかもと思ったり。


セルフ内で見るとか、Blueprint グラフ上で確認すれば見れなくはないんですが、配列や構造体みたいなものを見ようとするとブループリントデバッガの方が見やすいのと、更にウォッチに登録してるものだけを個別に確認できると見やすいと思うんですけどね...



2023-05-18 追記:
Twitter にて UE5.03 / UE5.1.1 / UE5.2.0 で同じ症状が発生している方からコメントを頂けました><
本当にありがとうございます!

不具合っぽいですね...
バグ報告みたいなの出来ればやってみたいけど英語のフォームっぽいので翻訳したものそのままでも大丈夫なのかしら...

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

わんころのUE5勉強会 2023/05/08 22:37

自作ゲームの進捗12:インタラクト時のメッセージ表示


その辺りのものを調べた時に表示するメッセージ周りを実装。


今後のこともあるので出来るだけ簡単に扱えないかあれこれ考えてました。


インタラクト時、Widget へ表示したいメッセージを引数で送る処理などをまとめたベースBP を作成しました。

引数で渡してる EventMessage という変数は「Begin Play」で DataTable から読み込んだ文章を変数にセットしています。

Widget をどこに持たせるのがいいのか未だによく分かってませんが、とりあえず Player Controller に持たせることにしました。
(Blueprint Interface で表示したいメッセージを渡してます)



表示するメッセージは DataTable で準備しておき、RowName にそのイベント名が分かるよう設定。


あとはベースBP を継承してレベル上に配置し、インスタンス編集可能にした変数(EventName)に上記 DataTable で設定した RowName と同じ名前をセットすれば、インタラクト時に紐づいてるメッセージが表示されるようになりました。

Enum で扱えないかも試したんですが、Enum値 と Name型の比較をするなど扱い方がよく分からなかったのでこのような実装になりました。


同じ名前をセットしないといけない制限はついてしまいましたが、名前をコピペすれば大丈夫かなということで、簡単に扱えるようにはなったと思います。


最近のゲーム制作報告は BP で色々実装出来るので凄く楽しめております。画面上に何も反映しなくても、後々役に立つシステム面とか構築してる時とかめっちゃ楽しいです!

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

« 1 2

月別アーカイブ

記事のタグから探す

限定特典から探す

記事を検索