UE4の勉強記録

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

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

f:id:kazuhironagai77:20210509225618p:plain

<前文>

第二言語習得法と大量リスニング

先々週、英語の収得方法のアドバイスを書いたせいか、第二言語習得方法についての英語の記事を結構読んでいます。アメリカは移民の国なので移民が英語しゃべれなかったら困る訳です。第二言語習得の熱心さがまるで違います。その中でこの学習方法ならある程度の成果が出ると言われているのが、日本人からするとかなり意外ですが、大量リスニングです。

大量リスニングって、スピード〇―二ングでしょう。あれって〇欺でしょう。とほとんどの日本人は思うと思います。私もそう思いました。良く読んでみると英語を聞いているだけで良いのではなく、9:1ぐらいで聞く勉強としゃべる勉強にするのが最も効率が良いらしいです。

にしても大量リスニングって効果ないです。とほとんどの日本人が思っているのと相反しています。

ここからが私の仮説ですが、どちらの考えも正しいのだと思います。

まずアメリカの大量リスニングが第二言語習得に最も効果があると言うのは、恐らくですが被験者たちのほとんどがヨーロッパからの移民であるからだと思われます。ヨーロッパからの移民は、文化がほとんど同じで言語もかなり似ていますから、聞いているだけで覚えられる可能性があります。

欧米の文化が如何に同一であるかを実感した体験を以下に記します。

アメリカでは、何かをやる前にWish me luckと言って、日本で言うエンガチョのハンドサインをやります。

ある時ですが、その場にいたドイツ人の女の子が、EUじゃこうやるのって別なハンドサインを見せたら、ロシア人の女の子がロシアじゃこうっとまた別なサインを見せたんです。そしてその場にいたみんなが私を見つめて、日本ではどうやるのか興味津々で私の発言を待っていたんですが、「日本じゃWish me luckって言わない。だからハンドサインもない。」と私が言うと、そんな事あるか、とみんなから突っ込まれて、日本ではVサインをやる。と勝手に決められてしまいました。

でも、日本でWish me luckに該当する言い回しなんてないですし。

この文化の違いが、日本人の場合は、大量リスニングしても効果がない理由かもしれないと思っています。

よく英語が出来ない人が「いただきます」「がんばって」「えらいね」などの英訳を英語が出来る人に聞いて、英語が出来る人がつっけんどんに「これらの日本語に1;1で対応する英語はないですよ。」と答えたりしていますが、実際それらの単語は、その文脈毎に、その意味を汲み取って訳するしかありません。ところが、ヨーロッパの人達はあるんですよ。全く同じ意味の言い回しが。そしてこうやって聞いているだけで英語がしゃべれるようになってしまうんです。文化が同じと言う事はそう言う事なんです。

そうはいっても、アメリカで第二言語習得において一定の効果が出ているのが、大量リスニングである事は、英語が喋れるようになりたい日本人にとってはかなり重要な情報です。

私は、日本人には大量リスニングをやる前に、何かの予備学習をする事でヨーロッパ人と同様の効果が出るようになると思っています。

発音とか、文法とかの最低限の基礎を身についてからやるのが一つ。もう一つは英語圏で実際に生活する事です。

この辺の勉強方法について、ちょっと研究したいと思っています。

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

<本文>

1. 今週の予定

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

  • Niagaracascadeの勉強
  • モンスターをもっと配置する
  • 武器屋のバグの直し
  • ワープゲートのセリフの直し
  • Lightmass Importance Volume…の警告の直し
  • Effectのコストについての勉強
  • 魔法陣の改良

2. Niagaraの勉強

先々週、先週とUE4VFXを勉強しましたが、かなり面白かったので今週ももう少しだけ勉強します。

いつものサイト、Niagara Visual Effects [1] を見ますと

f:id:kazuhironagai77:20210509225944p:plain

Event and Event Handlers Overviewだけはまだ読んでいません。読んでいませんが、まだEmitterを2個以上使用したNiagara Systemを作成した事がないので、今勉強してもあんまり身に付かないとも思っています。

じゃGuidesの方を勉強しますか?

f:id:kazuhironagai77:20210509230003p:plain

緑とオレンジの色の違いは何なんでしょうね。緑はBeginner でオレンジはIntermediate の事を指しているんですかね?

Enable the Niagara Plugin は今のUE4のVersionで勉強する必要はないのでスキップします。

次のAudio Effects in Niagaraは、興味深い内容ですが、基本を勉強している今、やる必要があるのかと言うとちょっと疑問です。後に回しましょう。

残りのCreate a Sprite Particle Effect in Niagara、Create a GPU Sprite Effect、Create a Mesh Particle Effect in Niagara、Create a Particle Light、Create Ribbon Effect in Niagara、How to Create a Steam Effect in Niagara、How to Create a Sparks Effect in Niagara、そしてCreate a Beam Effect in Niagaraを整理すると、

  • Sprite Particle、Sprite Particle(GPU) 、Mesh Particle、そしてParticle Light
  • Ribbon、Steam、Sparks、そしてBeam

の構成になっています。

この順番で勉強するのが一番の正攻法なのかもしれませんが、Niagara Quick Start [2]で既にMesh Particleを使用しているので、そんなに真剣に勉強する所なのかな?とも思っています。

f:id:kazuhironagai77:20210509230037p:plain

あるいは先週勉強したYouTubeにある NiagaraのTutorial(UE4-VFX [3])の続きを勉強する方法もあります。

f:id:kazuhironagai77:20210509230057p:plain

先々週、先週と公式のDocumentばっかしで勉強して来たのと、ビデオで学習した方が文書を読むより効果が高いはずなので、今週はこっちをやる事にします。

2.1 UE4 - Introduction to Niagara - Part 2 [4]を勉強する

UE4 - Introduction to Niagara - Part 2 [4]を勉強します。

今回は、Niagara Systemをいきなり作成します。

f:id:kazuhironagai77:20210509230128p:plain

New System from a templateを選択します。

f:id:kazuhironagai77:20210509230148p:plain

前回は、Create empty systemを選択したんでしたっけ。

そしてDirectional Burst、Radial Burst、Simple Explosionの中からSimple Explosionを選択します。

f:id:kazuhironagai77:20210509230309p:plain

先々週、Niagara Quick Start [5] を勉強した時はどれを選んでしったけ。全く覚えていません。

見直したら、基本的にNiagara Systemすら使用していなかったです。

f:id:kazuhironagai77:20210509230330p:plain

Niagara Dynamic Input Scriptですか。うーん。まだ分からない事だらけですね。

名前をNS_IN2としました。先週、ConventionでNiagara SystemはNS_とすると習いましたのでNS_を付けました。

f:id:kazuhironagai77:20210509230354p:plain

全然、関係ないですがConventionって

  • 偉い人たちが一同に集まって、どんな基準でもいいんですが統一すると便利な事象、例えば長さの単位、の基準を決定する。
  • 決定した後は、全ての人がそのルールに絶対に従わないといけない。

っていう2つの意味があると思います。

これを慣習とかしたきりと訳すと、古くからある約束事になって新しく制定するという意味合いが完全に消えてしまいます。条約、協定と訳すると国の場合に限定しすぎていて何かしっくりきません。約束と訳すと、どんな基準でもいいんですが統一すると便利な事象と言うニュアンスもないし、偉い人たちが一同に集まって決めたという前提条件も無くなってしまいます。

どの訳もしっくりこないのでConventionとそのまま使用する事にしました。

NS_IN2を開いて見ます。

f:id:kazuhironagai77:20210509230438p:plain

おお。Emitterが3つもあります。Niagaraで初めて複数のEmitterを取り扱います。

Reviewを見てみると

f:id:kazuhironagai77:20210509230455p:plain

大量の矢印の放出、淡い白い球の発生、そして小さい白い粉の落下、が見られます。これらをそれぞれのEmitterが作成しているのでしょうか?

Tutorialの説明でこれらのEmitter内のModuleが継承している訳ではないと言っています。

そして、その証拠に以下の赤で囲った部分に緑のマークが表示されていないとも言っています。

f:id:kazuhironagai77:20210509230527p:plain

しかし先週作成したNiagara systemのModule(継承しているはず)をみても緑のマークは表示されていません。

f:id:kazuhironagai77:20210509230706p:plain

自分で改良したり作成したりしたEmitterを別なNiagara systemで使用する方法が説明されていました。

Emitter上で右クリックしてCreate Asset From Thisを選択します。

f:id:kazuhironagai77:20210509230734p:plain

Emitterが出来ました。

f:id:kazuhironagai77:20210509230750p:plain

EmitterもNSで呼ぶのは混乱を引き起こす気がしますね。

NS_IN2にあるOmni directional Burst Emitterを消去してNS_test1をNS_IN2に追加します。

何でこんな事するのかと思ったら、このやり方だとNS_test1にあるModuleは継承されるはずだからでした。

しかし実際は継承されておらず、継承されるためには、右上のギアのようなアイコンを左クリックしてSet New Parent Emitterを選択する必要があります。

f:id:kazuhironagai77:20210509230909p:plain

選択すると以下のようなwindowが表示されるので適切な親Emitterを選びます。

この場合はNS_test1を選択します。

f:id:kazuhironagai77:20210509230946p:plain

すると以下に示したような緑(?)アイコンが表示され継承した事が確認出来ます。

f:id:kazuhironagai77:20210509231025p:plain

とTutorialにありますが、

私のNS_IN2にはそんなアイコンは表示されません。

f:id:kazuhironagai77:20210509231052p:plain

以下に示した様に、Moduleを消去する事は出来ないので、継承した事は間違いないみたいですが、何故緑(?)アイコンは表示されないんでしょうか?

f:id:kazuhironagai77:20210509231110p:plain

分かりました。

値を弄ったら表示されます。

f:id:kazuhironagai77:20210509231159p:plain

どうでもいいですが「このアイコン青くない」と思って切り取って拡大して確認しました。

f:id:kazuhironagai77:20210509231224p:plain

緑でした。

Tutorialでemitterやmoduleを複数選択出来ると説明されていましたがやり方の説明がなかったです。

Ctrl+左クリックで出来ましたが。

f:id:kazuhironagai77:20210509231319p:plain

以下のチェックを外すとこのEmitterが担当しているEffectが消えます。

f:id:kazuhironagai77:20210509231337p:plain

NS_Test1のチェックを外したらPreviewに表示されていた白い粉が消えました。

f:id:kazuhironagai77:20210509231354p:plain

今度は以下に示した人型のアイコンについてです。

f:id:kazuhironagai77:20210509231410p:plain

これをクリックするとIsolationします。と説明していますが、Isolationって具体的に何を意味しているのか分かりません。

試しにクリックしてみたら、白い粉だけ表示されるようになりました。これがIsolationなんでしょうか?

f:id:kazuhironagai77:20210509231430p:plain

必殺のカーソル乗せも今回は駄目でした。

f:id:kazuhironagai77:20210509231447p:plain

Tutorialは2つ同時にIsolateする方法を説明しています。

2つ以上Isolateする場合は以下のように右クリックから選択する必要があります。

f:id:kazuhironagai77:20210509231506p:plain

以下のように2つのEmitterのEffectだけが表示されています。

f:id:kazuhironagai77:20210509231523p:plain

以下に示したマークの説明です。

f:id:kazuhironagai77:20210509231602p:plain

これはSprite Rendererを使用している事を示しているそうです。

Renderを見ると確かに使用してます。

f:id:kazuhironagai77:20210509231658p:plain

隣のEmitterは四角のアイコンになっていました。

f:id:kazuhironagai77:20210509231849p:plain
これは

f:id:kazuhironagai77:20210509231815p:plain

Mesh Rendererを示すアイコンのようです。

Time lineにも全く同じアイコンがあり、機能も全く同じだそうです。

f:id:kazuhironagai77:20210509231918p:plain

以上でした。

流石にこれだけだと物足りないのでもう少し勉強します。

2.2 UE4 - Cascade to Niagara Converter [6]を勉強する

次のTutorialであるUE4 - Cascade to Niagara Converter [6]も勉強します。

4.26 からCascadeNiagaraに変換するPluginがついているそうです。その使用方法についての解説でした。

試してみます。

f:id:kazuhironagai77:20210509232005p:plain

これを使用出来るようにします。

Cascadeで制作されたParticle systemをNiagaraに変換します。

f:id:kazuhironagai77:20210509232023p:plain

以下のNiagara Systemが作成されました。

f:id:kazuhironagai77:20210509232041p:plain

f:id:kazuhironagai77:20210509232049p:plain

TutorialではこのPluginを使用する事で、Cascadeに詳しい人がNiagaraの仕組みを簡単に理解出来る様になります。と説明していました。

Cascadeの仕組みを知らない私にとっては関係ない話ですが。

2.3 UE4 - Cascade to Niagara - 4.26+ [7]を勉強する

さっきのTutorialは更に短かったので次のUE4 - Cascade to Niagara - 4.26+ [7]も勉強します。

単に前節で紹介したPlugin、Cascade to Niagara Convertorが実験的なPluginでバグがあったりするので、あくまでNiagaraの初心者でCascadeに詳しい人が基礎を理解する助けのために使用すべきである。との事でした。

先程、Cascade to Niagara ConvertorをEnableした時に、同様の警告が表示されていましたが、それでもこのTutorialの作者に文句言う人がいるんでしょうか?

まあ、いるから敢えてこのtutorialを作成したんでしょうね。

2.4 UE4 - Niagara Learning Resources [8] を勉強する

UE4 - Niagara Learning Resources [8] を勉強します。

正直これが一番見たかったヤツです。これを見れば、Niagaraを勉強するための他の教材を教えてくれそうだからです。

最初のお勧めは、Content Exampleでした。

f:id:kazuhironagai77:20210509232235p:plain

これは後で見なければなりませんね。

これだけでした。

ならばContent Exampleを今見てみます。

4.26のVersionをdownloadしてMapのNiagaraを開きます。

f:id:kazuhironagai77:20210509232301p:plain

最初のサンプルですが、Ctrl+Eを押しても何も起きません。

f:id:kazuhironagai77:20210509232321p:plain

Playを切ってCtrl+Eを押して見ました。

以下の解説が現れました。

f:id:kazuhironagai77:20210509232342p:plain

これは以下のNiagara Systemが開いたんでした。

f:id:kazuhironagai77:20210509232402p:plain

ついにこの青のやつの説明に巡り合えました。

f:id:kazuhironagai77:20210509232425p:plain

この青のヤツはBlue System Scriptと呼ぶらしいです。

後、今までヤツと呼んでいたこの塊、Nodeじゃないし呼び方が分からなかったんですが、ScriptもしくはStackと呼ぶ事が分かりました。

Blue System ScriptはParticle systemのLifecycle全体を管理するStackでした。と言ってもそれだけだと何の事だか意味分かりませんね。

ここで作成されたParameterはEmitterやParticle groupなどのどこからでもアクセス出来るそうです。System->Emitter->Particleとデータが流れるとありますから、このBlue System Scriptは最初に実行されるんでしょう。

一応、全部読みましたが、何か分かったような分からないような感じです。もう少しNiagaraの知識と実践が増えたら別な感想に変わるのかもしれませんが。

唯一、ああこれだと思ったのは以下に示したEmitterの追加についてです。

f:id:kazuhironagai77:20210509232507p:plain

先週、Emitterを追加しようとしましたが何も表示されませんでした。これを試してみます。

f:id:kazuhironagai77:20210509232601p:plain

沢山のEmitterが表示されました。

3. Cascadeの勉強

Cascadeで勉強したい事は決まっていて先週のCascade Particle Systems [9] のLODとOptimizationです。

f:id:kazuhironagai77:20210509232637p:plain

3.1 Particle System Level of Detail (LOD) [10] を勉強する。

今週はarticle System Level of Detail (LOD) [10] を勉強します。

先週、Key Particle Concepts [11] でParticle systemのコストを下げるためにはLODが非常に大切である事を学びました。今週はそれをもっと勉強して行きます。

Cascade LOD Controls

何と、Particle SystemのToolbarにあるToolの半分がLOD関連でした。

f:id:kazuhironagai77:20210509232806p:plain

これに関する解説だそうです。

それぞれのToolに関して詳しい説明がありましたが、こんなの実際に使用しないと理解出来るはずもないです。今読んでも何も分からないです。スキップします。

<Creating LOD Levels in a Particle System

以下の手順で行うそうです。

f:id:kazuhironagai77:20210509232921p:plain

と言う事は最初に自分でCascadeを作成する必要があるんですね。

今回は手順を理解するだけにしておきます。

f:id:kazuhironagai77:20210509233001p:plain

このdocumentで使用しているEffectですが、Sub UVを使用して作成したそうです。

しかし私、Sub UVの使用方法を知りません。

Documentを読んで想像する限りでは、一枚のTextureにそれぞれのLODで使用するTextを貼り付けているようです。

f:id:kazuhironagai77:20210509233154p:plain

でも上記の形状でTextureを貼り付けたらTextureのサイズがLODの最も高い場合と最も低い場合でも同じになってしまいますよね。

Mipmapみたいなのなら分かるんですが。

ここは、LODのLevelが最も高い時にTextureの1の部分を使用、LOD のLevelが最も低い時にTextureの4の部分を使用する。(もしくはその逆)と仮定して読み進めます。

まず兎に角、Particle systemを完成させます。Documentでは、以下の物を作成しています。

f:id:kazuhironagai77:20210509233220p:plain

これはLODのLevelが最も高い状態で作成したものだそうです。

と言う事はLOD0の状態と言う事でしょうね。

そしたら以下のToolボタンを押すそうです。

f:id:kazuhironagai77:20210509233245p:plain

そうするとLODのLevelが最も低い状態に勝手に成るみたいですね。

うーん。

良く分からない。

Starter Kitに付属のFireのEffectをDuplicateしてFire1を作成しました。Fire1のEmitterを一個だけ残したParticle systemを作成しました。

これで試してみましょう。

f:id:kazuhironagai77:20210509233323p:plain

Regen LODボタンを押してみます。

f:id:kazuhironagai77:20210509233342p:plain

警告されました。

f:id:kazuhironagai77:20210509233406p:plain

と言う事はこのEmitterをもっともLevelの低いLODに変換すると言う事なんでしょうか?

2個別々なEmitterを作ってくれるのかと思っていました。

良く分からないので、Fire1の複製、Fire2を作成して、Fire1だけRegen LODボタンを押しました。

左側がもっともLevelの低いLODで作成されたはずの炎(Fire1)で、右側はもっともLevelの高いLODで作成されたはずの炎(Fire2)です。

f:id:kazuhironagai77:20210509233443p:plain

全く違いが分かりません。

うーん。何か勘違いしていそうです。

一応、コストも確認してみます。

f:id:kazuhironagai77:20210509233502p:plain

同じに見えますね。

念のために少しだけ遠くに移動してみました。

f:id:kazuhironagai77:20210509233519p:plain

左側の方がコストがかかっているみたいですね。でも左側がもっともLevelの低いLODで作成されたはずの炎のはずなんですが。

ちょっとこれだけ読んだんじゃ意味が分からないですね。

一端中断します。

3.2 Intro to Cascade: Particle LODs | 11 | v4.2 Tutorial Series | Unreal Engine [12] を勉強する。

Intro to Cascade: Particle LODs | 11 | v4.2 Tutorial Series | Unreal Engine [12] にParticle systemのLODの使用方法が説明されていました。

かなり古いTutorialではありますが、ざっと見た感じではこっちは理解出来そうですので、これで勉強してみます。

まず、距離によって使用されるLODが変わる事についての解説がされています。

f:id:kazuhironagai77:20210509233558p:plain

これは常識かもしれませんが、先程のEmitter、Regen LODを使用したら、もっともLevelの低いLODに変換するけどそれで良いですか?みたいな警告が出て来て、それまで在ったもっともLevelの高いLODのデータは消えてしまうみたいなニュアンスでした。

f:id:kazuhironagai77:20210509233800p:plain

f:id:kazuhironagai77:20210509233816p:plain

やっぱり一つのEmitter内で幾つかのLODが保持出来ないと距離によってLODの使用を変える事は出来ないですよね。

もう少し続きを見てみましょう。

Starter ContentにあるP_Smokeを使用して説明してくれるそうです。

f:id:kazuhironagai77:20210509233921p:plain

探したらP_Smokeありました。

f:id:kazuhironagai77:20210509234007p:plain

DuplicateしてP_Smoke1を作成しました。

f:id:kazuhironagai77:20210509234026p:plain

これで試してみます。

Tutorialと同じようにRateのConstantを50にセットします。

f:id:kazuhironagai77:20210509234127p:plain

Tutorialの方はDistributionもRequired Distribution Spawn Rateになっています。

f:id:kazuhironagai77:20210509234221p:plain

こっちはよく分からないのでそのままにしておきます。

Tutorialによると、まず最初にこのEmitterがLODを何個保持しているのかを確認する必要があるそうです。

LODの項目のLOD Distanceをみると

f:id:kazuhironagai77:20210509234319p:plain

LODは0だけ示されています。つまりLODは現状一個しかありません。

これだわ。

先程のEmitterは元々LODを何個も持っていたんでしょう。それでRegen LODを使用したら、もっともLevelの低いLODに変換するけどそれで良いですか?みたいな警告が出て来たんですわ。

確認します。

先程のFireのParticle でRegen LODを使用する前の状態のLODを見てみました。

f:id:kazuhironagai77:20210509234351p:plain

やっぱり元々LODを2個持っていました。

Regen LODを使用した後のFireをみたら、LOD Distanceの1が2500になっていました。

f:id:kazuhironagai77:20210509234410p:plain

これは先程の遠くから見たら、左側がもっともLevelの低いLODで作成されたはずの炎のはずなのに、左側の方がコストがかかっている理由も分かりましたね。

f:id:kazuhironagai77:20210509234424p:plain

Regen LODを使用した左の炎は、2500(cm?) 離れないとLOD1は使用されませんが、元々の炎は、1200(cm?) 離れればLOD1を使用します。

だから右の炎の方がこの距離ではコストが低い訳です。

全て繋がりました。

Tutorialでは以下のボタンを使用してLODを追加しています。

f:id:kazuhironagai77:20210509234441p:plain

私もAdd LODをクリックしてP_Smoke1に新しいLODを追加します。

f:id:kazuhironagai77:20210509234456p:plain

新しく作成されたLODの個々の設定はLOD Methodの設定によって決定します。

自動でセットしたい時は、Automaticのままで良いそうです。

f:id:kazuhironagai77:20210509234511p:plain

ToolbarのLODを1にセットすると

f:id:kazuhironagai77:20210509234548p:plain

Emitter内の全てのModuleのバックに大理石のようなTextureが表示されます。

f:id:kazuhironagai77:20210509234603p:plain

Tutorialでは灰色に変わると言っていますが、灰色じゃないですよね。

このLOD1のそれぞれのModuleのparameterの値を自分で編集したい時は、Duplicate From Higherを選択します。

f:id:kazuhironagai77:20210509234618p:plain

Spawn Moduleで試したところ、Spawnのバックの大理石のようなTextureの表示が消えました。

f:id:kazuhironagai77:20210509234635p:plain

これでLOD1のSpawn Moduleの編集が可能になりました。

先程 LOD0 で50にセットしたRateのConstantを0.5にセットします。

f:id:kazuhironagai77:20210509234650p:plain

テストしてみます。

このEffectに近い場合は凄い煙を発しています。

f:id:kazuhironagai77:20210509234757p:plain

ちょっと離れると

f:id:kazuhironagai77:20210509234833p:plain

煙が消えました。

LOD0とLOD1が指定した距離によって切り替えられています。

この後、このTutorialは煙を二つにして色々見せていますが、基本は同じ事をやっているのでここで終了します。

一つだけ。

Viewportのbackground colorを変えるにはToolbarのBackground Colorから出来ます。

f:id:kazuhironagai77:20210509234953p:plain

f:id:kazuhironagai77:20210509235000p:plain

3.3 Particle System Level of Detail (LOD) [10] をもう一度勉強する。

article System Level of Detail (LOD) [10] をもう一回勉強します。

途中からやり直しても良かったんですが、前節ではっきりとCascadeにおけるLODの仕組みが理解出来たので、それを踏まえてもう一度全部読み直します。

Cascade LOD Controls

先程使用したRegen LODの解説ですが今ならよく意味が分かります。

f:id:kazuhironagai77:20210509235030p:plain

要するに、今まで作成したLODの内最もLevelの高い一個を除き全部消去し、その一個の複製をLOD1として作成すると言う意味です。

他のボタンの解説も読みましたが全部意味が理解出来ました。

<Creating LOD Levels in a Particle System

以下の説明によると

f:id:kazuhironagai77:20210509235214p:plain

Regen LODで作成した複製のLOD1は、全ての値がLOD0 と同じではなくSpawn rateは低くなっているようです。

以下の部分の説明は、最初に読む人には訳分からな過ぎでしょう。

f:id:kazuhironagai77:20210509235255p:plain

せめて以下の図くらいは示してほしかったです。

f:id:kazuhironagai77:20210509235313p:plain

<LOD Method and Distance Settings

今度はそれぞれのLODが使用される距離を指定します。

Documentに表示されている図は少し今のVersionとは違いますが中身は一緒です。

f:id:kazuhironagai77:20210509235336p:plain

f:id:kazuhironagai77:20210509235343p:plain

以上です。

思ったよりLODで手こずってしまったので、Cascade Particle system のOptimizationについては来週勉強します。

4. モンスターをもっと配置する

4.1 兎に角、配置する。

まず、Levelいっぱいにモンスターを配置してみます。それで重くなるようなら対策を考えます。

以下のように静的に配置しました。

f:id:kazuhironagai77:20210509235621p:plain

モンスターが徘徊している様はかなり壮観です。

f:id:kazuhironagai77:20210509235638p:plain

壮観ですがPCの負担も大きそうです。

トリガーボックスを作成してその中にPlayer が操作するキャラが侵入した時だけMonsterが発生するようにします。

f:id:kazuhironagai77:20210509235657p:plain

戦闘から戻って来た時の管理が難しそうですね。

4.2 一体だけモンスターを動的に生成する

一体だけモンスターを動的に生成出来る様にしてその後で考えます。

f:id:kazuhironagai77:20210509235727p:plain

これでモンスターが発生するはずです。

テストします。

何か沢山発生しているんですが?

f:id:kazuhironagai77:20210509235928p:plain

確認します。

f:id:kazuhironagai77:20210509235946p:plain

以下のノードを忘れていました。

f:id:kazuhironagai77:20210510000004p:plain

今度は一体だけ発生しています。

f:id:kazuhironagai77:20210510000018p:plain

今度は、Trigger boxから出たらこのモンスターが消えるようにします。

f:id:kazuhironagai77:20210510000032p:plain

色々考えたんですが、このTrigger box が発生させるモンスターが徘徊出来るNavがあります。そのNav内に存在する全てのモンスターを消す事で実現しました。

テストします。

f:id:kazuhironagai77:20210510000052p:plain

Trigger box から出るとMonsterが一瞬で消えました。

出来ています。

ただ一瞬で消えてしまうので見ている方は何だか分かりません。

消える前に分解して倒れるアニメーションをplayします。

f:id:kazuhironagai77:20210510000107p:plain

以下のような感じでモンスターが分解して消えます。

f:id:kazuhironagai77:20210510000122p:plain

ただし分解して消える時も、モンスターのAIは動いているので微妙に移動しています。これは後で直します。

4.3 そのモンスターとの戦闘終了後、色々。

まずそのモンスターは再生出来ないようにする必要があります。

Landscape4のどのTerritoryから戦闘場面に移動したのかが分かるようにInt型の変数、Monster Territory Numberを作成します。

f:id:kazuhironagai77:20210510000145p:plain

今作成している場所は1とします。

f:id:kazuhironagai77:20210510000220p:plain

Landscape4に発生するモンスターから戦闘で負けたモンスターを消す関数は以下に示したRemove Defeated Monster from Landscape 4です。

f:id:kazuhironagai77:20210510000238p:plain

このRemove Defeated Monster from Landscape 4関数にMonster Territory Number変数が1の場合を追加しました。

f:id:kazuhironagai77:20210510000255p:plain

これでLandscape4のTerritory1にいるモンスターは戦闘で倒した後は復活しないはずです。

試してみます。

戦闘から戻って来た時にはMonsterはいませんでしたが、一端Terriroy1から出てもう一度入ると、普通に発生しました。何故なんでしょう?

DebugしたらMonster Territory Number変数が0のままでした。

f:id:kazuhironagai77:20210510000312p:plain

理由が分かりました。

例え別なレベルに移動してもLandscape4のTrigger boxのOn Actor End Overlap (Trigger box) は呼ばれていました。

f:id:kazuhironagai77:20210510000328p:plain

戦闘場面に移動する時はMonster Territory Number変数の値を0に戻さないようにしました。

f:id:kazuhironagai77:20210510000343p:plain

といっても戦闘画面に移動する事を示す変数はないので、代用としてMonster Name in Fighting変数の値はNoneであるかどうかで判断する事にしました。

こういう変数は、きちんとしたゲーム会社ならば最初からFlagを使用して全部一括で管理しているんでしょうね。

なんせ行き当たりばったりで作成しているのでどんな変数が必要になるのかその時まで全く分かりません。

テストします。

今度はTerritory1に再度、侵入しても、倒したモンスターは再生しませんでした。

f:id:kazuhironagai77:20210510000422p:plain

4.4 モンスターを増やす

モンスターが2体でも大丈夫か確認します。

もう一体だけモンスターをLandscape4、Territory1に追加しました。

f:id:kazuhironagai77:20210510000457p:plain

確認します。

モンスターが2体生成されていました。

f:id:kazuhironagai77:20210510000513p:plain

一端、Territory1から出て生成されたモンスターを破壊します。

そしてもう一回、Territoryに侵入すると破壊されたモンスターは、破壊されたままの形で再生されて動き続けています。

f:id:kazuhironagai77:20210510000532p:plain

このバグを直します。

4.5 Territory1のモンスターを確実に消滅させる

多分ですが、このバグはTrapでモンスターを発生させた時に、モンスターが消滅する前に新しいモンスターを発生した時に起きたバグと同じ原因で起きてるはずです。

それを直します。

更に今回注意しないといけないのは、loopを使用している事です。

Loop内でdelayを使ったり、ForLoopの元のArrayにLoop中に干渉したりすると色々オカシクな事が起きます。

まずMonsterBPのArrayを新しく作成しました。

On Actor begin Overlap event で作成した全てのMonsterBPをそのArrayに追加します。

f:id:kazuhironagai77:20210510000608p:plain

これでそれぞれのMonsterBPに直にアクセスする事が出来ます。

On Actor End Overlap Eventでそのarrayを使用して分解、消滅のアニメーションをそれぞれのMonsterBPのMeshに対してplayします。

f:id:kazuhironagai77:20210510000655p:plain

ここでそれぞれのMonsterBPにFor Loop内でDelayを使用すると、Delayが終わらない内に先のコードを実行してしまうようです。

なので、AnimationをPlayする時間を確保するためにFor Each Loopが終了した後で、Delayを使用しました。

f:id:kazuhironagai77:20210510000712p:plain

分解、消滅のアニメーションは1.2秒程度ですが、念のために2秒ほどDelayします。

その後でArrayにAssignされた全てのMonsterBPをDestroyします。

更にArrayそのものもCleanします。

f:id:kazuhironagai77:20210510000734p:plain

Boolean 変数、Monster Clean については後で説明します。

テストします。

Monsterを発生させた後で、Territoryから逃走します。

Territoryを外れるとMonsterは分解、消滅のAnimationをplayします。

f:id:kazuhironagai77:20210510000759p:plain

そして消滅します。

f:id:kazuhironagai77:20210510000815p:plain

今度は、Monsterが消滅する前にもう一度Territoryに侵入した場合を検討します。

On Actor begin Overlap eventでMonsterを新しく生成する前に、先程出て来たMonster Clean Boolean変数をチェックします。

f:id:kazuhironagai77:20210510000915p:plain

この変数は、Arrayにある全てのMonsterBPがDestroyされ、更にそのArrayがCleanされなければTrueになりません。

Monster Clean Boolean変数がTrueになったら、On Actor begin Overlap eventは新しいMonsterBPを生成出来ます。

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

Monsterのアニメーションが終わる前にもう一回Territory1に侵入します。

f:id:kazuhironagai77:20210510000934p:plain

前の分解、消滅したモンスターが消えるまで、新しいモンスターは生成されませんでした。

バグは直ったようです。

4.6 Territory1のモンスターを一体だけ倒してみる。

それでは戦闘も試してみます。Territory1のモンスターを一体だけ倒してみます。

戦闘が終わったら沼に戻って来ました。

f:id:kazuhironagai77:20210510000957p:plain

勿論、Errorの山と共にです。何故なんでしょうか?

もう一度試したら、普通に戦闘した箇所に戻って来ました。

f:id:kazuhironagai77:20210510001014p:plain

一端、Territory1から出てもう一回侵入したら、倒していないMonsterだけ再生されました。

f:id:kazuhironagai77:20210510001030p:plain

沼に戻ってくるバグに関しては後でしっかり検討しましょう。

Territory1でモンスターと戦闘になった後は、Territory1のモンスターを生成します。

f:id:kazuhironagai77:20210510001052p:plain

試してみたら、Monsterを一体倒してこの場所に戻ってきてすぐに別のモンスターとの戦闘になりました。

f:id:kazuhironagai77:20210510001110p:plain

一応、考えていた通りに動いています。

ただしErrorが表示されています。

f:id:kazuhironagai77:20210510001128p:plain

多分、実在しないMonsterBPにアクセスしているんでしょう。

IsVaildノードで確認してから実行する事にします。

f:id:kazuhironagai77:20210510001145p:plain

もう一回テストします。

今度はErrorは表示されませんでした。

f:id:kazuhironagai77:20210510001207p:plain

思ったより複雑になってしまい、頭の整理が追いつきません。今週はここまでとして、少し頭の中を整理します。

5. 武器屋のバグの直し

スクリーンショットだと見えないんですが、武器屋で買い物をした後にWidgetを消すとカーソルが消えてします。

f:id:kazuhironagai77:20210510001238p:plain

カーソルが無いと画面の動きが激しすぎて3D酔いします。のでこのバグを直します。

まず正しく出来ているケースの実装を調べます。

武器屋に入って直ぐに出た時の場合です。

カーソルはそのまま残っていて、画面の動きが激しすぎて3D酔いする事はありません。

実装部は以下のようになっていました。

f:id:kazuhironagai77:20210510001301p:plain

Show Mouse Cursor if Not 関数を使うんでした。自分で作成して忘れていました。

この関数はWidgetを開いたときにキャラが動かないようにするためにどうしたら良いのかとか、色々検討して作成した関数でした。

f:id:kazuhironagai77:20210510001317p:plain

折角いろいろ研究して作成した関数を使わないのは勿体ないです。

これを使用して、武器屋で買い物をした後にカーソルが消えるバグを直します。

以下のように直しました。

f:id:kazuhironagai77:20210510001333p:plain

テストします。

カーソルはスクリーンショットに写らないので、証拠はないですが直りました。

他のWidgetも念のために調べておきます。

武器屋で武器を売った後も、カーソルが消えるバグがありました。

f:id:kazuhironagai77:20210510001350p:plain

直しました。

会話した後も同じでした。これはバグと言うより、前はカーソルが見えない方が良いと思ってカーソルを全部消していたのですが、後でカーソルが無いと3D酔いする事に気が付いて、カーソルの表示をするように変更したのですがその時に直し切ってなかった部分です。

全部のUIをチェックして直してしまいます。

道具屋で会話した後も直してなかったです。

直しました。

宿屋で会話した後も直しました。

これで全部のUIのカーソルが消えるバグを直したはずです。

6. ワープゲートのセリフの直し

6.1 兎に角、直す

直しました。

Map1からLandscape4にワープする時です。

f:id:kazuhironagai77:20210510001432p:plain

Landscape4からMap1にワープする時です。

f:id:kazuhironagai77:20210510001447p:plain

以下のようにセリフ部分の実装を変更しました。

f:id:kazuhironagai77:20210510001515p:plain

セリフは一括で管理するようにしたはずですが、どうやって管理する事にしたのか忘れてしまいました。

確認します。

6.2 セリフの管理方法を確認する。

セリフの管理をDataTableで一括するようにしたのは覚えていますが、具体的にどうやったのかは忘れてしまいました。

確認します。

戦闘中のセリフの表示ですが関数に任せていました。

f:id:kazuhironagai77:20210510001537p:plain

その関数の実装を見てみると以下のようになっていました。

f:id:kazuhironagai77:20210510001551p:plain

セリフそのものは以下の様にData tableで管理されていますね。

f:id:kazuhironagai77:20210510001606p:plain

戦闘中の会話は以下のように全てData Tableに落とされています。

f:id:kazuhironagai77:20210510001623p:plain

お店の会話はどうしたんでしたっけ?

Data Tableは見当たらないですが

宿屋の主人との会話を見てみます。

f:id:kazuhironagai77:20210510001641p:plain

Textのarrayで整理していますね。こっちはdata tableは作成しなかったんでしたったけ。

思い出しました。

NPC_ParentというWidgetを作成してその中に全てのセリフを管理したんです。

f:id:kazuhironagai77:20210510001658p:plain

f:id:kazuhironagai77:20210510001705p:plain

実際にお店の主人が会話に使用する時は、このNPC_Parentを継承したWidgetを作成してNPC_Parentのセリフを使用しました。

このやり方は教科書、Building an RPG with Unreal 4.xに載っていたやり方です。

f:id:kazuhironagai77:20210510001724p:plain

今、教科書を見直したら、6章の「NPCs and Dialog 」のDialog box setupにこのやり方の詳しい手順が紹介されていました。

作成したWidgetの親にNPC_Parentを指定する事で、NPC_Parentで作成したDialogueが、新しく作成したwidgetから使用出来る事が説明されている箇所です。

f:id:kazuhironagai77:20210510001742p:plain

懐かしいです。

このやり方で、WarpGateのセリフもNPC_Parentで管理しましょう。

6.3 W_WarpGateのセリフをNPC_Parentで管理する。

ToolbarからClass Settingsを選びます。

f:id:kazuhironagai77:20210510001802p:plain

DetailのClass OptionsにあるParent ClassにNPC Parentをセットします。

f:id:kazuhironagai77:20210510001821p:plain

NPC_Parentに新しいText型のArrayであるNPCWarpGateKeeperを作成し、その要素に、W_WarpGateで使用しているセリフを移します。

f:id:kazuhironagai77:20210510001836p:plain

f:id:kazuhironagai77:20210510001843p:plain

W_WarpGateのセリフの実装は以下のようになりました。

f:id:kazuhironagai77:20210510001903p:plain

テストします。

f:id:kazuhironagai77:20210510001920p:plain

f:id:kazuhironagai77:20210510001929p:plain

出来ています。

7. Lightmass Importance Volume…の警告の直し

7.1 バグの直し

Landscape4でBuild light onlyをすると以下の警告が出ます。

f:id:kazuhironagai77:20210510002021p:plain

何となくは意味は分かるのですが、折角直すのなら、完全に理解して直したいです。

ので調べます。

UE4のForum にあるPerformance Warning No importance volume found and the scene is so large []で解決方法が説明されていました。

f:id:kazuhironagai77:20210510002040p:plain

Lightmass Importance VolumeでLandscape全体を覆います。

f:id:kazuhironagai77:20210510002057p:plain

f:id:kazuhironagai77:20210510002104p:plain

Build light onlyをします。

f:id:kazuhironagai77:20210510002120p:plain

何も表示されなくなりました。

7.2 Lightmass Basics [14]の勉強

公式のDocumentにあるLightmass Basics [14]の勉強をします。

f:id:kazuhironagai77:20210510002406p:plain

以下に示した様にLightmassが何であるかについての説明が最初にありました。

f:id:kazuhironagai77:20210510002431p:plain

この事は2021-04-112021-04-19、そして2021-04-26のブログでLightingの勉強をした時に既に勉強しましたが、これとLightmass Importance Volumeはどう関係しているのでしょう。

f:id:kazuhironagai77:20210510002451p:plain

説明されていました。実際にPlayerが操作するキャラが移動する範囲は作成したLevelより小さいのでその中だけLightmassすれば良いです。その範囲を指定するのがLightmass Importance Volumeだそうです。

そんだけでした。

8. Effectのコストについての勉強

Cascadeの勉強でLODについて勉強したので今週はスキップします。

9. 魔法陣の改良

試しに以下の様な物を作成してみました。

f:id:kazuhironagai77:20210510002541p:plain

EmitterのParticle EmitterにSize By Lifeを追加しました。

f:id:kazuhironagai77:20210510002557p:plain

それで魔法陣もサイズが変化するように使用としたのですが、全くサイズが変わりません。

良く分からないので色々いじっていたらサイズが変わるようになりました。成りましたが記録してなかったのでどうやったのかが分かりません。

来週、もう一回勉強します。

10. まとめと感想

今週は以下の事を行いました。

  • Niagaraの勉強としてUE4-VFX [3]を勉強しました。
  • Cascadeの勉強としてarticle System Level of Detail (LOD) [10]を勉強しました。
  • Landscape4にもっとモンスターを配置するために色々しました。
  • バグを直しました。
  • 魔法陣の改造を少しだけしました。

来週は、

  • NiagaraCascadeの勉強の続き(特にコストについて)
  • モンスターの配置についての考察
  • 魔法陣の改良

などを行います。

11. 参照(Reference

[1] Epic Games. (n.d.-f). Niagara Visual Effects. Unreal Engine Documentation. Retrieved May 9, 2021, from https://docs.unrealengine.com/en-US/RenderingAndGraphics/Niagara/index.html

[2] Epic Games. (n.d.-d). Niagara Quick Start. Unreal Engine Documentation. Retrieved May 9, 2021, from https://docs.unrealengine.com/en-US/RenderingAndGraphics/Niagara/QuickStart/index.html

[3] gameDev Outpost. (2021b, April 9). UE4 - VFX [Video]. YouTube. https://www.youtube.com/playlist?list=PLomQNLPOWtzYXU_pRIUVVEV9uY7bjENZ5

[4] gameDev Outpost. (2020a, September 14). UE4 - Introduction to Niagara - Part 2 [Video]. YouTube. https://www.youtube.com/watch?v=fpuMkVfCRBo&list=PLomQNLPOWtzYXU_pRIUVVEV9uY7bjENZ5&index=2

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

[6] gameDev Outpost. (2020b, September 29). UE4 - Cascade to Niagara Converter [Video]. YouTube. https://www.youtube.com/watch?v=Dy_oJ23UH1A&list=PLomQNLPOWtzYXU_pRIUVVEV9uY7bjENZ5&index=3

[7] gameDev Outpost. (2020c, December 10). UE4 - Cascade to Niagara - 4.26+ [Video]. YouTube. https://www.youtube.com/watch?v=i1w2eZ4nofs&list=PLomQNLPOWtzYXU_pRIUVVEV9uY7bjENZ5&index=4

[8] gameDev Outpost. (2021a, January 30). UE4 - Niagara Learning Resources [Video]. YouTube. https://www.youtube.com/watch?v=jJa9uLmg2Q8&list=PLomQNLPOWtzYXU_pRIUVVEV9uY7bjENZ5&index=5

[9] Epic Games. (n.d.-a). Cascade Particle Systems. Unreal Engine Documentation. Retrieved May 9, 2021, from https://docs.unrealengine.com/en-US/RenderingAndGraphics/ParticleSystems/index.html

[10] Epic Games. (n.d.-g). Particle System Level of Detail (LOD). Unreal Engine Documentation. Retrieved May 9, 2021, from https://docs.unrealengine.com/en-US/RenderingAndGraphics/ParticleSystems/LODs/index.html

[11] Epic Games. (n.d.-b). Key Particle Concepts. Unreal Engine Documentation. Retrieved May 9, 2021, from https://docs.unrealengine.com/en-US/RenderingAndGraphics/ParticleSystems/Overview/index.html

[12] Unreal Engine. (2014, July 8). Intro to Cascade: Particle LODs | 11 | v4.2 Tutorial Series | Unreal Engine [Video]. YouTube. https://www.youtube.com/watch?v=ZeGUfwAlL7U

[13] Epic Games. (2014, April 16). Performance Warning No importance volume found and the scene is so large. Unreal Engine Forums. https://forums.unrealengine.com/t/performance-warning-no-importance-volume-found-and-the-scene-is-so-large/7026

[14] Epic Games. (n.d.-c). Lightmass Basics. Unreal Engine Documentation. Retrieved May 9, 2021, from https://docs.unrealengine.com/en-US/RenderingAndGraphics/Lightmass/Basics/index.html