UE4の勉強記録

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

「Unreal Engine 4.xを使用してRPGを作成する」の足りない部分を作成する 戦闘後のアイテム収得

f:id:kazuhironagai77:20210718215134p:plain

<前文>

Minimal Pairのアプリ開発についてですが、段々腹が座って来ました。有料で公開する事にします。

まず私はアメリカに10年程暮らしていましたが全く言語学を勉強した事がない素人ですので、本来ならば口出しする分野ではありません。しかしMinimal Pairを使用して音素の区別のトレーニングをやってみると、現状存在しているアプリやサイトではあんまり実用的ではありません。

以下にその理由を述べます。

  1. YouTubeにあるMinimal Pairではいつも答えが同じなため、答えを覚えてしまいます。音の区別がついたのかそれとも答えを覚えてしまったのか分からないです。
  2. 練習のためには最低でも5人くらいのNative Speakerに発音してもらう必要があります。一人ではその人の癖を先に覚えてしまいます。
  3. イギリス英語とアメリカ英語の区別がない。特にʌの音。
  4. 聞き取りのテストに使用するのか、音素が区別出来るように訓練するために使用しているのかが曖昧。

それで自分でソフトを作成する事にしました。

Minimal Pairは効果のあるトレーニングです。しかし自分で作成したソフトで遊んでみると意外と完璧でない事も分かって来ました。例えばLとRの音です。しかしこれは練習していくうちにLの音がdark LやLight L以外にもあるような気もしていてそのせいかもしれません。現状は良く分かっていません。

ただしほとんどの音に対してはかなりの効果があります。SとThについては練習すればすぐ区別がつきます。

ので公開して世間一般の評価を仰ごうと思いました。

ただし一般に公開するとなると、録音した発音に著作権が発生する可能性があります。日本における著作権の定義は、作者の思想や感情が表現された文芸・学術・美術・音楽などの表現方法に対する権利ですので、作者の思想や感情が表現するのが不可能な単なる単語の発音に著作権が存在するのかは正直疑問です。しかしアメリカでは単なる単語を書いた文字には著作権は発生しないという判決がある一方で、コンサートで録音した僅か1秒間のクラクションの音を他のMusician が無断で使用したら著作権違反で訴えられたりしています。

そういう訳で念のためにこのソフトのMinimal Pairに使用する音を、私自身でお金を払ってNative Speakerに発音してもらう必要があります。それにはお金がかかります。

最低でも5人くらいのNative Speakerに発音してもらう必要があります。ので有料にならざる得ません。

それで妥協案を考えました。Minimal Pairによる音素の区別がついているかの聞き取りのテストが出来るアプリも同時に開発してそちらは無料で公開する事にします。

例えば、

Fun、Fan

と二つの単語が表示されて音声が一回だけ流れます。その音を聞いてどちらの発音かを判断します。偶然でも50%の確率で当たるため、同じ音で5回程度連続でテストします。

Bug、Bag

Cup、Cap

Hut、Hat

Mud、Mad

のようにです。これで偶然で正解する確率は3%になります。

これで行く事にします。

レーニング用のMinimal Pairですが、現状は

ʌとæのMinimal Pair

???

Fun、Fan

となっていで、???を押すとFunかFanのどちらかの音が出ます。Funを押すとFunの発音が聞けます。Fanを押すとFanの音が聞けます。何度でもです。何度も音を聞いて???の音がどちらか分かったら答えを押します。正解なら次に進みます。不正解の場合は、もう一度練習しますか?と聞かれYesなら同じ問題が、Noなら先へ進みます。

3問ぐらいやります。例えば

Bug、Bag

Cup、Cap

です。読む人は必ず別人にします。

3問終わったら今度はテストです。

Fun、Fanのどちらが読まれます。そして正解だと思う単語を選びます。

Bug、Bagのどちらが読まれます。そして正解だと思う単語を選びます。

Cup、Capのどちらが読まれます。そして正解だと思う単語を選びます。

最後にテストの結果が表示されます。

これを一組として色々な音素のMinimal Pairを何組も作成していきます。

現状はこんな風に考えていますが、Minimal Pairを使用したもっと効果的なトレーニング方法があるならVer2.0ではそちらを採用します。この継続して作成するためにも有料にするのは必要だと判断しました。

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

<本文>

1.今週の予定

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

  • Niagaraの勉強
    • Smokeの実装
  • Cascadeの勉強
    • Sub UVの勉強
  • RPG、戦闘後のアイテム入手
    • 「20%の確率で元の世界に戻らないようにする仕組み」の実装
    • 「石像との会話」の実装
    • Warp Passの検証
    • Good Sky をLandscapeに追加するための検証
  • Dreamscape Nature : Meadows - Stylized Open World Environmentを見る

最後のDreamscape Nature : Meadows - Stylized Open World Environmentは今月、無料で配布されたアセットです。私の作成しているRPGの雰囲気に合いそうなので急遽、検証する事にしました。

2.Niagaraの勉強-Smokeの実装

公式documentのNiagara Visual Effects [1]に以下に示したようなGuideがあります。

f:id:kazuhironagai77:20210718215409p:plain

今週はこの中のRecreate the Starter Content Smoke Effect in Niagara [2]をやっていきます。

2.1 Recreate the Starter Content Smoke Effect in Niagara [2]の勉強

まず勘違いしていたんですが、このDocumentはStarter ContentにあるCascadeのSmoke EffectのサンプルをNiagaraに作り変えるTutorialでした。

それはそれでかなり重要です。というかもっと面白さが増してきました。

更にM_smoke_subUV Materialと

f:id:kazuhironagai77:20210718215432p:plain

Create a Sprite Particle Effect in Niagara [3]で作成したFX_Smoke Emitterを使用するそうです。

Create a Sprite Particle Effect in Niagara [3]って既に勉強している?

調べたら、2021-05-10のブログで

f:id:kazuhironagai77:20210718215521p:plain

と簡単に説明しただけでした。後、2021-05-24のブログで

f:id:kazuhironagai77:20210718215539p:plain

ちょっとだけ引用していました。Spriteの仕組みとはParticleにカメラに対して常に正面を向く面を貼り付けたものである。との仮説を立てていた時にそのままの内容が書かれていた文がCreate a Sprite Particle Effect in Niagara [2]にあったのでそれを引用したんでした。

それだけでした。

何で勉強しなかったんでしょう?

その理由も2021-05-10のブログで説明してありました。

f:id:kazuhironagai77:20210718215616p:plain

要するにCreate a Sprite Particle Effect in Niagara [3]に書かれている事は既に全部知っているから勉強しません。と言う事でした。

でもSub UVの使用方法は知りませんよね。やっぱりCreate a Sprite Particle Effect in Niagara [3]は勉強する必要があります。

2.2 Create a Sprite Particle Effect in Niagara [3]を先に勉強する

こっちを先に勉強します。

Create Sprite Particle Effect in NiagaraはGuideの三番目にあるもっとも基本的なTutorialです。

f:id:kazuhironagai77:20210718215639p:plain

それを今更勉強しなくちゃいけないのか?と思うとがっくりですが、Sub UVの使用方法を勉強出来るのはこのDocumentだけと思うとやる気が爆発してきます。

<Prerequisite Steps

ここでもM_smoke_subUV Materialを使用します。

f:id:kazuhironagai77:20210718215658p:plain

こいつです。

念のため、中身も見ておきます。

まずResult ノードですが先週勉強したM_cloud_lit Materialと同じでBlend ModeがTranslucentにセットされています。

f:id:kazuhironagai77:20210718215714p:plain

f:id:kazuhironagai77:20210718215721p:plain

まずBase Colorのノードから見てみます。

f:id:kazuhironagai77:20210718215741p:plain

成程、Texture Sampleで使用しているTexture、T_Smoke_Tiled_Dは以下に示したように非常に精密な雲のTextureです。

f:id:kazuhironagai77:20210718215757p:plain

一方でTexture Sampleと合成するParticle SubUVに使用されているTexture、T_Smoke_SubUVは以下に示したように8x8の雲のアニメーションを64個の絵で表したものです。

f:id:kazuhironagai77:20210718215812p:plain

T_Smoke_SubUVはアニメーションを表すために一個一個の絵自体は雑にならざる得ません。それを補うために、非常に精密な一枚絵の雲のTextureであるT_Smoke_Tiled_Dと合成しているんです。

正しT_Smoke_Tiled_Dは大きな一枚絵ですので単に合成してもT_Smoke_SubUVに描かれている64個の雲の絵とは一致しません。それを補うのがTexCoord[0] ノードです。

TexCoord[0] ノードのDetailを見るとUTilingとVTilingがそれぞれ8にセットされています。

f:id:kazuhironagai77:20210718215826p:plain

それをTexture SampleのUVsにつなげる事でTexture Sampleに使用されているTexture、T_Smoke_Tiled_Dは8x8の計64個の絵になります。

f:id:kazuhironagai77:20210718215843p:plain

これと先程のT_Smoke_SubUVと合成する事で、T_Smoke_SubUVの一個、一個の絵がT_Smoke_Tiled_Dのような精密な雲の絵に変化する訳です。

f:id:kazuhironagai77:20210718215900p:plain

簡単な例を作成しました。

T_Smoke_SubUV中の一個の絵を以下の絵とします。

f:id:kazuhironagai77:20210718215914p:plain

T_Smoke_Tiled_Dの精密な雲の絵を以下とします。

f:id:kazuhironagai77:20210718215928p:plain

この二つを単純に加算します。

f:id:kazuhironagai77:20210718215950p:plain

アニメーションのための形を維持したまま、雲が細部まで綺麗に表現されています。うん。綺麗な雲になっています。

最後の実装部分は雲に色を追加する為の物ですね。

f:id:kazuhironagai77:20210718220004p:plain

ただ実際の計算値がどうなっているのかは分かりませんね。

白い部分のRGBが1と仮定するとそれに例えばRGBが1,0,1である赤い色を掛けると白い部分が赤くなります。実際は黒い部分が赤くなるはずです。

次はOpacityの実装です。

f:id:kazuhironagai77:20210718220021p:plain

T_Smoke_SubUVのαってどんなイメージが入っているんでしょうか?

f:id:kazuhironagai77:20210718220036p:plain

背景が黒くなっているだけ。

???

分かりました。背景は黒だから値は0です。αの値が0と言う事は透明と言う事になります。

先程のBase Colorで「Particle colorを掛けたら、背景の方が雲より濃い色がついてしまうじゃないか?」の疑問が解けました。Base Colorの時点では背景に更に濃い色が付いているんです。しかしOpacityでその部分は透明にセットされます。

Clampして敢えて0と1の間の値にするのは何故なんでしょう?別に1以上なら完全に不透明になるだけじゃないでしょうか?

最後のノードがDepth Fadeです。

f:id:kazuhironagai77:20210718220053p:plain

このノード、先週の勉強で雲に影をつけるなら外さないといけないノードとして紹介されていたやつです。

公式のdocumentであるDepth Expressions [4] によると

f:id:kazuhironagai77:20210718220126p:plain

と、このノードの機能が説明されていました。

醜い線ってどんな線?と思ったらしっかり図でも説明されていました。

f:id:kazuhironagai77:20210718220142p:plain

この赤い不透明の球と緑の透明な球の境目に出来ている線が醜い線だそうです。

これがDepth Fadeを使用すると

f:id:kazuhironagai77:20210718220155p:plain

こうなるそうです。

うーん。このノードがないと困る時も出て来そうです。

実際、先週、勉強したParticle Shadow Castingに不透明なActorが重なったらどうなるんでしょうか?確認する必要がありますね。後でやります。

これでM_smoke_subUV Materialの実装方法については大体は理解しました。

<Project Setup

ここはNiagara専用のFolderの作成方法やMaterialをcopyしてNiagara用のFolderに移す方法などが説明されていました。本当の初心者以外はスキップして良い部分です。当然スキップします。

<Create the System and Emitter

Simple Sprite Burst Emitterを追加したNiagara systemを作成しています。何でこんなに丁寧に説明しているのかと思ったんですが、良く考えたらこのTutorial、Niagara systemのTutorialの一番最初のヤツでした。そりゃ丁寧に説明しますよね。

f:id:kazuhironagai77:20210718220227p:plain

Documentの説明通りに作成しました。

ここも今の私が学ぶ事はありませんね。

<Change Renderer Settings

ここで初めてSubUVをmaterialに使用した場合のSprite Rendererの設定方法が学べます。

f:id:kazuhironagai77:20210718220257p:plain

まずM_smoke_subUVをmaterialにセットします。

すると以下の様なイメージがPreviewに表示されます。

f:id:kazuhironagai77:20210718220316p:plain

これをSubUV用のRenderingに変換する為にSub Image Sizeのxとyにそれぞれ8をセットします。

f:id:kazuhironagai77:20210718220330p:plain

そしてSubUV Blending Enabledにチェックを入れます。

するとReviewのイメージが以下のように変化します。

f:id:kazuhironagai77:20210718220344p:plain

所でSubUV Blending Enabledは何を管理するParameterなんでしょうか?

公式DocumentのNiagara Renderers [5]によると

f:id:kazuhironagai77:20210718220359p:plain

と書かれています。

同じ様な形の雲をBlendしても違いは分かりません。後でもっと分かり易いMaterialを作成して試してみます。

そしてSmoke SystemをLevel上に配置します。

f:id:kazuhironagai77:20210718220413p:plain

あれ?何も表示されません。

念のためにWireFrameに変えて見ましたがSpriteが生成されていませんね。

f:id:kazuhironagai77:20210718220428p:plain

なんでReviewとイメージが違うんでしょうか?

取りあえずこの問題は無視して先に進みます。

<Edit the Emitter Update Group Settings

ここではEmitter Update Groupの設定をします。

ここでする事はSpawn Burst Instantaneous Moduleを外してSpawn Rate Moduleを追加します。

f:id:kazuhironagai77:20210718220447p:plain

そしてSpawn Rate ModuleのSpawn Rateを50にセットします。

f:id:kazuhironagai77:20210718220500p:plain

こんなに雲の色が濃くなりました。

f:id:kazuhironagai77:20210718220515p:plain

一秒間に50個のSpriteを生成してその雲の寿命が2秒とすると少なくとも1秒間は50枚の雲が重なっている計算になります。雲の色が上記の様に濃くなるのは当然でしょう。

Level上に配置したSmoke Systemには何も表示されません。

f:id:kazuhironagai77:20210718220605p:plain

この理由は直ぐ分かりました。ReviewのようにLoopしないので、一回しか雲を生成していなかったんです。その時を逃したら上記のような何もないイメージしか見れません。

次にEmitter State Moduleの設定を以下の様に変更しました。

f:id:kazuhironagai77:20210718220619p:plain

雲が消えなくなりました。

f:id:kazuhironagai77:20210718220632p:plain

このParameterの中でLoop Durationだけ意味が分かりません。

と言うのは、

Loop DurationはParticleをSpawnする時間を指定しているはずです。

Loop BehaviorをOnceにセットしてテストすると4秒後に雲が消えます。これは2秒間雲がSpawnされてそれぞれの雲の寿命が2秒であるため、最後に生成された雲の寿命が尽きるのは4秒後だからです。

次にLoop Behaviorをinfiniteにセットします。

これって結局Loop Durationがinfiniteになったと言う事だと思うんですが。

そうなるとLoop Durationの値をセットする意味ないですよね。

公式DocumentのEmitter Update Group [6]にはLoop BehaviorとLoop Durationの機能は以下の様に説明されています。

f:id:kazuhironagai77:20210718220648p:plain

f:id:kazuhironagai77:20210718220655p:plain

うん。やっぱりこの説明でもLoop Behaviorをinfiniteにセットした場合は、Loop Durationがinfiniteになったと解釈出来ます。

CursorをLoop Behaviorに重ねた時に表示される説明文が公式DocumentのEmitter Update Group [6]と違っていたのでそちらも読んでみます。

f:id:kazuhironagai77:20210718220738p:plain

Infiniteの場合は、Loop Durationで指定した時間が過ぎたらすぐに次のLoopを開始するとあります。つまりLoop Durationで指定した時間が2秒でも1秒でもその時間が過ぎたらすぐに最初の状態からやり直す訳です。

成程、ある非常に特殊な条件ならばLoop Durationで指定した時間によって何らかの差が出る可能性もありますね。この説明なら。

この辺で納得しておきます。

因みにCursorをLoop Durationに重ねた時に表示される説明文は以下のものでした。

f:id:kazuhironagai77:20210718220759p:plain

0の指定は出来ないというのは豆知識として覚えておきます。

<Particle Spawn Group Settings

この節では主に3つの事を行っています。

  • Initialize Particle ModuleLife Timeの値の調節
  • Initialize Particle ModuleSpriteの位置、角度、そしてサイズの調節
  • SubUVのイメージを全部使用するためのSubUV moduleの追加と設定

最後の「SubUVのイメージを全部使用するためのSubUV moduleの追加と設定」こそが私が知りたい事でこれを最初にやってみます。と言うのはこのDocument通りにやるとSubUV moduleを追加した時には既にspriteがいろんな箇所から発生して実際にSubUVの影響がどうなっているのか良く分からなくなってしまうからです。

以下の様なやり方が説明されていました。

まずSub UV Animation Moduleを追加します。

f:id:kazuhironagai77:20210718220838p:plain

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

f:id:kazuhironagai77:20210718220851p:plain

Documentでは赤で囲った部分の値を変更して上記の値にしてくださいと書かれていましたが、私のはSub UV Animation Moduleを追加した段階で既にそうなっていました。

はい。

結果です。

f:id:kazuhironagai77:20210718221311p:plain

f:id:kazuhironagai77:20210718221319p:plain

雲のイメージは全く変化していません。

うーん。分からん。

ひょっとするとLife Timeの値が影響しているのかもしれません。それを変更してみます。

f:id:kazuhironagai77:20210718221335p:plain

Document通りの設定にしました。

何も変化しません。

もうDocument通りにやってみます。

今度はSpriteのサイズを変更します。

f:id:kazuhironagai77:20210718221351p:plain

しました。

次は回転を追加します。

f:id:kazuhironagai77:20210718221407p:plain

もう雲のイメージが回転し始めてSubUVが効いているのか分からなくなりました。

f:id:kazuhironagai77:20210718221655g:plain

後、ここでDocumentの方で2つの違う値が載っています。多分レアレスミスでしょうね。

f:id:kazuhironagai77:20210718221733p:plain

雲を移動させるために初速度を追加します。

Add Velocity Moduleを追加して

f:id:kazuhironagai77:20210718221752p:plain

以下の設定にします。

f:id:kazuhironagai77:20210718221806p:plain

この辺は基本なのでサラッといきます。

今度はSpriteが発生する場所を変更します。

Sphere Moduleを追加します。

f:id:kazuhironagai77:20210718221822p:plain

このModuleは球を指定してその球の中でSpriteをSpawnするそうです。

f:id:kazuhironagai77:20210718221837p:plain

今回は64にしました。

このModule自体も調べたら結構面白そうですが、なんせSub UV Animation Moduleの使用方法も不明な状態では調べる気が起きません。

<Particle Update Group Settings

最後ですがForceを追加しているだけです。

f:id:kazuhironagai77:20210718221922p:plain

f:id:kazuhironagai77:20210718221929p:plain

もう一つありました。このNiagara systemをAssetとしてSaveしていました。

これでassetにしておいてRecreate the Starter Content Smoke Effect in Niagara [2]で使用する訳ですね。

f:id:kazuhironagai77:20210718221946p:plain

うーん。SubUVについて少しは勉強になりましたが使用方法が判明する所まではいかなかったです。

2.3 SubUVの考察など

SubUVのそれぞれのイメージにアクセスするにはどうしたら良いのかが知りたいですがそれが分かりません。

そしたらどうもSubImage Index Moduleがそれを担当しているらしいです(公式のDocumentのSubImage Index [8]から)。ところがNiagara systemではSubImage Index Moduleはどうもないらしく、代わりにParameterとして存在しているみたいです。

実際に調べて見ると

f:id:kazuhironagai77:20210718222007p:plain

f:id:kazuhironagai77:20210718222016p:plain

そのようです。

それでgameDev Outpost氏のUE4 - Niagara Flipbook - Part 2 – Smoke [7]にSub Image Indexの使用方法が載っていたのでそれを勉強します。

ところで今回使用したSub UV Animation Moduleは何をしているんでしょうか?

公式DocumentのParticle Spawn Group [9]には以下の説明がされていました。

f:id:kazuhironagai77:20210718222046p:plain

うーん。と言う事はSub UV Animation ModuleでもSub UVのそれぞれのイメージを表示はしていたんでしょうか?

ひょっとしてSpawn Rateを50にセットしそれぞれのSpriteの寿命が2秒だったから100個の別々なイメージを保持しているSpriteが重なり合っていたので結果として同じイメージになっていたんでしょうか?

確認します。

Create a Sprite Particle Effect in Niagara [3]でやったのと同じ方法で、Simple Sprite Burst Emitterを含むNiagara systemを作成します。

Sprite RendererのMaterialをM_smoke_subUVに変更します。

更にSprite RendererのSub Image sizeを8,8にします。

次にParticle Update にSub UV Animation moduleを追加します。

f:id:kazuhironagai77:20210718222148g:plain

アニメーションになっていましたね。

Sub UV Animation moduleのNode Graphicsを見たら以下の様にSub Image Indexが沢山使用されていました。

f:id:kazuhironagai77:20210718222215p:plain

かなり回り道をしながらですが少しはSub UVの使用方法が分かって来ました。

2.4 UE4 - Niagara Flipbook - Part 2 – Smoke [7] の勉強

気が付いたらNiagaraだけでかなり時間を使ってしまったので今週は、Sub Image Indexの使い方だけ勉強します。

まずSubUVの最初のImageがSpriteに表示されるようにします。

Particle Spawn GroupにSet new or existing parameter directly Moduleを追加します。

f:id:kazuhironagai77:20210718222243p:plain

こんな感じです。

f:id:kazuhironagai77:20210718222319p:plain

Set Parametersの右端の+ボタンを押してSub Image Indexを追加します。

f:id:kazuhironagai77:20210718222332p:plain

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

f:id:kazuhironagai77:20210718222346p:plain

そしてこの数字を弄ると

f:id:kazuhironagai77:20210718222403g:plain

SubUVのイメージが変わります。

うん。変わるんだけとT_Smoke_Tiled_Dのイメージは全く動いていないのも分かってしまいましたね。

残りは来週やる事にします。

3.Cascadeの勉強-Sub UVの勉強

3.1 CascadeにおけるSub UVの使用方法

今週はCascadeにおけるSub UVの使用方法を勉強します。

で、Niagaraで一応Sub UVの設定方法を理解したので適当にやってみます。

f:id:kazuhironagai77:20210718222459g:plain

出来ました。

作り方を説明します。

Particle systemから新しいParticle systemを作成します。

f:id:kazuhironagai77:20210718222526p:plain

Spriteが移動していると見にくいので、Initial Velocity Moduleを外します。

f:id:kazuhironagai77:20210718222540p:plain

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

Initial Size Moduleを弄ってSpriteのサイズを大きくします。

f:id:kazuhironagai77:20210718222601p:plain

f:id:kazuhironagai77:20210718222607p:plain

Required ModuleのMaterialにセットされているMaterialをSub UV用のMaterialに変更します。(見えにくいのでBack Ground Colorを白に変更しました。)

f:id:kazuhironagai77:20210718222623p:plain

Material はNiagaraで使用したM_smoke_subUVを使用しました。

一個のイメージだけを写すためにSub UVの値を8、8にセットします。

f:id:kazuhironagai77:20210718222641p:plain

Sub UVはRequired Module内にありました。

f:id:kazuhironagai77:20210718222655p:plain

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

これをAnimationにする為にSub Image Index Moduleを追加します。

f:id:kazuhironagai77:20210718222709p:plain

全てのイメージを表示するためにSub Image Index Moduleの1のOut Valに63をセットします。

f:id:kazuhironagai77:20210718222723p:plain

f:id:kazuhironagai77:20210718222732p:plain

はい。

f:id:kazuhironagai77:20210718222753p:plain

あれ?

先程やった時は出来たんですが今回はイメージが全く変化しません。

先程やった奴と比べたら、先程のはRequired ModuleのInterpolation Methodの値がLinearになっていました。

f:id:kazuhironagai77:20210718222807p:plain

直しました。

それでもAnimationになりません。

f:id:kazuhironagai77:20210718222822p:plain

むむむ。

あ、Spawn ModuleのSpawn Rateが初期値のままでした。

f:id:kazuhironagai77:20210718222841p:plain

一秒間に20回も同じ位置でSpriteを生成していたら全部が重なり合って一つのイメージに収束してしまいます。

Spawn ModuleのSpawn Rateの値は0にしてBurstの値を5に変更しました。

f:id:kazuhironagai77:20210718222857p:plain

これで5個のSpriteが同時に同じ場所で生成されるはずです。

f:id:kazuhironagai77:20210718222932g:plain

SubUVのアニメーションが出来ました。

微調整をします。

次のLoopが始まるまでに少し間がほしいのでLoop Delayの値を変更します。

Loop DelayではなくてEmitter Delayでした。場所はRequired Module内にありました。

f:id:kazuhironagai77:20210718223001p:plain

2秒に変更しました。

Smokeの動きも少し速い気がします。Life timeを長くしてみます。

Life Time ModuleのLife timeの値を2秒にしました。

f:id:kazuhironagai77:20210718223021p:plain

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

f:id:kazuhironagai77:20210718223034g:plain

こんだけ出来れば十分です。

3.2  先週作成したParticle Shadow CastingのDepth Fade Nodeについて

先週のブログ

f:id:kazuhironagai77:20210718223113p:plain

Depth Fade Nodeを使用すると影が出来ないので外す事を習いました。

先程、「2.2 Create a Sprite Particle Effect in Niagara [3]を先に勉強する」で勉強しましたが、公式のdocumentであるDepth Expressions [4]で

f:id:kazuhironagai77:20210718223128p:plain

Depth Fade Nodeが無いと見た目が結構やばくなる事を勉強しました。

この問題は先週作成したParticle Shadow Castingは回避しているんでしょうか?

それを確認します。

Third Person Characterをそのまま突っ込ませてみました。

f:id:kazuhironagai77:20210718223153p:plain

別に普通です。

うーん。もう少し深く知りたいですが今の知識でDepth Fade Nodeの中の実装方法を理解するのは無理です。今回はこの問題についてはこの辺で諦めるしかなさそうです。

4.Ch4_3の確認

そういえば先週、Ch4_3 がオカシクなって途中で止めたんでした。すっかり忘れていました。

久しぶりにVisual Studio を開いてそのままにしてBlogを書いていたらVisual Studioの挙動がおかしくなって途中で中止したんでした。

Buildしてみました。

f:id:kazuhironagai77:20210718223218p:plain

大丈夫そうですね。

一応ゲームもPlayして確認します。

普通に出来ました。

ただし一個バグを見つけてしまいました。

f:id:kazuhironagai77:20210718223234p:plain

BlockからPlayerの操作するキャラが出ているのにMonsterが消滅しません。後でこのバグを検証します。

5.RPG、戦闘後のアイテム入手-「20%の確率で元の世界に戻らないようにする仕組み」の実装

はい。これはほとんど先週の検証で出来ています。

先週、検証したRPGGameModeBPのBranchを追加したところに更にBranchを追加します。

f:id:kazuhironagai77:20210718223258p:plain

これで5回に1回は戻らなくなるはずです。

f:id:kazuhironagai77:20210718223315p:plain

戦闘を何回かすると元のLevelに戻らなくなりました。

骸骨が回っていると3D 酔いが凄いです。消します。

Level内に配置されているActorに何かをする時はRPG Game Mode BPにEvent Dispatcherを作成してそれにやらせると簡単です。

RPG Game Mode BP内にEvent Dispatcherを作成します。

f:id:kazuhironagai77:20210718223342p:plain

Delete Skull BPと名付けました。

Battle Field のLevel BP内で以下に示した様にBindさせます。

f:id:kazuhironagai77:20210718223356p:plain

これで空中に浮遊している骸骨は消えるはずです。

戦闘後にアイテムがもらえる時はこのDispatcherを呼び出します。

f:id:kazuhironagai77:20210718223413p:plain

テストします。

f:id:kazuhironagai77:20210718223427p:plain

骸骨が消えました。

先週作成したWidgetを追加します。

f:id:kazuhironagai77:20210718223444p:plain

RPG Game Mode BPから追加しました。

f:id:kazuhironagai77:20210718223503p:plain

Battle Field のLevel BPから追加するのとどっちが整合性があるんでしょうか?分かりません。

以下の様になりました。

f:id:kazuhironagai77:20210718223518p:plain

Widgetを消すボタンが必要ですね。作成します。

f:id:kazuhironagai77:20210718223536p:plain

f:id:kazuhironagai77:20210718223547p:plain

しました。

テストしたら普通にこのWidgetが消えました。

最後にですが、イラストの紋章が気に入りません。

f:id:kazuhironagai77:20210718223602p:plain

f:id:kazuhironagai77:20210718223607p:plain

直します。

f:id:kazuhironagai77:20210718223622p:plain

直しました。

6.RPG、戦闘後のアイテム入手-「石像との会話」の実装

6.1 「石像との会話」の実装方法について

こんな感じで考えています。まずNPC_Person BPに似たStone‗Statue BPを作成します。

NPCとの大きな違いはTrigger boxは外付けでStone‗Statue BPの変数の一つがTrigger Boxになります。残りの仕組みは同じにします。

  9体の石像全て作成せずにenumで対応します。

Exclamation markの実装ですが

f:id:kazuhironagai77:20210718223649p:plain

f:id:kazuhironagai77:20210718223657p:plain

こんな複雑な事をしなくてもBoxに侵入したら反応するでOKだと思います。

NPCの製作でスパゲティコードになってしまった原因は、RPG Game Mode BP内のMy Place For Event変数の値にNPCはまとめて一つにしなかった事です。

ので以下のようにそれぞれのNPCに対して全部別の対応を作成する必要が出来てしまいました。

f:id:kazuhironagai77:20210718223713p:plain

石像との会話では開くWidgetも全部同じにします。

f:id:kazuhironagai77:20210718223727p:plain

そしてそのWidgetの中でセリフやイメージを変えるようにします。

ただし、この方法を採用した場合はどの石像と話しをしたのかを記憶する変数が必要になります。それはRPG Game Mode BP内に作成する事にします。

取りあえずここまで制作します。

6.1 Stone Statue BPの作成

Stone Statue BPはActor クラスから作成しました。

Static Mesh、TextRender、そしてPoint Lightを追加します。

f:id:kazuhironagai77:20210718223749p:plain

TextRenderはExclamation markを表しPoint Lightがそれを照らします。

f:id:kazuhironagai77:20210718223806p:plain

ただしそれはその石像と会話出来る時だけです。

更に変数としてTrigger BoxをInstance Editableにして追加します。

f:id:kazuhironagai77:20210718223819p:plain

Trigger Boxの名前はStone Statue Talkにしました。

実際のTrigger Boxは別にLevel 内に静的に配置します。それをStone Statue TalkにAssignします。

Trigger Boxに侵入したらExclamation markが光ります。

f:id:kazuhironagai77:20210718223835p:plain

これでテストします。

2体のStone Statue BPを配置しました。

f:id:kazuhironagai77:20210718223848p:plain

それぞれのStone Statue Talkは別のTrigger BoxにAssignされています。

f:id:kazuhironagai77:20210718223903p:plain

f:id:kazuhironagai77:20210718223910p:plain

Boxに侵入する前です。Exclamation markは見えません。

f:id:kazuhironagai77:20210718223933p:plain

右のBoxに侵入しました。

右の石像のExclamation markが発現しました。

f:id:kazuhironagai77:20210718223950p:plain

予測した通り、左の石像のExclamation markは反応していません。

6.2 石像の種類を示すEnumを作成する。

はい。出来ました。名前はE_StoneStatueとしました。

f:id:kazuhironagai77:20210718224010p:plain

名前ですがそれぞれの石像のStatic meshの名前をそのまま入れました。

後で訳わからなくなるのを防ぐためです。

f:id:kazuhironagai77:20210718224025p:plain

6.3 Stone Statue BPの表示する石像を選択出来る様にする

Stone Statue BP内に先程作成したE_StoneStatueから作成した変数Stone Statue Nameを追加します。

f:id:kazuhironagai77:20210718224047p:plain

そのまま実装するとまたスパゲティコードになってしまうので関数を作成します。名前はReturn Statue Meshとします。

f:id:kazuhironagai77:20210718224105p:plain

E_StoneStatueの要素から石像のStatic meshを選択して返す関数です。

その関数を使用して石像の種類を変更出来るようにしました。

f:id:kazuhironagai77:20210718224227p:plain

テストします。

左の石像はBetrayal Statueになるように設定しました。

f:id:kazuhironagai77:20210718224242p:plain

なっていますがサイズが全く違います。サイズの設定も必要です。

f:id:kazuhironagai77:20210718224257p:plain

それぞれの石像のサイズも追加します。

Return Statue Mesh()関数の返し値にそれぞれの石像のscaleの値も返すようにします。

f:id:kazuhironagai77:20210718224311p:plain

それぞれの石像のScale値はBattle Field mapに配置されているそれぞれの石像のScale値をそのまま使用します。

f:id:kazuhironagai77:20210718224325p:plain

例えばBetrayal Statueならば

f:id:kazuhironagai77:20210718224342p:plain

X=3、y=3、そしてz = 3 です。

f:id:kazuhironagai77:20210718224358p:plain

テストします。

f:id:kazuhironagai77:20210718224413p:plain

良い感じです。ほかの石像も試してみます。

Statue 01 です。

f:id:kazuhironagai77:20210718224427p:plain

げ。向きが逆です。Rotationの値も設定しないといけないようです。

f:id:kazuhironagai77:20210718224459p:plain

直しました。

f:id:kazuhironagai77:20210718224529p:plain

他の石像も調べます。

f:id:kazuhironagai77:20210718224546p:plain

5番目の石像であるSM_Skeleton Headです。

f:id:kazuhironagai77:20210718224603p:plain

今度は高さの変更が必要です。

f:id:kazuhironagai77:20210718224632p:plain

はい。追加しました。

こうなりました。

f:id:kazuhironagai77:20210718224648p:plain

この骸骨、SM_Skeleton Headは20倍のScaleなんでちょっと雑な作りに見えますね。

f:id:kazuhironagai77:20210718224705p:plain

f:id:kazuhironagai77:20210718224713p:plain

f:id:kazuhironagai77:20210718224724p:plain

f:id:kazuhironagai77:20210718224737p:plain

やっと出来ました。

6.4 石像との会話用のWidgetを作成する。

先にWidgetを作成します。このWidgetは9体全ての石像に対応しています。

Oldman Welcome ウィジェットをコピーして改良して作成する事にします。

f:id:kazuhironagai77:20210718224815p:plain

流石に今から9体の石像の絵を描いている時間もアイデアもありません。以下のデザインで行きます。

f:id:kazuhironagai77:20210718224830p:plain

勿論後で差し替えます。

それぞれの石像のBGIは以下の関数で変更します。

f:id:kazuhironagai77:20210718224844p:plain

WidgetのImageにTextureを動的に指定する場合、Make Slate Brushノードを使用する必要がありました。

f:id:kazuhironagai77:20210718224858p:plain

すっかり忘れていました。

これでそれぞれの石像で別なBGIを表示するwidgetは出来たはずです。

テストします。

6.7 石像との会話用のWidgetを表示するための実装をする

これが結構面倒くさいはずです。

丁寧にやっていきます。

まずEnumのEPlaceForEventsに石像との会話用の要素を追加します。

f:id:kazuhironagai77:20210718224919p:plain

PE_TalkStoneStatueとします。

Buildします。

f:id:kazuhironagai77:20210718224933p:plain

当たり前ですが成功しました。

思い出したんですがRPGGameModeのEnumを書き変えた時は、その新しい要素がBPまで反映されるには一端UE4Editorを閉じる必要がありました。多分、.24以降ならそんな問題はなかったはずですが。

UE4Editorを開きなおしたらPE_TalkStoneStatueがBPからも使用出来るようになっていました。

f:id:kazuhironagai77:20210718224948p:plain

StoneStatueBPでTrigger Boxに侵入した時にRPGameModeBP内の変数、My Place For Eventsの値がPE_TalkStoneStatueになるようにセットしました。

勿論、Trigger Boxから退散した時はMy Place For Eventsの値がPE_Noneになるようにセットします。

f:id:kazuhironagai77:20210718225002p:plain

今回の石像との会話はもう一個変数が必要です。

RPGameModeBP内にそれを作成します。EnumのE_Stone Statue タイプの変数です。

f:id:kazuhironagai77:20210718225016p:plain

名前はStone Statue Talkingとしました。

この変数もStoneStatueBPでTrigger Boxに侵入した時に値が変わります。

f:id:kazuhironagai77:20210718225030p:plain

これで準備は出来ました。

ThirdPersonCharacterのBPからStoneStatueBPに侵入した時に開くwidgetをセットします。

RPGameModeBP内の変数、My Place For Eventsの値がPE_TalkStoneStatueだった時、

f:id:kazuhironagai77:20210718225043p:plain

W_StoneStatueTalkウィジェットを開くようにします。

f:id:kazuhironagai77:20210718225056p:plain

これで出来たはずです。

テストしてみましょう。

一番目の天使の石像に話しかけました。

f:id:kazuhironagai77:20210718225135p:plain

一番目のBGIが表示されています。

文章はまだ作成していないのでNPC_Oldmanのままです。これは次に直します。

今度はとなりの石像に話してみます。

f:id:kazuhironagai77:20210718225150p:plain

この石像は9番目の石像でした。

BGIは正確に表示されています。

6.8 石像との会話を作成する。

それぞれの石像の会話を作成します。と言ってもセリフ中身は後で考えます。今週は取りあえず動く事だけ確認します。

先週の検討では、石像との会話は簡単でNPCのような複雑な仕組みは要らないと結論づけました。しかしNPCで作成した会話のシステムは大変優れているのでそれをそのまま使用する事にしました。

以上の事を踏まえて以下のセリフを作成しました。

f:id:kazuhironagai77:20210718225213p:plain

1のセリフの石像の名前の部分だけ変えて9種類作成しました。

これをWidgetから呼び出します。

9柱の石像でそれぞれセリフが違うので関数を作成して呼び出します。

f:id:kazuhironagai77:20210718225226p:plain

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

f:id:kazuhironagai77:20210718225241p:plain

後はAnswer ButtonもW_StoneStatueTalkウィジェット様に作り直しました。

f:id:kazuhironagai77:20210718225254p:plain

Answer Buttonは以下の実装部でParent Widgetを呼ぶ時にそのWidgetが正確に親Widgetである必要があります。

f:id:kazuhironagai77:20210718225309p:plain

ので親のWidgetのタイプだけAnswer Button ウィジェットが必要になります。

テストします。

f:id:kazuhironagai77:20210718225322p:plain

はい。指定したセリフが表示されています。はいといいえの文字の配置がおかしいですね。これは後で直します。

「はい」ボタンを押すと

f:id:kazuhironagai77:20210718225334p:plain

となりました。

「いいえ」ボタンでは

f:id:kazuhironagai77:20210718225350p:plain

こちらも正確に表示されました。

6.9 Itemの受け取り方法について

Item受け取り用のWidgetは別に作成します。のでそのWidgetをどうやって開けるかが問題になります。

「汝に褒美を与える。」と言った後に、そのWidgetが開けるようになると良いのですが、このセリフはData Tableで管理しているためBPで干渉する事が出来ません。

f:id:kazuhironagai77:20210718225416p:plain

そこで以下の様にしました。

「汝に褒美を与える。」と石像が答えた後に、「褒美を受け取る」ボタンを表示させます。

f:id:kazuhironagai77:20210718225430p:plain

このボタンをクリックするとRewardと書かれたコメントを表示するように指示が出ます。

f:id:kazuhironagai77:20210718225443p:plain

しかし実際には、このコメントがData tableから返されるや否や、以下に示したように、BranchのTrueに送られます。(W_StoneStatueTalkウィジェットのConversation Start Event内の実装です。)

f:id:kazuhironagai77:20210718225457p:plain

この後でItemを得るWidgetを開けば良いはずです。

6.10 Item受け取りのためのWidgetの作成

Itemを受け取るWidgetは最終的には複雑になるかもしれませんが今回は非常に簡単にします。

名前はGet Items ウィジェットにしました。

f:id:kazuhironagai77:20210718225517p:plain

まず、上のコメントですが、褒美の種類と数が変えられるようにします。

どの石像に話しかけたのかを確認します。

f:id:kazuhironagai77:20210718225530p:plain

Angle Statue 02の場合は、Data TableのReward Enumから褒美の種類と数を決定します。

f:id:kazuhironagai77:20210718225545p:plain

Data TableであるReward Enumは以下の様な作りになっています。

f:id:kazuhironagai77:20210718225557p:plain

Reward がItemの種類、NumberがそのItemの個数を表しています。

その中からRandomに一個選びます。

f:id:kazuhironagai77:20210718225611p:plain

選ばれた値をGet Items ウィジェットの変数であるReward とNumberに保存します。

f:id:kazuhironagai77:20210718225624p:plain

これらの値は後で、戻るボタンを押した時に使用するからです。

RewardとNumberの値をAppendノードで合成して文章にします。それを別の変数であるCommentに保存します。

f:id:kazuhironagai77:20210718225638p:plain

そのComment変数に保持されているTextを先程のコメント欄に表示します。

f:id:kazuhironagai77:20210718225651p:plain

こんな感じです。

f:id:kazuhironagai77:20210718225706p:plain

次にボタンの機能を追加します。

f:id:kazuhironagai77:20210718225719p:plain

ボタンが持つ機能は二つあります。一つ目は貰ったアイテムを道具袋に追加する事です。そして2つ目は元のLevelに戻る事です。

貰ったアイテムを道具袋に追加する方から実装します。

最初のノードはReward変数に保持されているアイテムの名前が本当にData Tableのアイテムにあるのか確かめます。

f:id:kazuhironagai77:20210718225732p:plain

これはItemはData Tableで管理しているので常にスペルミスをする可能性があるからです。最終的にはenumに変更するのかどうか、今の時点では不明ですが、Data Tableで管理しているため、微妙なゲームバランスの調整は出来るようになっています。

次のノードでNumber変数に保持されている値だけLoopします。勿論Loopの中でReward変数内に保持されているItemをRPG Game Instance のArrayであるItemsに要素として追加します。

f:id:kazuhironagai77:20210718225746p:plain

これで道具袋にもらったアイテムが追加されたはずです。

次に元のLevelに戻る実装を作成します。

f:id:kazuhironagai77:20210718225800p:plain

元のLevel名はRPG Game Instance BP内の変数、Map Name Before Battleに保持されています。それを利用して元のLevelに戻ります。

だたし、今テスト用にMap1に配置されているStone Statue BPは元々、元のLevelにいます。

f:id:kazuhironagai77:20210718225815p:plain

のでTestのために元のLevelに戻る実装は外して、同じLevel内でWidget画面から普通のPlay画面に戻る別の実装をおこないます。

まずこのWidgetを消します。

f:id:kazuhironagai77:20210718225837p:plain

これ最初にやったらこの後に続くノードは実行されないんじゃないの?と疑問に思うんですが何故か実行はされています。まあテスト用ですし、あまり深くは考えません。

その後で、Player の操作するキャラを固定していた機能を解除したり、Play画面でカーソルが消える事が無いようにします。

f:id:kazuhironagai77:20210718225853p:plain

これでテストします。

褒美は回復薬が5個です。

f:id:kazuhironagai77:20210718225909p:plain

「戻る」ボタンを押すとPlay画面に戻りました。

f:id:kazuhironagai77:20210718225924p:plain

道具袋を開けると回復薬が5個入っています。

f:id:kazuhironagai77:20210718225938p:plain

成功ですね。

回復薬の数もランダムになっている様です。

f:id:kazuhironagai77:20210718225954p:plain

f:id:kazuhironagai77:20210718230003p:plain

今週はここまでで、一端中止して検証します。

自分で発見しておいてあれですが、Preparation and Implementation Programmingの効果は凄いです。本当に先週、調査した箇所まで実装出来るとは。信じられない効率です。

6.10 石像との会話とアイテムの入手 -機能の追加と改良点-

石像との会話ではWidgetに表示する石像のイラストは全部描き直す必要があります。

f:id:kazuhironagai77:20210718230028p:plain

石像との会話では、実装部分はこれで良いと思います。特に何処かを改良する必要はないと考えています。

唯一直す必要がある箇所は、返事のボタンに表示されるTextです。

f:id:kazuhironagai77:20210718230044p:plain

何で2行に渡って書かれているんでしょうか?謎です。これは後で直します。

石像からのアイテムの入手手順ですが、

Get Item ウィジェットが開き、

f:id:kazuhironagai77:20210718230058p:plain

その中でどの石像からItemをもらうのかによって対応を変化しています。

f:id:kazuhironagai77:20210718230112p:plain

これは今思ったんですが、どの石像からItemをもらうのかによって開くWidgetを変えた方が色々なItemや武器を貰う事が出来るようになります。

のでそのように改良します。これは来週やります。

後、戦闘中に石像と会話が出来ないような実装を作るのを忘れていました。これも来週追加します。

もう1つコードを書いている間に思い付いた事を書いておきます。

9柱の石像全てと最初から会話出来るのではなく、ほとんどの石像が最初は封印されているようにします。物語が進むにつれて段々、石像と会話が出来るようになるようにします。

7.RPGWarp Passの検証

Warp passはWarpをするのに必要なItemとします。

Warp Passには種類があります。

Warp Passの欠片:10個でWarp Passが作れる。ただし魔法合成屋に行く必要がある。

Warp Pass:普通のWarp Pass

青いWarp Pass:ある特別なWarp Spotは移動するのに青いWarp Passが必要。

赤いWarp Pass:普通のWarp Spotに赤いWarp Passを使用すると別な場所に行ける。

黄金のWarp Pass:効果は不明。世界に一個だけある金で出来たWarp Spotで使えるらしい。

銀のWarp Pass:死者の国に行けるらしい。2枚あれば死者を生き返らせる事も出来る?

銅のWarp Pass:天使の国、や悪魔の国、そして竜の国など人間が通常は行く事が許されない場所にいけるらしい。

こんなんでどうでしょうか?

8.Good Sky Landscape 4に追加するための検証

Good SkyをLandscape4 に追加出来るのは来週以降になるのは確実なので今調べても無駄になってしまいます。ので今週はパスします。

9.Dreamscape Nature : Meadows - Stylized Open World Environmentを見る

Epic Games社の今月のFree AssetであるDreamscape Nature : Meadows - Stylized Open World Environmentが今制作中のRPGの世界観に合いそうなのでサラッとですが見てみます。

f:id:kazuhironagai77:20210718230201p:plain

Demoから開いて見ます。

8.1 Demoの見学

f:id:kazuhironagai77:20210718230222p:plain

f:id:kazuhironagai77:20210718230232p:plain

かなりToon調で良いですね。

f:id:kazuhironagai77:20210718230248p:plain

木の作りが良いです。Toon調ですが葉の付き方が本物の木の様なもっさり感があります。

f:id:kazuhironagai77:20210718230304p:plain

水もToon調ですね。Water simulationを使用しているんでしょうか?

f:id:kazuhironagai77:20210718230319p:plain

滝の部分ですがToon調にかなり改良している感じです。

f:id:kazuhironagai77:20210718230334p:plain

滝の周りには霧も立ち込めています。

f:id:kazuhironagai77:20210718230349p:plain

岩はかなり単純な作りのようです。

所々に以下に示した様な透明な板があります。

f:id:kazuhironagai77:20210718230425p:plain

FX_fog_Cardと書かれています。何をしているのかは不明です。

Landscapeですが丸いです。

f:id:kazuhironagai77:20210718230439p:plain

こんな作り方も出来るんですね。

黄土色の部分を選択したら以下の様にBPと表示されました。

f:id:kazuhironagai77:20210718230624p:plain

ひょっとするとLandscapeは使用していないのかもしれません。

f:id:kazuhironagai77:20210718230640p:plain

うーん。このTextureの繰り返し感はLandscapeを使用してそうですが。

f:id:kazuhironagai77:20210718230655p:plain

この白い板は何をしているんでしょうか?

f:id:kazuhironagai77:20210718230721p:plain

となっていますね。

World Outlinerから使用されているActorを調べると以下の様に大量のEffectがありました。

f:id:kazuhironagai77:20210718230739p:plain

Niagaraで作成されたのかと思ったのですが全部Cascadeでした。

MapのFolder内にLandscapeがありました。

f:id:kazuhironagai77:20210718230755p:plain

あれ。と思ってチェックしたら

f:id:kazuhironagai77:20210718230831p:plain

滅茶苦茶小っちゃい領域をカバーしていました。元からある分を残しておいた感じです。

Post Process Volumeもありました。

f:id:kazuhironagai77:20210718230848p:plain

これはまだ勉強していないので見ても良く分かりません。

Toon調にするためにPost Process Volume内で何かしているんでしょうか?

たき火がありました。

f:id:kazuhironagai77:20210718230905p:plain

流石に火はToon調ではなかったです。

Rainbowなんてのがありました。

f:id:kazuhironagai77:20210718230920p:plain

ほとんど見えませんが綺麗です。

BenchなどのAssetがありました。

f:id:kazuhironagai77:20210718230935p:plain

見た目はToon調ですが影がしっかり載っています。

使用しているMaterialのNormalを調べたらしっかりNormal ノードからデータが渡されていました。

f:id:kazuhironagai77:20210718230949p:plain

やっぱり影はMaterialのNormalで指定されるみたいですね。

草ですが生え方が複雑で作り物感がないです。

f:id:kazuhironagai77:20210718231004p:plain

SM_Bushes_Newと言う名前でした。

花ですが全部静的に配置されています。

f:id:kazuhironagai77:20210718231020p:plain

Landscape4を制作した時に使用したGrass Toolを使用して一気に追加出来るのか試したいです。

パッと見で面白そうなのはこの位です。

あっ。もう一つ忘れていました。

空です。BP_Sky_Sphere_Stylizedと言う名前になっています。

f:id:kazuhironagai77:20210718231036p:plain

これはどうやって作成したんでしょうか?

Toon調でありながら非常にきれいです。

8.2 Showcaseの見学

全体像です。

f:id:kazuhironagai77:20210718231054p:plain

思っているよりActorの数は少ないです。

f:id:kazuhironagai77:20210718231109p:plain

細かいActorはこれだけです。これ位だったらBlenderを勉強し直したら自分で作成できそうです。

山のActorです。

f:id:kazuhironagai77:20210718231123p:plain

これは駄目でしょう。Textureの繰り返しが丸見えです。

2,3カ月前まで私も同じような岩肌を作成していたくせに偉そうです。

8.3 その他の部分の見学

BPです。

f:id:kazuhironagai77:20210718231208p:plain

HUDクラスが何をしているのかが分かりません。それ以外は中身をみて勉強すれば大体理解出来そうです。

今週は見学だけなので中身は見ませんが。

Effectです。

f:id:kazuhironagai77:20210718231223p:plain

全部、Cascadeで作成されています。やっぱり今もCascadeの方が実用的なんでしょうか?

Foliageです。

f:id:kazuhironagai77:20210718231239p:plain

うーん。Bushは非常にきれいです。ぜひRPGの何処かで使用したいです。

Propです。

f:id:kazuhironagai77:20210718231253p:plain

うーん。今使用しているAssetと比べて特別凄い気はしませんね。影が出るのでその辺が長所かな。

Treeです。

f:id:kazuhironagai77:20210718231306p:plain

木はどれも綺麗です。今更ですがLandscape4の木と交換するか迷います。

Waterです。

f:id:kazuhironagai77:20210718231320p:plain

これも使用するか迷いますね。

Toon調の滝の作成方法の勉強には結構良い気がしています。

8.4 見学した感想

実用面から言うと、木や茂みは非常に綺麗で何処かで使用したいです。小物系は影があるので影のないのと交換する形なら使用してもいいかなと言う感じです。岩や山は要らないです。

Toon調の勉強面から言うと、滝や空、そして虹のBPはどうやって作成したのか結構勉強になると思います。後でBPを見てみます。

FXは一応全部見てみます。勉強になる事はいっぱいあると思います。

10.まとめと感想

今週の勉強した内容です。

  • NiagaraCascade共にSub UVの使用方法がとうとう分かりました。
  • RPGでは石像との会話と石像からのItemの入手を実装しました。
  • Warp Passの検証を行いました。
  • 今月のFree AssetであるDreamscape Nature : Meadows - Stylized Open World Environmentをざっと見ました。

来週の予定ですが、

  • Niagara Cascadeの勉強
  • 石像との会話と石像からのItemの入手
    • それぞれの石像のBack Ground Imageの作成
    • それぞれの石像からItemを貰うときに開くWidgetの作成
    • それぞれの石像のセリフの作成
    • 戦闘中に石像と会話出来ない仕組みの作成
    • 石像を封印する仕組みの作成
  • Warp Passの作成
  • Good Skyの検証

をやる予定です。

流石に今週は疲れました。

11.参照(Reference

[1] Epic Games. (n.d.-e). Niagara Visual Effects. Unreal Engine Documentation. Retrieved July 18, 2021, from https://docs.unrealengine.com/4.26/en-US/RenderingAndGraphics/Niagara/

[2] Epic Games. (n.d.-g). Recreate the Starter Content Smoke Effect in Niagara. Unreal Engine Documentation. Retrieved July 18, 2021, from https://docs.unrealengine.com/4.26/en-US/RenderingAndGraphics/Niagara/HowTo/RecreateSmoke/

[3] Epic Games. (n.d.-a). Create a Sprite Particle Effect in Niagara. Unreal Engine Documentation. Retrieved July 18, 2021, from https://docs.unrealengine.com/4.26/en-US/RenderingAndGraphics/Niagara/HowTo/SpriteEffect/

[4] Epic Games. (n.d.-b). Depth Expressions. Unreal Engine Documentation. Retrieved July 18, 2021, from https://docs.unrealengine.com/4.26/en-US/RenderingAndGraphics/Materials/ExpressionReference/Depth/#depthfade

[5] Epic Games. (n.d.-d). Niagara Renderers. Unreal Engine Documentation. Retrieved July 18, 2021, from https://docs.unrealengine.com/4.26/en-US/RenderingAndGraphics/Niagara/EmitterReference/RenderModules/

[6] Epic Games. (n.d.-c). Emitter Update Group. Unreal Engine Documentation. Retrieved July 18, 2021, from https://docs.unrealengine.com/4.26/en-US/RenderingAndGraphics/Niagara/EmitterReference/EmitterUpdate/

[7] gameDev Outpost. (2020, September 23). UE4 - Niagara Flipbook - Part 2 - Smoke [Video]. YouTube. https://www.youtube.com/watch?v=okrHUHunPIQ

[8] Epic Games. (n.d.-h). SubUV Modules. Unreal Engine Documentation. Retrieved July 18, 2021, from https://docs.unrealengine.com/4.26/en-US/RenderingAndGraphics/ParticleSystems/Reference/Modules/SubUV/

[9] Epic Games. (n.d.-f). Particle Spawn Group. Unreal Engine Documentation. Retrieved July 18, 2021, from https://docs.unrealengine.com/4.26/en-US/RenderingAndGraphics/Niagara/EmitterReference/ParticleSpawn/