UE4の勉強記録

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

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

f:id:kazuhironagai77:20210530223811p:plain

<前文>

最近、Minimal Pairのアプリを作成している関係で、独学ですが音声学について勉強する機会が多くなっています。その関係で、日本語の音声学についてのかなり質の高い解説が見つかったりします。

例えば、私は2020-12-20のブログで日本語の「う」の発音がVowel Chartの分類において正しくないのではないのか?と述べています。

f:id:kazuhironagai77:20210530223850p:plain

そしたら、複数の日本語の音声学を解説したサイトで日本語の「う」の音は人によって、あるいは関西と関東で違うと書かれていました。

本当はここからそのサイトで解説されていた言語学、特に日本語の文法についての私見について述べようと思って、実際一回書いたのですが、千に一つかもしれませんが、日本人について日本語で批評する話は、自分の望まない炎上が起きる可能性がある事に気が付きました。ので全部消しました。だから今週の前文はなしです。

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

<本文>

1.今週の予定

今週は以下の事についてやっていきます。

  • NiagaraCascadeの勉強の続き
  • Monster Zoneのテストの続き
  • Instance EditableとUE4C++おけるEditDefaultsOnly、EditInstanceOnlyとEditAnywhereの関係についての確認
  • Particle systemの勉強方法について
  • On Actor End Overlapから退散する時に戦闘中か、そうでないかについての確認方法は、Monster Name in FightingがNoneでない事で確認した方が効率が良い件について
  • Monsterを倒した後で、DataTableの設定を変える時のコードの変更
  • 魔法陣の直し

うーん。取りあえずやっていきますか。

2.Niagaraの勉強

先週、花火を作ろうと決めたのですが、試しに作成したら何か違うものが出来ました。

f:id:kazuhironagai77:20210530224003p:plain

それで花火のサイトを調べました。そしたら凄く詳しく花火について解説されていて、これは本格的に勉強しないと分からないなと思いました。

でもそのためにNiagaraの勉強を中断する訳にもいかないので、

f:id:kazuhironagai77:20210530224025p:plain

Audio Effects In Niagara [1]とCreate a Ribbon Effect in Niagara [2]を今週は勉強します。その後で花火についての勉強をします。

1.1 Audio Effects In Niagara [1]を勉強する

<Using the Play Audio Module

one-shot sound effectならPlay Audio Moduleを追加すべきとあります。One-shot soundってどんな音なのと調べたらLoopしない音の総称だそうです。

Content Examples Projectにサンプルがあります。と書かれていたので見てみます。

f:id:kazuhironagai77:20210530224058p:plain

すっごい色んな音がします。想像の10倍くらい凄いです。

Ctrl+Eを押して該当するNiagara Systemを開きます。

Play Audio Moduleがありました。

f:id:kazuhironagai77:20210530224128p:plain

Play Audio Moduleを選択してDetailをみると、まだ実験中と書かれていますね。

f:id:kazuhironagai77:20210530224145p:plain

使い方としてはModuleとして足すだけのようです。

この方法で音を出す場合は、Volume やPitch、そして音の場所は例えParticleが動いても変える事は出来ないそうです。

最も簡単ですが最も融通が効かないやり方だそうです。

<Using the Play Persistent Audio Module

Persistent の名称から推測するに、それぞれのParticleのIDをKeep出来る様にしておいて、それぞれのparticleにアクセス出来るようにしていると思われますがどうでしょうか?

f:id:kazuhironagai77:20210530224211p:plain

惜しい。

発生したそれぞれの音に対してのIDをKeepしているそうです。

それぞれの音のIDをkeepしているので、音のPitchやvolumeをPlay中に変更出来るのがPlay Audio Moduleとの違いだそうです。

ただし、その使い方のPlay Audio Moduleより難しくなるそうです。

Play Persistent Audio Module とUpdate Persistent Audio Moduleの二つを使用する必要があります。

Content Examples Projectのサンプルを見ると以下の様になっていました。

f:id:kazuhironagai77:20210530224231p:plain

このDocumentの説明によれば全てのPersistent Audio Module のAudio Playerは同じaudio player data interfaceである必要があるそうです。

Content Examples Projectのサンプルも同じ名前になっています。

f:id:kazuhironagai77:20210530224252p:plain

ただこのAudio Playerの実際のDataがどこにあるのかは分かりません。

分かりました。

Emitter Spawnにありました。

f:id:kazuhironagai77:20210530224311p:plain

中身は以下の様なParameterがありました。

f:id:kazuhironagai77:20210530224326p:plain

このDocumentで使用されている図と比較すると少し違います。

f:id:kazuhironagai77:20210530224347p:plain

しかも公式のDocumentではそれをDouble Clickすると以下の様なBPが開けるとあります。

f:id:kazuhironagai77:20210530224406p:plain

うーん。このNiagara SystemにおけるBPは使用してみたいです。みたいですがこのDocumentを読むだけでこれを使用出来る様になるのは無理そうですね。

1.2 UE4 - Niagara Audio - Part 1 - Play Audio [3]を勉強する

はい。困った時はYouTube先生に頼ります。Niagara のAudioに関するTutorialありました。しかもgameDev Outpostの作成したTutorialです。信頼出来ます。

UE4 - Niagara Audio - Part 1 - Play Audio [3]を勉強します。

Niagara Emitter -> New Emitter from Template -> Emptyで新しいEmitterを作成します。

f:id:kazuhironagai77:20210530224429p:plain

あれ。NE_と普通に名付けています。

2021-05-10のブログや

f:id:kazuhironagai77:20210530224448p:plain

2021-05-17のブログで

f:id:kazuhironagai77:20210530224539p:plain

gameDev OutpostはNiagara systemもNiagara EmitterもNS_で名付けている。と書き込んでいましたが間違っていました。実際はNiagara Emitterのprefixの場合はNE_を使用していました。普通に考えればこんなきちんとしたTutorialを作成する人(組織?)が別のクラスに同じprefixを使用する訳ないですね。

Emitter Update CategoryにSpawn Burst Instantaneous Moduleを追加しました。

f:id:kazuhironagai77:20210530224603p:plain

この辺は別にPlay Audio moduleの使い方とは関係ないですが、復習も兼ねてしっかりやる事にします。

以下の様になりました。

f:id:kazuhironagai77:20210530224621p:plain

追加したModuleを下に示します。

f:id:kazuhironagai77:20210530224640p:plain

Particle SpawnにPlay Audioを追加しました。

f:id:kazuhironagai77:20210530224659p:plain

ここからが本番です。

<Play Audio Explanation

この動画の1:48からPlay Audio ExplanationとしてPlay AudioのそれぞれのParameterの機能について簡単に説明しています。

f:id:kazuhironagai77:20210530224723p:plain

サラッと説明していますが、これって凄い大事な内容なんじゃないでしょうか?

その中で、他ではあまり聞けない所だけここにまとめました。

f:id:kazuhironagai77:20210530224743p:plain

Concurrencyは最適化のために使用します。最適化をしない時は何もセットしなくて良いみたいです。

f:id:kazuhironagai77:20210530224804p:plain

どんな条件の時に、このPlay Audioにセットされた音をPlayするかを決める所だそうです。

今はそのものズバリPlay Audioがセットされていますが、Play Audioがセットされた時はどんな条件なんでしょうか?このParameterを使いこなすためには、もう少し情報が必要です。

f:id:kazuhironagai77:20210530224856p:plain

一つのParticleに対して一回だけ音をPlayするかどうかだそうです。

f:id:kazuhironagai77:20210530224916p:plain

音の発生する位置を指定するParameterだそうです。この設定だとParticleの位置から発生します。

f:id:kazuhironagai77:20210530224938p:plain

どのCoordinateを使用するかを決定します。

f:id:kazuhironagai77:20210530225008p:plain

WorldとLocalは分かりますがSimulationはどんな座標系なんでしょう?

f:id:kazuhironagai77:20210530225027p:plain

Pitch、Volume、Start Timeの値を設定します。

ここまでがParameterの解説でした。大変勉強になりました。

また実際の作成に戻ります。

f:id:kazuhironagai77:20210530225046p:plain

Sound To Playに音をセットしました。TutorialではCompile Start Cueをセットしていますが、万が一このProjectでCompileする事があると紛らわしくなるので別な音を付けました。

今度はどんな音がしてるのかの確認をします。

しかし、音は実際にLevelに配置しないと聞こえないそうです。なのでNSをこのEmitterから作成します。ちゃんとPrefixはNS_としました。

f:id:kazuhironagai77:20210530225107p:plain

それをLevel上に配置します。

f:id:kazuhironagai77:20210530225138p:plain

音しません。

Play状態でも確認しましたが音しません。

f:id:kazuhironagai77:20210530225200p:plain

はい。Tutorialでしっかり説明されていました。

Play AudioはDefaultではFalseにセットされているため、音を発生するためにはそれをTrueに変える必要があるのだそうです。

Niagara Emitterを開きます。

Window->ParameterでParametersを表示させます。

f:id:kazuhironagai77:20210530225217p:plain

f:id:kazuhironagai77:20210530225224p:plain

->Particle Attributeを開くとplay Audioがあります。

f:id:kazuhironagai77:20210530225245p:plain

CursorをPlay Audioに乗せるとPlay AudioはBoolean型と表示されます。

f:id:kazuhironagai77:20210530225302p:plain

これを使用します。

DragしてPlay Audioの上に配置します。

YouTubeというか動画は、こういう時本当に便利です。文章だけでどんな風にDragするのかを説明するのは非常に難しいですが映像を見せれば一発で理解出来ます。

f:id:kazuhironagai77:20210530225321p:plain

Set Particle Play Audio を選択するとBoolean型のParameterがありました。

f:id:kazuhironagai77:20210530225337p:plain

Trueにしました。

f:id:kazuhironagai77:20210530225355p:plain

凄い音がしています。

最後にCollisionした時に音が出る様にします。

これは結果だけ載せようとしたら、結構重要な内容を教えていましたのでやっぱり全部記録します。

Collisionした時に音を出すためには、まずCollision moduleが必要です。

f:id:kazuhironagai77:20210530225419p:plain

Particle Update CategoryにCollision moduleを追加しました。

Play Audio ModuleのParameterであるPlay AudioにCollision 関連のParameterをセットするためには、

f:id:kazuhironagai77:20210530225453p:plain

Play Audio ModuleをCollision Moduleの下にセットする必要があります。

f:id:kazuhironagai77:20210530225511p:plain

しました。

今度は、PlayAudioにCollisionValidをセットします。

f:id:kazuhironagai77:20210530225528p:plain

Set Particle PlayAudio をTrueに戻すのも忘れずに行います。

f:id:kazuhironagai77:20210530225554p:plain

テストします。

Particleが地面にぶつかった時に音が一回だけ鳴りました。

f:id:kazuhironagai77:20210530225621p:plain

Particleが地面にぶつかるたびに音が鳴るようにします。

Play Audio ModuleのPlay Once Per Particleのチェックを外します。

f:id:kazuhironagai77:20210530225638p:plain

地面にぶつかる度に音がするようになりました。

f:id:kazuhironagai77:20210530225655p:plain

以上でした。

Play Audio Moduleについてかなり色々分かって来ました。

<Play Persistent Audio Module について>

UE4 - Niagara Audio - Part 2 - Play Audio Continued [4]でPlay Persistent Audio Moduleの分かり易い使い方を教えてもらえると思っていたら、このTutorialもPlay Audio Moduleの使い方についてでした。流石に今の私のレベルでサンプルコードから正しいPlay Persistent Audio Moduleの使い方を判明させるのは無理です。

それで、分かるところだけ自分で試してみようと思います。

まずBPの開き方です。

f:id:kazuhironagai77:20210530225721p:plain

これModuleだったら何でも開けます。

試しにPlay Persistent Audioをdouble Clickしてみます。

f:id:kazuhironagai77:20210530225741p:plain

以下のBPの実装が開きました。

f:id:kazuhironagai77:20210530225802p:plain

2021-04-26 のブログでNiagara Key Concepts [5]の4つの原則について勉強しました。その一つを以下に示しました。

f:id:kazuhironagai77:20210530225838p:plain

この内のStack Paradigmは以下に示したようないつものヤツなので

f:id:kazuhironagai77:20210530225905p:plain

見慣れてはいます。しかしもう一方のGraph Paradigmは見た事ないので、実際に自分で触る日は来ないんじゃないのかなと思っていました。

そしたらModuleをdouble ClickするだけでGraph Paradigmにaccess出来る事が分かってなんか拍子抜けです。

今度は、Play Audio ModuleをPlay Persistent Audioに変えてみました。

f:id:kazuhironagai77:20210530225927p:plain

Update Persistent Audioを使用しなくても音は聞こえますね。音を途中で変化させる時だけUpdate Persistent Audioが必要なんでしょうか?

Play Persistent Audioのparameterは以下の様になっていました。

f:id:kazuhironagai77:20210530230009p:plain

所が、Content ExampleのPlay Persistent AudioはAudioの部分がないです。

f:id:kazuhironagai77:20210530230028p:plain

やっぱりまだ理解出来ませんね。この辺で止めておきます。

流石に、Create a Ribbon Effect in Niagara [2]を勉強する時間はありません。これは来週勉強します。

2. 花火について

先週、花火を作ろうとして何か微妙に違う物が出来ました。その理由は花火をよく知らないからだと思い、花火について解説したサイトで勉強しました。その勉強した内容をここにまとめます。

ここで述べる花火は打ち上げ花火限定です。更に日本の花火についてだけです。

ハッキリ言ってアメリカの花火は繊細さがないです。音と火薬の匂いは凄いですが。芸術的な観点なら断然日本の方が上でしょう。

2.1 菊花火と牡丹花火

私がイメージした花火は以下の様に点が四方八方に飛び散るものでしたが、

f:id:kazuhironagai77:20210530230110p:plain

実際の花火は以下の様な線状の火花が飛び散るものでした。

f:id:kazuhironagai77:20210530230129p:plain

成程、これが違うのかと思ったら、花火のサイトを読んだら、私がイメージした花火もあって種類が違うそうです。

まず、花火が球状になるものを割物と呼ぶそうです。その中で火花が尾を引くタイプはそれが菊の花びらに似ている事から菊物、火花が尾を引かない物を牡丹物と呼ぶそうです。

球状じゃない花火もいっぱいありますがそれらの名称もあるんですか?とか菊、牡丹以外の種類もあるんですか?と調べてたら一気に時間を取られてしまいました。

別に花火についてのBlogではないのでそれらは後でまとめて簡潔な形にした状態で記録します。

2.2 花火とUE4

日本の花火は繊細でとても美しく、更に日本の情緒を表しています。

アニメやゲームのような新興の日本文化だけでなく、浮世絵や日本刀のような伝統的な日本文化も世界中で大人気です。それがいつまで続くのかは分かりませんが、はっきり言って今はバブル状態です。

しかし何故か今まで日本の花火は世界から注目を浴びて来ませんでした。でもこれから注目される可能性はかなり高いと思われます。

そしてCGで、日本の花火の美しさ、儚さ、繊細さを表現出来るのは、現状UE4だけでしょう。

ひょっとするとですが、Niagara Systemで日本の花火を作るのはとんでもないビジネスチャンスが埋まっているかもしれません。

3. Cascadeの勉強の続き

3.1 先週の勉強の続き

先週はSpawn ModuleのSpawn内のParameterの機能について勉強しました。

f:id:kazuhironagai77:20210530230223p:plain

今週はBurstについて勉強します。

3.2 Burstについて

まずいじって見ます。SpawnのDistributionをFloat ConstantにしてConstantを0にします。

f:id:kazuhironagai77:20210530230300p:plain

何も発生しなくなりました。

f:id:kazuhironagai77:20210530230322p:plain

今度はBurstのBurst List にElementを追加します。

f:id:kazuhironagai77:20210530230340p:plain

まだ何も発生しません。

Countの値を1にしてみます。

f:id:kazuhironagai77:20210530230358p:plain

お、発生しています。

f:id:kazuhironagai77:20210530230417p:plain

見にくいのでUnlitに変更しました。更にCountに100を代入しました。

f:id:kazuhironagai77:20210530230435p:plain

それではBurstのparameterの意味について検討してみます。

まずBurstとSpawnの違いですが、Bustは一辺にSpawnしてその後Intervalがあります。

f:id:kazuhironagai77:20210530230504p:plain

f:id:kazuhironagai77:20210530230512p:plain

Spawnは、Intervalがありません。後、一辺に沢山のparticleがSpawnする事もありません。

f:id:kazuhironagai77:20210530230533p:plain

SpawnとBurstを同時にやってみます。

f:id:kazuhironagai77:20210530230550p:plain

黄色がBurstです。Timeを0.96にする事でBurstにIntervalが在る事をはっきり分かるようにしています。

f:id:kazuhironagai77:20210530230618p:plain

水色がSpawnです。以下の条件にセットしました。

f:id:kazuhironagai77:20210530230644p:plain

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

f:id:kazuhironagai77:20210530230659p:plain

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

f:id:kazuhironagai77:20210530230716p:plain

うーん。今の時点では見た目は大きく変わらないですね。

公式のDocumentのDefault Required and Spawn Modules [6]を参考にしながらBurstのParameterの機能を調べます。

f:id:kazuhironagai77:20210530230735p:plain

InstantとInterpolatedの二つがあります。

f:id:kazuhironagai77:20210530230751p:plain

Default Required and Spawn Modules [6]には以下のように書かれていました。

f:id:kazuhironagai77:20210530230809p:plain

どっちでも関係ないのかもしれませんね。

次にBurst Listの要素のParameterであるCount、Count Low、Timeについてです。

f:id:kazuhironagai77:20210530230842p:plain

公式のDocumentの説明です。

f:id:kazuhironagai77:20210530230935p:plain

Countには最大値、Count Lowに最小値を入れる事でRandomな数Particleが生成されるようです。EmitterのLife time云々は良く分からないですが、TimeはBurstするIntervalを示しているはずです。

以下の条件で試してみます。

f:id:kazuhironagai77:20210530231009p:plain

生成されるParticleの数が、1,2,3,1になっています。

f:id:kazuhironagai77:20210530231026p:plain

生成されるParticleの数の範囲は[count low , count]になっていそうです。

Timeを0.01に変えました。

f:id:kazuhironagai77:20210530231043p:plain

0.95の場合です。

f:id:kazuhironagai77:20210530231101p:plain

変わっていませんね。良く分からないです。

Burst ScaleはSpawn のRate Scaleと一緒でしょう。ただ数字を変えているだけみたいです。

f:id:kazuhironagai77:20210530231117p:plain

試してみます。Constantの値を5にしました。

f:id:kazuhironagai77:20210530231207p:plain

5倍に増えていそうですね。

f:id:kazuhironagai77:20210530231223p:plain

Process Burst Listについてです。

f:id:kazuhironagai77:20210530231240p:plain

公式のDocumentの説明です。

f:id:kazuhironagai77:20210530231257p:plain

Process Spawn Rateと同じ機能ですね。

一応Burstについての機能もこれで分かりました。

4. 魔法陣の直し

もう少しCascadeの勉強をしたいですが、勉強だけに限られた時間を費やす訳にもいかないので、折衷案として魔法陣の直しをやる事にします。

f:id:kazuhironagai77:20210530231329p:plain

それぞれのemitterが保持するModuleの設定から見てみます。

f:id:kazuhironagai77:20210530231346p:plain

2番目のParticle Emitterのチェックをクリックして2番目のParticle Emitterを表示出来なくしました。

f:id:kazuhironagai77:20210530231402p:plain

以下のようなイメージになっています。

f:id:kazuhironagai77:20210530231417p:plain

随分緑色ですね。

それぞれのModuleを見て行きます。

まず、Lock Axis Moduleです。

f:id:kazuhironagai77:20210530231434p:plain

Z軸に固定されています。

f:id:kazuhironagai77:20210530231451p:plain

この意味全然分からなかったんですが、Spriteを勉強し直したら一発で理解できました。

Spriteの場合、particleに貼りつけたMaterialは常にCameraに対して正面を向くようになります。しかし時にはMaterialの向く方向は常に一定であってほしい場合もあります。この魔法陣の場合もそうです。

それを強制するmoduleがLock Axis Moduleだったんです。

うーん。

なんで最初からそう教えてくれないの?

一応、確認だけはしておきます。

サラのParticle Systemを作成します。

見やすいように以下の様な改良をしました。

f:id:kazuhironagai77:20210530231510p:plain

Lock Axis Moduleを追加してLock Axis FlagsにZ軸をセットします。

f:id:kazuhironagai77:20210530231527p:plain

f:id:kazuhironagai77:20210530231535p:plain

以下の様になりました。

f:id:kazuhironagai77:20210530231551p:plain

Materialの向きがカメラではなくZ軸に沿って向くようになりました。

やっぱり合っています

最後に公式のDocumentも確認しておきます。Orientation Modules [7]を見ると

f:id:kazuhironagai77:20210530231624p:plain

やっぱりそう書かれています。

次にSpawnを見ようとしたらその上にRequiredが在る事を忘れていました。

f:id:kazuhironagai77:20210530231644p:plain

勿論、無視して進むのもアリですが、先程のLock Axis Moduleの例の様に、Spriteが常にmaterialの向きをカメラに対して正面にしている事を知らないと、何をやっているのか意味不明になる場合もあります。つまり順序を違えて勉強しても無駄に終わる可能性が高いです。

うーん。しょうがないです。

Required ModuleのParameterを勉強します。

公式のDocumentはDefault Required and Spawn Modules [8] です。このサイトを参考にしながら勉強します。

f:id:kazuhironagai77:20210530231704p:plain

最初のこの3つは流石に知っています。Spriteに使用するMaterialとそのSpriteの発生位置並びに発生する角度の指定です。

Screen Alignmentです。

f:id:kazuhironagai77:20210530231721p:plain

文字通り解釈するなら画面に対してどの様に整列するかです。

Cursorを被せると以下のような解説が出て来ます。

f:id:kazuhironagai77:20210530231737p:plain

公式のDocumentでは以下の説明がありました。同じではないですね。

f:id:kazuhironagai77:20210530231757p:plain

でも言っている内容は大体同じですね。

やっぱりカメラに対してどの向きでMaterialを並べるかについて指定するParameterですね。

一応、読んで全く意味が分からない事はないですね。本当に分かっているのかはそれぞれの条件でテストする必要があります。でも今回そこまでやる必要はない気もしているのでここまでとします。

f:id:kazuhironagai77:20210530231817p:plain

この二つは先程のパラメーター、Screen Alignment でPSA_FacingCameraDistanceBlendを選択した場合に使用するパラメーターでしょう。

f:id:kazuhironagai77:20210530231837p:plain

Cursorを乗せたらそう解説されていました。

f:id:kazuhironagai77:20210530231856p:plain

Local Spaceを使用するかどうかを指定するparameterである事は分かりますが、別にWorld Coordinate を使用したって何も変わらない気がします。

でも確か魔法陣のTutorial、Magic Aura Effect - Particle System - [UE4 Tutorial] [9]でLocal Spaceを使用しないと駄目な理由を何処かで説明していた気がします。

見直して見ました。6:04辺りでLocal Spaceについて説明しています。

Local Spaceを使用するとParticle Systemの周りでImageを動かす時、Lagが生じないと言ってるみたいです。ただimageと言っていないでEmitterと言っているかもしれません。分かりませんね。

それでですね。

今、魔法陣のTutorial、Magic Aura Effect - Particle System - [UE4 Tutorial] [9]を見直したら、かなりの部分の説明の意味がすんなり理解出来るようになりました。

もう一回、Magic Aura Effect - Particle System - [UE4 Tutorial] [9]を作成し直した方がParticle systemの理解が進むような気がします。ので来週それをする事にしました。

今週はここまでとします。

5. Monster Zoneのテストの続き

先週、なんとかMonster Zone Actorを作成しましたがテストは不十分な状態で終わってしまいました。

f:id:kazuhironagai77:20210530231938p:plain

f:id:kazuhironagai77:20210530231948p:plain

今週は色々テストしてみます。

と思ったんですが、何をテストしたかったのかもう忘れてしまいました。先週のBlogを読んだんですがそこまでは詳しく記録していませんでした。

戦闘したり、Blockに侵入したり退散したりを繰り返したんですが、特に問題はありませんでした。

5.1 Monster Zoneのサイズを変える

それでMonster Zone2のサイズを変えて見ました。

f:id:kazuhironagai77:20210530232011p:plain

これでテストしてみます。

Block2に侵入したらMonsterが2体現れました。結構、ドキっとしました。

f:id:kazuhironagai77:20210530232029p:plain

2体のモンスターを倒してLandscape4に戻って来ましたが特に問題も起きませんでした。

f:id:kazuhironagai77:20210530232048p:plain

もっとモンスターを増やしてみます。

f:id:kazuhironagai77:20210530232116p:plain

以下の様な感じになりました。

f:id:kazuhironagai77:20210530232136p:plain

戦闘してみます。

全部倒しました。

f:id:kazuhironagai77:20210530232158p:plain

結構大変でした。

魔法の炎(小)を使用してMonsterを倒した時、カメラの位置が少し変な気がします。これは後で直します。

5.2 Block 1をMonster Zone 1に変更する。

以下の部分がBlock1でその中にあるNav Mesh Bound Volume がTerritory 1です。更にそのterritory 1と同じサイズのTriggerがTrigger1です。

f:id:kazuhironagai77:20210530232231p:plain

これをMonster Zone 1で置き換えます。

Landscape4のBPにあるBlock1やTrigger1のEventが発動しないようにします。

f:id:kazuhironagai77:20210530232248p:plain

戦闘から戻って来た時もLandscape4のBP からMonsterの生成は行わない様にします。

f:id:kazuhironagai77:20210530232308p:plain

今度はMonster Zoneを追加します。このMonster Zoneの名前はMonster Zone 1です。

f:id:kazuhironagai77:20210530232326p:plain

Block1、MonsterZone1などを追加します。

f:id:kazuhironagai77:20210530232346p:plain

Get Monster Spawn Data()関数を直します。

f:id:kazuhironagai77:20210530232404p:plain

以下の様に直しました。

f:id:kazuhironagai77:20210530232420p:plain

これでMonsterが発生するはずです。

テストしてみます。

f:id:kazuhironagai77:20210530232438p:plain

しています。戦闘なども試してみます。

戦闘は出来ましたが、バグが2つ発生しました。最初のバグは戻って来た時にモンスターが生成されません。次のバグはもう一度Monster Zone 1に侵入した時に倒したモンスターが復活していました。

確認のためにもう一度戦闘をしたら今度はバグは発生しませんでした。

f:id:kazuhironagai77:20210530232506p:plain

良く分からないです。

5.3 Monster Zoneのバグについて

そう言えば、以下の状態で戦闘から帰ってきた場合、playerの操作するキャラが居ないTerritoryにはMonsterが発生しないバグがありました。

f:id:kazuhironagai77:20210530232537p:plain

このバグの直し方のアイデアは既にあります。が下の全てのTerritoryをMonster Zoneで置き換えてから直します。

f:id:kazuhironagai77:20210530232556p:plain

6. Instance EditableUE4C++おけるEditDefaultsOnlyEditInstanceOnlyEditAnywhereの関係についての確認

先週、「7.Blue Printにおける変数についてのテスト」でBPの変数はPrivateの状態でもそれぞれのInstanceで別な値が取れる事が分かりました。前にUE4C++のEditDefaultsOnly、EditInstanceOnlyとEditAnywhereとBPのInstance Editableの関係についてまとめましたが間違っていました。のでここでもう一度検討して訂正したいと思います。

2020-10-11のブログに以下の様に書いています。

f:id:kazuhironagai77:20210530232630p:plain

うーん。これだけ読むと間違った事は言ってはいませんね。ここで私が述べているのは、

  • PublicにするとそれぞれのInstanceで初期値を別々にセット出来る。
  • 解説でもそれぞれのInstanceで編集可能

と言っているだけです。これと私が勘違いしていたPublicにしなくてもBPの変数はそれぞれのInstance毎に別な値を取れる事とは関係ないです。私が勘違いしていたPublicにしなくてもBPの変数はそれぞれのInstance毎に別な値を取れる事を加味しても、Publicにしなければ、それぞれのInstanceで初期値を別々にセットは出来ません。更にUE4の解説で私の主張は支持されています。「それぞれのInstanceで編集可能」と言っていますから。

ただその後で以下のような事を言っています。

f:id:kazuhironagai77:20210530232704p:plain

あれ。これも間違ってはいないですよね。

私が間違っていたのは、Privateにした時のBP変数の値が全てのInstanceで同じだと思っていた事です。一種のGlobal変数になると思っていました。これは間違っています。だからと言って私が上記で述べているBPの変数をPublicにする事はUE4C++でUPropertyのSpecifierのEditAnywhereと同じであるという主張との直接の関連はありませんから。

やっぱり理論的に物事を推し進めていると一個間違いが見つかってもそれで全部駄目になる事はないですね。かえって自説の強化につながる位ですね。

自分でやった事なのでこれ以上褒める事はしませんが、他人の業績でこんな結果になったら尊敬します。大変な成果です。

7. Particle systemの勉強方法について

Particle system、Cascade でもNiagaraでもどっちでも良いですが、明らかに正しい勉強手順があります。

それとParticle systemの勉強の最初で、本当にProgrammingが出来るDesigner、つまりTechnical artistでも勉強すれば使用できるようになるのかの問題があります。

今の所、私が勉強した範囲では、8割はTechnical artistでも出来るのかなという気がしています。それ以上はどうなんでしょうか?それはまだ分かりません。

今回のParticle systemの勉強方法に関しては、Technical artistでも出来る内容に関しての勉強方法についてです。

先週のblog

f:id:kazuhironagai77:20210530232738p:plain

と述べました。これが100%正しいのか現時点では分かりませんが、私自身はこれ以外の方法で勉強しても実際に自分でEffectを作成してみて、となったら何にも出来ない事態になる気がしています。逆に言えばこの方法で勉強すればProgramming が出来る、つまりBPは扱えるDesignerならば普通にVisual Effectの作成が出来る気がしています。

今週のCascadeの勉強でLock Axis Moduleについて勉強しました。「4. 魔法陣の直し」で詳しく述べていますが、3D GraphicsにおけるSpriteの仕組みを理解しないとLock Axis Moduleの機能も理解出来ません。

そしてSpriteの仕組みを理解するためにはParticle Systemについての理解が必要になります。

こんなの最初からその順番で教えてくれたら2時間もあれば理解出来ますよ。勿論、頭の良さには個人差がありますからBPの扱えるdesignerレベルの方ならと言う限定付きですが。

8. On Actor End Overlapから退散する時に戦闘中か、そうでないかについての確認方法は、Monster Name in FightingNoneでない事で確認した方が効率が良い件について

一体何を言っているのか全く分からないので、先週のblogを読み直してみたら思い出しました。

別なLevelに移動する場合でもTrigger box内にいる時は、On Actor End Overlap (Trigger) eventが呼ばれます。不思議なのは、逆は起きません。Player の操作するキャラが新しいLevelに移動して、その結果、あるTrigger box内で生成されてもOn Actor Begin Overlap (Trigger) eventは呼ばれません。

そのため、戦闘画面に移動する時に、On Actor End Overlap (Trigger) eventが呼ばれる時とそれ以外の、単にTrigger box1から退散した時にOn Actor End Overlap (Trigger) eventが呼ばれる時は別な対応が要求されます。

その判別をするのに、Monster ZoneのTrigerでは以下の黄色の枠で囲ったコードで判別しています。

f:id:kazuhironagai77:20210530232814p:plain

Monster ZoneのBlockでは特に判別はしていなくて戦闘画面に移動する時はIs Valid 関数でエラーにならないようにしているだけです。

f:id:kazuhironagai77:20210530232834p:plain

これをMonster Name in FightingがNoneでない事で確認した方が実装が楽になるのではないかと言う事です。

試してみます。

以下の様に変更しました。

f:id:kazuhironagai77:20210530232900p:plain

Play Animation nodeがエラーを発しているのは戦闘画面に移動した時にすでにMonster BP Actorが消去されているからです。戦闘画面に移動する時にはBranch以降のコードは実行しなければ問題起きないはずです。

何度か戦闘して問題ないみたいと結論づけようとしたらエラーが沢山出ていました。

f:id:kazuhironagai77:20210530232925p:plain

うーん。なんで?

Monster Zone 2のBlock内に侵入、退散を繰り返して見ました。

つまり以下のBranchの黄色の条件で試しました。

f:id:kazuhironagai77:20210530232943p:plain

何回やってもErrorは出ません。

あ。Monsterの名前がNoneのままでした。

直します。

あれ、名前ありました。

f:id:kazuhironagai77:20210530233001p:plain

色々試したら、このPlay Animation nodeがerrorを出す時は、Blockに侵入、退散を何回も繰り返しやる時に起きる事が判明しました。

ので、Is Valid?関数は戻しました。最終的には以下の様に成りました。

f:id:kazuhironagai77:20210530233020p:plain

BranchでMonster Name in FightingがNoneでない事は確認しているので、戦闘画面への移行が、少しだけ早くなっているはずです。それ以外は前と同じです。

一応テストしてみます。

Block2に侵入したり退散したりを何回も繰り返して見ました。

f:id:kazuhironagai77:20210530233040p:plain

Errorは起きませんでした。

以上です。

9. Monsterを倒した後で、Data Tableの設定を変える時のコードの変更

以下の部分に当たります。

確かに整理した方が見易いです。ですがこれが既に関数、Remove Monster From Landscape 4()内の実装なんです。敢えて直す必要があるのかちょっと悩んでいます。今週はもう時間もないですしちょっと止めておきます。

f:id:kazuhironagai77:20210530233111p:plain

もうTerritory 1ではなくMonster Zone 1なのでそこは直します。

10.まとめと感想

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

  • NiagaraCascadeの勉強
  • 花火について
  • Cascade と魔法陣について
  • Monster Zoneの拡張
  • 先週のバグの直しなど

です。来週は、今週の作業の続きをやって行きます。

今週はUE5が公開されてそっちに気が取られてしまいあんまり集中出来ませんでした。まあそういう時もありますね。

私のPCのVideo CardではRay Tracingも出来ないし、その他のスペック的にもUE5を使用するのは厳しそうです。UE5を使用する事になったら新しいPCを購入する事しかなさそうですが、現在のvideo cardの値段では新しいPCを購入する気には全然なれません。ので私がUE5に参入するのは早くても来年以降になりそうです。その間はUE5の動画を見て満足する事にします。

11 . 参考文献(Reference

[1] Epic Games. (n.d.-a). Audio Effects in Niagara. Unreal Engine Documentation. Retrieved May 30, 2012, from https://docs.unrealengine.com/en-US/RenderingAndGraphics/Niagara/HowTo/AudioEffects/index.html

[2] Epic Games. (n.d.-b). Create a Ribbon Effect in Niagara. Unreal Engine Documentation. Retrieved May 30, 2021, from https://docs.unrealengine.com/en-US/RenderingAndGraphics/Niagara/HowTo/RibbonEffect/index.html

[3] gameDev Outpost. (2021a, March 9). UE4 - Niagara Audio - Part 1 - Play Audio [Video]. YouTube. https://www.youtube.com/watch?v=zANHydk1J60

[4] gameDev Outpost. (2021b, March 11). UE4 - Niagara Audio - Part 2 - Play Audio Continued [Video]. YouTube. https://www.youtube.com/watch?v=f02hUUcCLGY

[5] Epic Games. (n.d.-e). Niagara Key Concepts. Unreal Engine Documentation. Retrieved May 30, 2021, from https://docs.unrealengine.com/en-US/RenderingAndGraphics/Niagara/NiagaraKeyConcepts/index.html

[6] Epic Games. (n.d.-c). Default Required and Spawn Modules. Unreal Engine Documentation. Retrieved May 30, 2021, from https://docs.unrealengine.com/en-US/RenderingAndGraphics/ParticleSystems/Reference/Modules/Required/index.html

[7] Epic Games. (n.d.-f). Orientation Modules. Unreal Engine Documentation. Retrieved May 30, 2021, from https://docs.unrealengine.com/4.26/en-US/RenderingAndGraphics/ParticleSystems/Reference/Modules/Orientation/

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

[9] UnrealCG. (2017, July 19). Magic Aura Effect - Particle System - [UE4 Tutorial] [Video]. YouTube. https://www.youtube.com/watch?v=PEb7ujDkP44&list=PLnfzvYOawOqArAASPfH5rOErJNnLkk7Fw&index=5