UE4の勉強記録

UE4の勉強の記録です。個人用です。

「Unreal Engine 4.xを使用してRPGを作成する」の足りない部分を作成するMonster Zoneの作成 Part 3

f:id:kazuhironagai77:20210606234824p:plain

<前文>

先週、なんで突然、直前まで書いた文章を消したのかと言うと、日本語学習にPitchの勉強は必要である派と必要ない派のディベートを見てて、日本語の文法について私見を述べた場合、日本語でこんな理性的な議論に発展する可能性は0だと思ったからです。違う意見の持ち主からディベートを持ちかけられるなら大歓迎ですが、単なる罵詈雑言を浴びるだけなら書かない方がましだと思いました。

だから消しました。

勿論、英語なら必ずディベートになる訳ではなく、むしろ英語の方が喧嘩になる事は多い位です。特に原理主義(Fundamentalism)の色が濃いアメリカでは、答えが最初から決まっている人達が結構いて、その人達はどんなに科学的な証拠を見せても聞く耳持たないです。一番分かり易い例が中絶の議論で、中絶は絶対駄目という原理主義者(Fundamentalist)は結構いて、中絶に関しては全くディベート出来ない事が多いです。どれくらい聞く耳持たないかと言うと、中絶を実行する医師の経営する病院を爆破したり、医者を殺害したりしています。

私の住んでいた所は結構田舎だったので、中絶は絶対駄目という原理主義(Fundamentalism)な人はそこそこいました。理由を聞くと大抵聖書に書いてあると答えます。聖書に書いてあっても例外もあるでしょう。と私なんかは思って大学の友達に聞いたら、例外を認めないから彼らは原理主義者(Fundamentalist)って呼ばれているんだ。と教えてくれて非常に納得したのを覚えています。

所が、最近になってRedditを見るようになって知ったんですが、聖書には中絶を勧める文章がいっぱいあるそうです。それを知った時何それと思いました。

更に、中絶反対する人でも嫁以外の女性を妊娠させた時や高校生で彼女を妊娠させた時なんかは、なりふりかまわず中絶を進めてくる話も知りました。アメリカでは生まれた子供の養育費は生物学的な父親が負わなくてはいけないのと、もしそれが出来ない場合は刑務所行きになるからだそうです。

日本語で語る分には、こういう中絶のようなアメリカではSensitiveで非常に気を使って話さないといけない話題でも、命の危険を感じずに軽く語る事が出来ます。こういう話題をここですべきと再確認しました。

逆に、日本語でこれを言うと語弊があるなとか、波風を立てる可能性がある話題は英語で日本人に見つからない所で議論すればいいんです。

それでは今週の勉強を始めます。

<本文>

1.今週の予定

今週は以下の事をやります。

2.Unreal Engine 5について

ちょっとだけUE5について調査します。調べても私のPCのスペックでは動かないと思うので悲しくなるだけかもしれませんが。

2.1 必要とされるスペックについて

当然どのくらいのSpecのPCが必要なのかがまず知りたいです。UE5 Specと打ち込んだら一番最初に以下の記事が出て来ました。

Unreal Engine 5 is now in Early Access for developers – download the Valley of the Ancients tech demoによるとUE5そのものではなくそのデモ(The Valley of the Ancient demo)を実行するのに必要なスペックは

f:id:kazuhironagai77:20210606235258p:plain

だそうです。最低基準すら私のPCでは満たしていません。

流石にハードの値段について疎い私でも、今Video Cardが品薄になって価格が暴騰している事は知っています。新しいPCを購入するにしても最速でも年末か、もしかしたら来年になるかもしれません。

それまではUE5はお預けです。

2.2 UE5についての公式ホームページの情報をみる

UE5の公式のホームぺ―ジ [2]から見てみます。

f:id:kazuhironagai77:20210606235347p:plain

01は何について語っているのか曖昧で良く分からないのでスキップします。

02でNaniteとLumenについて語っていますね。この二つの言葉はよく聞きます。意味は知りませんが。

この辺から見てみます。

f:id:kazuhironagai77:20210606235415p:plain

Naniteはどうやら、広大かつ精密なLandscapeをUserがなんの工夫もしなくてもそのまま扱える機能のようです。以下の説明によると

  • Poly Count やDraw Call
  • 詳細をNormal mapにBakeする事
  • 手動でLODsを描く事

などの作業を大量に消去する事で達成してるそうです。

f:id:kazuhironagai77:20210606235513p:plain

ふーん。ですね。

Lumenについてです。LumenはRay Tracingの一種だと思っていたんですが、YouTubeのビデオでLumen vs. Ray Tracingみたいなのがあったので違うのかもしれません。その辺が良く分かりません。

以下の説明によると、最初にDynamic global illuminationと書かれています。と言う事は動いている物体にもGlobal illuminationが働くって事なんでしょうか?

f:id:kazuhironagai77:20210606235532p:plain

2021-04-26のブログの実験ですが、Directional lightの設定をMoveableにすると以下の様に床からのGlobal illuminationが全く働かないので影が真っ黒になってしまいます。

f:id:kazuhironagai77:20210606235620p:plain

Lumenだとこういう設定でも影が真っ黒にならないんでしょうか?試してみたいですね。

説明文を更に読み込んだら、以下に示したようにはっきりと太陽の角度の変化と書かれていました。

f:id:kazuhironagai77:20210606235654p:plain

もうこれは99%以上の確率でDirectional lightの設定をMoveableしてもGlobal illuminationが働くでしょう。

おーっ。

かなり興奮して来ました。

更に説明を読み込んだら、Light mapでしていた細かい設定とかも要らなくなるみたいですね。

建築関係でUE4を使用している人達には朗報なんでしょうか?それともLight mapでやっていた微妙な設定が出来なくなってしまうんでしょうか?その辺も興味あります。

次はOpen Worldsについてです。

以下の説明によるとWorld Partition Systemが採用されているそうです。

f:id:kazuhironagai77:20210606235717p:plain

World Partition Systemに関しての色々な機能が紹介されていますが、一人で作っている私には直接の影響はあんまりない機能かもしれません。

Animationについてですね。

f:id:kazuhironagai77:20210606235736p:plain

色々な機能が紹介されていますが、UE4のAnimation自体良く理解していない私には正直どう凄くなっているのか分かりません。UE4のAnimatorなら大興奮の内容なのでしょうか?読んでもポカーンて感じです。

MetaSoundsについてです。

ここは結構興味あったところなんですが、UE4と比べてどう変わったんでしょうか?

f:id:kazuhironagai77:20210606235801p:plain

これもこれだけ読んだだけじゃ何も分かりませんね。

Editor workflowについてです。これはEditorのViewportが大きくなっている事についての解説みたいです。

f:id:kazuhironagai77:20210606235820p:plain

ちょっとだけUE5を紹介するVideoで見たんですが、使用感が凄い快適みたいです。UE4でもストレスフリーでほとんどの機能が使用出来るのに更に使い易くなったらどうなるんでしょう。日常のストレスの発散のためにUE5を触る様になるかも知れませんね。

後重要なのはFAQにあった以下の解答です。

f:id:kazuhironagai77:20210606235840p:plain

4.24じゃ互換性もないのか。うーん。

2.3 英語圏のUE5のコメントを見る

今まで引用させてもらった沢山のUE4のTutorialを参照(reference)にまとめてあります。全て英語圏からの引用です。折角ですのでその人達がUE5に対してどんなコメントを出しているのか見てみようと思います。

<Why Unreal Engine 5 is a BIG DEAL [3]

Why Unreal Engine 5 is a BIG DEAL [3] はUnreal Sensei氏のUE5に対する簡単な解説です。

f:id:kazuhironagai77:20210607000010p:plain

5分の短い動画ですがLumen、NaniteとBridgeそしてEditorについてコメントしています。

LumenはRay Tracingじゃないんですね。そんな気もしていましたがこの動画ではっきりしました。

Naniteの解説では、Naniteは一言で言えば動的なLODと言っています。これは分かり易い例えと思いました。NaniteはStatic meshにしか使用できない事も説明していました。デモでRobotがSkeletal meshで動いているじゃん。と思う方はこの動画を見て下さい。何でRobotにNaniteが効いているのかしっかり解説されています。この解説は他のTutorialでは全く聞いた事がないです。Unreal Sensei氏は本当にびっくりするぐらい頭良いです。

<Tech Art Aid氏のUE5についての動画>

Tech Art Aid氏はHierarchical Instanced Static Meshの使用方法を私に教えてくれた貴重なTutorial (UE4 Optimization: Instancing [4])です 。3年近く全く動画を上げていなかったんですが最近また動画を上げるようになったみたいです。

UE5についてTesting UE5 Lumen Real Time Lighting & Limitations // Unreal Engine 5.0 Early Access [5] とTesting UE5 Nanite Meshes & Limitations // Unreal Engine 5.0 Early Access [6] を上げていました。

f:id:kazuhironagai77:20210607000059p:plain

Tech Art Aid氏本人が言っていますが、このビデオはTutorialではなく本人もほとんど初めての状態で試したものです。のであんまり綺麗にはまとまっていません。色々、興味深い事を発見したり考察したりしていますが、私が今のほとんど理解していない状態でそれをここでまとめると、間違ってまとめそうなので止めておきます。

それよりも驚いたのは私ずっとTech Art Aid氏はインド人と思っていました。Polandの人みたいです。全然関係ないですがTwo Minute Papers [7]の人もずっとインド人と思っていました。実際はHungaryの人でした。

<MR3D-Dev

私、この人のTutorial、何時見たのか全く覚えていないんですが、参照(Reference)に名前がありました。LandscapeのDisplacementのやり方をこの人の動画で勉強したんでした。念のためにチェックしたらUE5 についての動画を2つほど挙げてありました。

Unreal Engine 5 First Impressions [8] とHow to Use Data Layers in Unreal Engine 5 (Dark Realm Access) [9] です。この人の動画も試しに使ってみたという感じでした。

f:id:kazuhironagai77:20210607000128p:plain

<CGHOW

この人は、Niagara のtutorialを沢山作成していて、いずれ参考にする時のために参照(reference)に記録していたんでした。UE5に関して既に5本の動画を上げています。どうせ他の動画と一緒だろうと思って、一番最初のUE5の動画、Unreal Engine 5 Early Access | First Reaction [10] を見たらUE5のNiagara systemについての動画でした。

f:id:kazuhironagai77:20210607000153p:plain

ほおおっ。と思わず声を上げる所でした。

こういう独自の観点からUE5へのコメントを上げるのはかなり興味深いです。

UE5のNiagaraは、私が見た限りではUE4Niagaraと全く同じみたいです。

残り4つのvideoはUE5でNiagaraを使用したsample映像などでした。はっきり言って凄いです。この人の動画でNiagaraは勉強する事にします。

参照(Reference)にある人でUE5の紹介をしている人達は以上でした。

3.Niagaraの勉強

今週は先週出来なかったCreate a Ribbon Effect in Niagara [11] の勉強をします。

3.1 Ribbon Effectの目的

Ribbon Effectって正直一番要らないEffectと思っていました。

f:id:kazuhironagai77:20210607000235p:plain

Effectとしてはっきり言ってしょぼいです。アニメの必殺技でこんなエフェクトだったらそのアニメを見るの止めます。それで勉強するのも最後の方になってしまったんですが、以下の解説がありました。

f:id:kazuhironagai77:20210607000256p:plain

飛行機雲みたいなEffectを作るためにはRibbon Emitterが必要って書かれています。Ribbon Effectってそんな目的のために作られたんですか。知らなかった。これは重要ですね。やる気が出て来ました。

<Create System and Emitter

FX -> Niagara System -> New system from selected emitters -> Simple Sprite Burst を選択します。

f:id:kazuhironagai77:20210607000346p:plain

おお、Sprite Burstが選択されています。先週、Cascadeで勉強した所ですね。実装方法もちょっとだけ見ておきます。

その前に作成したNiagara Systemに名前だけ付けます。

f:id:kazuhironagai77:20210607000424p:plain

以下の様になっていました。

f:id:kazuhironagai77:20210607000500p:plain

Spawn Burst Instantaneous ModuleのParameterは以下の様になっています。

f:id:kazuhironagai77:20210607000521p:plain

Cascade のSpawn BurstのParameterは以下の様になっています。

f:id:kazuhironagai77:20210607000541p:plain

単純に比較するとNiagaraのSpawn Burst Instantaneous ModuleはCount Lowに対応するParameterがありません。となるとNiagaraのBurst Moduleでは作成するParticleの数をある範囲内のRandom な数には出来ないと言う事でしょうか?

<Change Renderer

Sprite Rendererを消去してRibbon Rendererを追加します。

f:id:kazuhironagai77:20210607000610p:plain

Ribbon RenderingのMaterialにDefault Ribbon Materialをセットします。

f:id:kazuhironagai77:20210607000633p:plain

NS_RibbonをLevel内にセットします。

f:id:kazuhironagai77:20210607000702p:plain

まだ何も見えません。

<Edit the Emitter Update Group Settings

Emitter Update GroupのEmitter State ModuleのLife Cycle Modeの値をSystemに変更します。

f:id:kazuhironagai77:20210607000733p:plain

このDocumentにLife Cycle Modeについての説明がありました。

f:id:kazuhironagai77:20210607000753p:plain

でもLife Cycle Logicって何を指しているのかが分かりません。

Parameterの機能が分からない時はカーソルを乗せるに限ります。

f:id:kazuhironagai77:20210607000817p:plain

成程、Emitter の寿命の計算をEmitter自身にさせるか、そのEmitterを持っているNiagara Systemに計算させるかを決めているでした。

でもそれってどう違うの?と新たな疑問が出て来ます。そしたらその疑問に対する答えも書いてありました。

大体の場合、Niagara systemに計算させた方が最適化されて速くなるそうです。

でもそれなら何でDefaultではSelfにセットされているんでしょう?

やっぱりまだ腑に堕ちませんね。

Emitter Update GroupにSpawn Rate Moduleを追加します。Spawn Rate ModuleのSpawn Rateの値を100にセットします。

f:id:kazuhironagai77:20210607000843p:plain

Spawn Rateの意味は、これまでの勉強で良く分かっていますが、Spawn Burst Instantaneous ModuleのSpawn Timeがその役割を担当していると思っていました。

f:id:kazuhironagai77:20210607001009p:plain

Spawn Timeは何をしているのか不明ですね。

f:id:kazuhironagai77:20210607001038p:plain

<Edit the Particle Spawn Group Settings

今度はParticle Spawn Groupの設定を変更します。

まずParticle Spawn Group 内のInitialize Particle Moduleを消去します。

f:id:kazuhironagai77:20210607001104p:plain

Initialize Ribbon Moduleを追加します。

f:id:kazuhironagai77:20210607001124p:plain

以下に示したように、Parameterの値を変更します。

f:id:kazuhironagai77:20210607001228p:plain

今度は、Particle Spawn GroupにTorus Location Moduleを追加します。

f:id:kazuhironagai77:20210607001306p:plain

Torus とはドーナツ形状の事です。WikipediaのTorus [12]によるとTorusは以下の式で定義されます。

f:id:kazuhironagai77:20210607001323p:plain

そして使用しているParameterの定義は、以下のようになっています。

f:id:kazuhironagai77:20210607001340p:plain

これらのParameterの値をTorus Location Moduleで指定するのでしょうか?

Torus Modeの値をTorusからRingに変更しました。

f:id:kazuhironagai77:20210607001437p:plain

TorusからRingに変更するとどう違うんでしょうか?

f:id:kazuhironagai77:20210607001457p:plain

うーん。分からん。でももしかすると生成されたRibbonの形状から判明するかもしれません。

Ringは以下の様な形状です。

f:id:kazuhironagai77:20210607001548p:plain

Torusは以下の様な形状でした。

f:id:kazuhironagai77:20210607001614p:plain

Ringの方がバラケ具合が小さいですね。

Large RadiusとTorus Distribution Modeの値を変更しました。

f:id:kazuhironagai77:20210607001633p:plain

Large Radiusは上記のTorusの式におけるRの事なんでしょうか?何か違う気がします。

UPositionの値をParticle Ageに変更します。

f:id:kazuhironagai77:20210607001659p:plain

UPositionは何を担当しているParameterなのでしょうか?

f:id:kazuhironagai77:20210607001716p:plain

分からん。

Documentに何か解説は載っていないかとみていたら、UPositionに追加するParameter、ageはParticleのageではなくEmitterのageを使用していました。直します。

f:id:kazuhironagai77:20210607001735p:plain

EmitterのAgeに変更した途端に綺麗なRingが現れました。

f:id:kazuhironagai77:20210607001752p:plain

何でParticleのAgeの時は何も表示されなかったのか?と思ったんですが、良く考えたらParticleは生成してないですね。

UPositionの機能についてはDocumentの方では以下の説明がありました。

f:id:kazuhironagai77:20210607001811p:plain

良く分かりませんね。Floatを返しているんですから、数字を入れたら何かヒントが分かるかもしれません。実験してみましょう。

0、0.1、0.5、0.9、1、100などの数字を代入してみました。

f:id:kazuhironagai77:20210607001831p:plain

全くRingが現れません。

うーん。これも意味が分からん。

Emitterのageがどんな値を返しているのか分かれば、もう少し分かるんですがPrint  Stringみたいな機能はないんでしょうか?

今回は諦めるしかありませんね。私のParticle Systemの理解が進んだ時に、おのずと明らかにされるでしょう。

最後にAdd Velocity from Point Moduleを追加しました。

f:id:kazuhironagai77:20210607002003p:plain

加えた途端にRingがきれいな渦巻きを描き出しました。

f:id:kazuhironagai77:20210607002021p:plain

上から見るとこんな感じです。

f:id:kazuhironagai77:20210607002037p:plain

Velocity Strengthの値を50にしました。

f:id:kazuhironagai77:20210607002057p:plain

渦が小さくなりました。

f:id:kazuhironagai77:20210607002118p:plain

このModuleの機能は分かりました。

説明のために一端、Add Velocity from Point Moduleを外します。

大きさを統一するためのちょっと見にくいですがPreview全体を表示します。以下に表示されているのが現在のRingの大きさです。

f:id:kazuhironagai77:20210607002145p:plain

もう一度、Add Velocity from Point Moduleを追加します。

f:id:kazuhironagai77:20210607002214p:plain

はい。Ringの半径が時間に沿って増大しています。

今度は、Velocity Strength の値を100から50に変更します。

f:id:kazuhironagai77:20210607002232p:plain

f:id:kazuhironagai77:20210607002240p:plain

はい。Ringの半径の増大率が前の半分くらいになっています。

うん。これは上から見ると結構、それぞれのParameterの機能の意味が分かりますね。

今週はもうそんなにこれだけに時間を費やす事は出来ないので来週、もう一回やりますか。そうしたらParameterの機能の80%位は解明出来そうですし。

<Edit the Particle Update Group Settings

Scale Color Moduleは要らないので消します。

Acceleration Force Moduleを追加します。更にAccelerationのZの値を-200にセットします。

f:id:kazuhironagai77:20210607002306p:plain

こんな感じになりました。

f:id:kazuhironagai77:20210607002322p:plain

はい。このmoduleの機能を理解するためにまた横から見てみます。

f:id:kazuhironagai77:20210607002338p:plain

重力がかかって物体が下に落ちていくのと同じですね。ぱっと見、上に登っているように見えましたが違いました。

はい解決。とはなりません。疑問が幾つかあります。

Acceleration Force Moduleですので加速度を足していると思われますが、Particle Update groupから呼ばれています。UpdateですからTickのように何回も呼び出されてるはずです。加速度を何回も足したら加加速度(jark)とか言うのになるんじゃないの?

加速度的に落下するためには、速度を足す必要があるんじゃないの?との疑問です。

これも来週考えましょう。

今週のNiagaraの勉強はここまでとします。

4.Cascadeの勉強

正直、もうCascadeの基本は理解したと思っています。それぞれのModuleのParameterで分からない所は沢山ありますが、それらの解答が簡単に見つかるとは思えません。

それで以下に示したCategory内のModuleについて勉強しようと思います。

f:id:kazuhironagai77:20210607002414p:plain

Particle System Reference [13] に詳しい解説があるはずです。

f:id:kazuhironagai77:20210607002432p:plain

Default Required and Spawn Modules [14]から見て行きます。

先週、調べていたUse Local Spaceについての解説もバッチしありました。

f:id:kazuhironagai77:20210607002451p:plain

なんで先週、突然公式のDocumentを見る事を忘れてしまったんでしょうね。

ただここで言っているIts parentが何を指しているのかが今一分かりません。このEmitterを持つParticle Systemの事なのかそれとも…。

流石にこれを上から読んで全部理解出来るとは思えません。

良い事思いつきました。Content ExampleのEffectのサンプルを開いてそのEmitter内で使用されているModuleを調べる事にします。

<CPU and GPU particles

f:id:kazuhironagai77:20210607002513p:plain

以下の様な実装になっています。

f:id:kazuhironagai77:20210607002536p:plain

Const Acceleration Moduleから見て行きます。

Acceleration Modules [15] によると

f:id:kazuhironagai77:20210607002553p:plain

と書かれています。何でCPU_particlesに使用されているんでしょう?

Vector Coneとはどんな速度を表しているんでしょうか?

f:id:kazuhironagai77:20210607002610p:plain

Velocity Modules [16] によると

f:id:kazuhironagai77:20210607002631p:plain

となっています。

成程、試してみます。

以下に示したEffectを作成しました。

f:id:kazuhironagai77:20210607002651p:plain

これにVelocity Coneを追加します。

f:id:kazuhironagai77:20210607002708p:plain

Velocity Coneの設定は以下の様にしました。

f:id:kazuhironagai77:20210607002732p:plain

Angle はDocumentによると0から1の間の値で設定しろとあります。のでMin 0、Max 1 で試してみました。

全然コーン状に広がっていないじゃん。と言うのが正直な感想です。

そしたらDocumentのVelocity の項目が以下の様な説明になっていました。

f:id:kazuhironagai77:20210607002750p:plain

と言う事はVelocityの値をもっと大きくすればコーン状になるはずです。

f:id:kazuhironagai77:20210607002806p:plain

なっていますね。

設定は以下の様にしました。

f:id:kazuhironagai77:20210607002824p:plain

コーンらしさを見るためにParticleの数を増やしてみました。

f:id:kazuhironagai77:20210607002843p:plain

確かに円錐(Cone)です。

Direction についてです。

以下の設定でテストします。

f:id:kazuhironagai77:20210607002913p:plain

f:id:kazuhironagai77:20210607002920p:plain

X軸に沿って広がる傾向が強いです。

今度は以下の設定に変えます。

f:id:kazuhironagai77:20210607002937p:plain

f:id:kazuhironagai77:20210607002946p:plain

今度はY軸に沿って広がっています。

大体、Cone Velocityの使用方法について理解出来ました。

サンプルの例だと、

f:id:kazuhironagai77:20210607003002p:plain

のような円錐を作成するのにCone Velocityは使用されていますね。

このサンプルの最後のModuleはInitial Locationです。

Initial Locationを使用する必要ないでしょうと思っていたら、GPUとCPUのEmitterの位置をずらすために使用されていました。

f:id:kazuhironagai77:20210607003022p:plain

それなら納得です。

こんな感じで勉強していけば、ほとんどのCascadeのModuleの機能と使い方について理解出来ると思います。この勉強をしばらく続けてみようと思います。

5.Cascade と魔法陣について

以下の様に変化する魔法陣を作成してみました。

f:id:kazuhironagai77:20210607003051p:plain

f:id:kazuhironagai77:20210607003058p:plain

f:id:kazuhironagai77:20210607003105p:plain

魔法陣自体はEmitterとModuleの機能を理解したら、作成方法自体は単純なので簡単に改良出来ました。

正し、以下に示した魔法陣がLandscapeにめり込んでしまう問題を直す事は出来ません。

f:id:kazuhironagai77:20210607003125p:plain

これを直すには、Decalを使用する必要があるそうです。Effectを勉強している最中に更にMaterialの勉強を始めると大変な混乱をする事になります。ので上記の問題はしばらくの間放置しておきます。

6.Monster Zoneの拡張

以下のNav Mesh Bound Volume にMonster Zoneを作成していきます。

f:id:kazuhironagai77:20210607003200p:plain

6.1 Monster Zone 3の作成

Trigger Box を2つ作成し、Block3 とTrigger3と名付けます。Nav Mesh Bound Volume の名前をTerriotory3に変更します。最後にMonster Zoneを追加して名前をMonster Zone 3とします。

f:id:kazuhironagai77:20210607003222p:plain

取りあえず、Monster を静的に配置します。

f:id:kazuhironagai77:20210607003251p:plain

以下のようになっていました。

f:id:kazuhironagai77:20210607003312p:plain

Monsterを動的に生成するためにMonster Spawn DataをRPG Game Instance BPに作成します。

f:id:kazuhironagai77:20210607003337p:plain

この配列に先程、静的に配置したMonsterのデータを写します。

f:id:kazuhironagai77:20210607003356p:plain

このData TableからMonsterを生成するようにします。

Monster Zone ActorのGet Monster Spawn Data関数をMonster Territory Number が3だった場合にも対応できるようにします。

f:id:kazuhironagai77:20210607003414p:plain

f:id:kazuhironagai77:20210607003422p:plain

これでMonster Zone 3のMonster は動的に生成されるはずです。

Monster Zone 3のMonster が倒された時にMonster Spawn Data Landscape 4-3のデータを書き変えるようにしましょう。

RPGGameBaseBPのRemove Defeated Monster関数にMonster Territory Number が3だった場合の対応を実装させました。

f:id:kazuhironagai77:20210607003447p:plain

これでMonster Zone 3 でMonsterと戦闘しても問題ないはずです。

テストします。

Block3に侵入しました。

f:id:kazuhironagai77:20210607003505p:plain

Monsterが生成されています。

次にBlock3から退散してみます。

f:id:kazuhironagai77:20210607003522p:plain

Monsterは全部破壊消滅しましたが、コメントにMonster Territory 1がCleanになりました。とあります。多分、Print Stringだけの問題とおもいますが一応確認します。

f:id:kazuhironagai77:20210607003542p:plain

そうでした。

セリフを直します。

f:id:kazuhironagai77:20210607003600p:plain

直しました。

今度は戦闘をしてみます。

戦闘から戻ってきたらMonsterが生成されません。

f:id:kazuhironagai77:20210607003618p:plain

直します。

問題が中々分からなかったんですが、分かりました。

以下の図で示した赤い部分はBlock3内部ですが、Trigger3の外です。極まれにこの部分にいても極端に端を歩いているモンスターと戦闘になる事があります。

f:id:kazuhironagai77:20210607003635p:plain

その時、Monster Territory Numberは0のままです。当然、戦闘から戻って来てもMonster Zone 3のモンスターは生成されませんし、戦闘で倒したMonster Zone 3のモンスターも消滅しません。

このバグはBlockが重なった時に発生するバグを直す時に一緒に直します。直し方のアイデアは既にあります。それを実行するだけで両方のバグを一遍に直せるはずです。

試しに、Trigger 3 の内部に侵入した後でMonsterと戦ってみました。

戦闘後は、普通にMonster が生成しています。

f:id:kazuhironagai77:20210607003652p:plain

全部のモンスターを倒してみました。

f:id:kazuhironagai77:20210607003711p:plain

特にバグは発生しませんでした。

7.Monster Zone のまとめなど

Monster Zoneを3つ作成しました。同じ物を繰り返す作成するのは楽ですが、潜在する問題やバグに築かずに進んでしまう可能性もあります。それらを避ける為に、一端ここでまとめる事にします。

7.1 発見されているバグ

今の所2つのバグが見つかっています。

<バグ1>

以下の図に示した条件の矢印の場所にPlayerの操作するキャラがいます。

f:id:kazuhironagai77:20210607003755p:plain

Playerの操作するキャラは、Monster Block 1内とMonster Block 2内に同時に存在しているのでMonster Zone 1のモンスターとMonster Zone 2のモンスターが発生します。

ただし、このキャラはMonster Territory 1 内にだけいるので、Monster Territory Numberは1と記録されます。戦闘になるのはMonster Block 1内のモンスターだけです。

モンスターと戦闘して元の位置に戻って来たとします。Monster Territory Numberは1と記録されているので、Monster Block 1内のモンスターだけが発生していてMonster Zone 2 のMonster は発生しません。

この場合、Playerの操作するキャラは、Monster zone 2をモンスターと戦闘する事なく進行する事が出来ます。

<バグ2

Block内に侵入していますが。Territory内には侵入していない時。理論的には戦闘になりませんが、現実はまれに戦闘になる事があります。

以下の図で示した赤い部分に、Playerの操作するキャラが居た場合です。

f:id:kazuhironagai77:20210607003820p:plain

この赤い箇所で戦闘になった場合、Monster Territory Numberは0のままなので、戦闘から戻って来てもMonster は生成されません。

7.2 発見されているバグの対策方法について

対策方法のアイデアは既にあります。Monster Territory Number以外にMonster Block Number と言う整数のArrayをRPG Game Instance BP内に作成する事です。そして戦闘後、このMapに戻って来た時は、生成するMonsterはMonster Territory NumberからではなくMonster Block Numberから生成すれば良いです。

7.3 全部のモンスターと戦闘してみる

Monster Zoneの全てのモンスターを生成させて戦闘した事はありません。バグが見つかるかもしれませんし、何か改良点が見つかるかもしれません。

久しぶりにStart画面からやって見ます。

f:id:kazuhironagai77:20210607003855p:plain

雰囲気は良いんですが、建物や家具に使用している素材がStarter kitの物なのでFantasy感が薄いです。

「新しく始める」をクリックします。

Map1に移動しました。

f:id:kazuhironagai77:20210607003919p:plain

因みにMap1には昼と夜があります。Good Skyで作成しました。

f:id:kazuhironagai77:20210607003936p:plain

ここからLandscape4にワープして戦闘をします。戦闘をしますが、今のままだでMonsterと戦闘すると負けてしまいます。武器を装備させます。

武器屋で武器を買い装備しました。

f:id:kazuhironagai77:20210607003953p:plain

ワープします。

f:id:kazuhironagai77:20210607004012p:plain

ワープしてLandscape4に移動したら、直ぐに戦闘になりました。以下のスクリーンショットは戦闘後に取った物です。

f:id:kazuhironagai77:20210607004030p:plain

戦闘画面でモンスターを倒した時ですが、Levelが上がっているにも関わらず、一言で終わっています。

f:id:kazuhironagai77:20210607004049p:plain

読み逃してしまっています。

Levelが上がった時は勝利ポーズを変更して、もっと細かい情報を報告するようにします。

後、monsterがアイテムを落とす場合も作成します。勿論後でですが。

崖に近づくと、Monsterが発生しました。

f:id:kazuhironagai77:20210607004109p:plain

崖があるのでMonsterと戦闘にはなりませんが、緊張感が生まれます。

Monsterを倒すために崖を遠回りして進行していると、大量のモンスターが発生しました。

f:id:kazuhironagai77:20210607004143p:plain

全滅させます。

LevelがMaxまで上昇してしまったので戦闘が終了してもStatusが回復しません。一端Map1に帰ります。

宿屋に泊まります。

f:id:kazuhironagai77:20210607004327p:plain

道具屋で回復薬とイーサーを買います。

f:id:kazuhironagai77:20210607004344p:plain

回復薬のイメージの絵だけ異常にレベルが高いですね。

f:id:kazuhironagai77:20210607004406p:plain

戦闘中に魔法を使用する時です。

f:id:kazuhironagai77:20210607004424p:plain

戦闘中にアイテムを使用する時です。

f:id:kazuhironagai77:20210607004442p:plain

ボタンが何故か小さくなっています。

戦闘が終わってHPを回復させようとしたらMHPが分かりません。

f:id:kazuhironagai77:20210607004500p:plain

戦闘しまくって島の端までやって来ました。海と島が見えます。見えますが殺風景です。

f:id:kazuhironagai77:20210607004534p:plain

その後、何体かのモンスターを倒したら、とうとうモンスターが居なくなりました。

f:id:kazuhironagai77:20210607004555p:plain

7.4 全部のモンスターと対戦してみて

「7.3 全部のモンスターと戦闘してみる。」で述べた以外の感想を以下に記します。

  • 途中から凄い退屈になった。戦闘しても勝てるのが分かっているから作業感が半端じゃない。
  • 戦闘画面に移る時に、後ろからモンスターに襲われるときと、自分からモンスターの後ろを襲うとき、は普通の戦闘と同じ始まり方で良いのかと思った。
  • もっと戦闘にメリハリが欲しくなった。途中までは戦闘も楽しかったが、戦闘しても勝てるのが分かっているからつまらなくなる。
  • 一端倒したモンスターが絶対復活しないので帰りは楽だった。
  • バグらしいバグはなかった。のでその点は良かった。
  • 地面が明かる過ぎると思いました。

8.まとめと感想

今週は以下の事について勉強しました。

  • Unreal Engine 5について
  • Niagara Ribbon Emitterについて
  • Cascade Vector Cone Moduleについて
  • Monster zoneの追加
  • Monster zone のバグ出し
  • Monster zone の問題点について

来週は、以下の事についてやります。

  • Niagara Cascadeについて
  • Monster Zoneの改良について
  • Monster Zone の更なる作成

以上です。

9.参照(Reference

[1] L, S. & tsa. (2021, May 26). Unreal Engine 5 is now in Early Access for developers – download the Valley of the Ancients tech demo. Tsa. https://www.thesixthaxis.com/2021/05/26/unreal-engine-5-demo-valley-of-the-ancients-download-requirements-100gb/

[2] Epic Games. (n.d.). Unreal Engine 5 - Unreal Engine. Unreal Engine 5 - Unreal Engine. Retrieved June 6, 2021, from https://www.unrealengine.com/en-US/unreal-engine-5

[3] Unreal Sensei. (2021, May 27). Why Unreal Engine 5 is a BIG DEAL [Video]. YouTube. https://www.youtube.com/watch?v=HM1IZnRzVGQ

[4] Tech Art Aid. (2016, November 7). UE4 Optimization: Instancing [Video]. YouTube. https://www.youtube.com/watch?v=oMIbV2rQO4k&t

[5] Tech Art Aid. (2021a, May 27). Testing UE5 Lumen Real Time Lighting & Limitations // Unreal Engine 5.0 Early Access [Video]. YouTube. https://www.youtube.com/watch?v=OqDIkQWOyDk

[6] Tech Art Aid. (2021b, May 27). Testing UE5 Nanite Meshes & Limitations // Unreal Engine 5.0 Early Access [Video]. YouTube. https://www.youtube.com/watch?v=X6hbxOyDZWk

[7] Two Minute Papers. (2009, August 31). Two Minute Papers [Video]. YouTube. https://www.youtube.com/c/K%C3%A1rolyZsolnai/featured

[8] MR3D-Dev. (2021b, May 27). Unreal Engine 5 First Impressions [Video]. YouTube. https://www.youtube.com/watch?v=6uBmdLOMTK0

[9] MR3D-Dev. (2021a, May 27). How to Use Data Layers in Unreal Engine 5 (Dark Realm Access) [Video]. YouTube. https://www.youtube.com/watch?v=4O4t0BXcuwE

[10] CGHOW. (2021, May 26). Unreal Engine 5 Early Access | First Reaction [Video]. YouTube. https://www.youtube.com/watch?v=wELlkE0vI-c

[11] Epic Games. (2021, June 6). Create a Ribbon Effect in Niagara [Video]. Unreal Engine Documentation. https://docs.unrealengine.com/4.26/en-US/RenderingAndGraphics/Niagara/HowTo/RibbonEffect/

[12] Torus. (2021, May 26). In Wikipedia. https://en.wikipedia.org/wiki/Torus

[13] Epic Games. (n.d.-c). Particle System Reference. Unreal Engine Documentation. Retrieved June 6, 2021, from https://docs.unrealengine.com/4.26/en-US/RenderingAndGraphics/ParticleSystems/Reference/

[14] Epic Games. (n.d.-b). Default Required and Spawn Modules. Unreal Engine Documentation. Retrieved June 6, 2021, from https://docs.unrealengine.com/4.26/en-US/RenderingAndGraphics/ParticleSystems/Reference/Modules/Required/

[15] Epic Games. (n.d.-a). Acceleration Modules. Unreal Engine Documentation. Retrieved June 6, 2021, from https://docs.unrealengine.com/4.26/en-US/RenderingAndGraphics/ParticleSystems/Reference/Modules/Acceleration/

[16] Epic Games. (n.d.-e). Velocity Modules. Unreal Engine Documentation. Retrieved June 6, 2021, from https://docs.unrealengine.com/4.26/en-US/RenderingAndGraphics/ParticleSystems/Reference/Modules/Velocity/