<前文>
子音+Lの音
Minimal Pairによる英語の発音聞き取り練習アプリを制作しています。
凄い効果があります。例えばThの場合です。THはFやSとペアを組みますが、ああこの音がThなのかと一瞬で分かります。そして一端分かったら決して忘れません。
しかしどうしても成果が出ないPairもあります。
それが子音+Lと子音+Rのペアです。PlayとPrayのペアみたいなやつです。全く区別がつかないと言うわけではなく、その場で二つの単語を聞き比べながらこの単語はどっちでしょうか?とクイズを出すと必ず正解出来ます。つまり音の違いは誰でも認識出来ています。所が次の日になると、音の違いが分からなくなってしまいます。
この子音+Lの音について新情報が入りました。
子音+Lの時のLの音ってLight LとDark Lのどっちだと思いますか?
私は頭ごなしにLight Lと思っていました。
正解は、半々だそうです。
子音+Lの時にMのような音が聞こえる時があります。この長年の謎が解明しました。子音+Light Lの時にはMに近い音が聞こえるんです。子音+Dark Lの時はM のような音は全くしません。
後、ラリルレロの音が全く聞こえない時もあります。例えばFlyの発音が、フイに聞こえる場合です。この発音を始めて聞いたときあまりに酷すぎると思いました。完全にフイと言っています。これでLかRか分かる訳ないです。
でもこの謎も解明しました。元々、Dark Lはウのような母音のような音がします。のでF + Dark Lがフに聞こえたんです。このフの音はFuやFooとは全く違うウの音なんでFLと分かる訳です。
それでも分からない部分は沢山ありますが、まあ一歩前進したのは間違いないです。
それでは今週の勉強を始めます。
<本文>
1.今週の予定
今週は以下の事をやります。
2. Niagara の勉強
今週は先週、勉強したRibbonをもう一回やり直します。
先週、Reviewで横や上からEffectを眺めるとparameterとEffectの関係が結構良く分かる事に気が付きました。それで先週勉強したCreate a Ribbon Effect in Niagara [1]の勉強をやり直す事にしました。
2.1 先週の復習
先週、勉強した内容を復習して分からなかった事をまとめます。
飛行機雲の作り方はまだ分かりませんね。後、花火の導火線を作成するのにRibbon Effectは丁度いいかもしれません。
Spawn Burst Instantaneous ModuleのParameterについて考察しています。
ところが、後でSpawn Rate ModuleのSpawn Rate がCascadeのSpawn ModuleにあるBurst Listと同様の働きを担当しているんではないのか?の疑惑が出て来ます。
これが「先週、分からなかった事1」です。
次の疑問ですが、Emitter State ModuleのLife Cycle Modeの値についてです。
先週の結論では、
となりましたが、それだとDefaultでSelfにセットされている理由が分かりません。「先週、分からなかった事2」です。
Torus Location Module のTours Modeについてです。
ToursとRingのどちらかが選択出来ます。
この辺ももう少し具体的な違いが知りたいですね。
後、勿論、横や上からEffectを眺めて違いを確認します。これは「先週、分からなかった事3」にします。
そしてTorus Location Module のUPositionです。
UPosition自体の意味も良く分かりませんが、以下に示した様なParticleとかEmitterなどのParameters自体が何なのか良く分かっていません。
これらは「先週、分からなかった事4」です。
そしてAcceleration Force Moduleについてです。
これは「先週、分からなかった事5」になります。
以上でした。
2.2 Niagara Moduleの解説について
Cascade には以下に示した様に、Particle System Reference [2]に全てのModuleについての解説が載っています。
これと同じものがNiagaraにもあるはずです。まずそれを探します。
直ぐに見つかりました。Niagara Visual Effects [3] にありました。
NiagaraはModule毎ではなくGroup毎にまとめてありました。
2.3 「先週、分からなかった事1」
<Spawn Burst Instantaneous ModuleのSpawn Rate Parameterについて>
Spawn Burst Instantaneous ModuleはEmitter Update Groupに属しています。
Emitter Update Group [4] を見てみましょう。
あれ、これだけ。
これではSpawn Burst Instantaneous ModuleのそれぞれのParameterがどんな働きをしているのか分かりませんね。
では、自分で実験してみるしかなさそうですね。
Niagara Emitter からDirectional Burstを選択して新しいEmitterを作成します。
以下に示したようなeffectが表示されています。
一秒毎に、ParticleがBurstされています。
Emitter State ModuleのLoop Durationが1.0にセットされてるからでしょうか?
Emitter State ModuleのLoop Duration を9秒に変えてみます。
Timelineが9秒まで移動してからLoopするようになりました。
勿論、ParticleがBurstされるのは9秒毎になりました。
TimeLineの矢印が0.00を指す時にParticleがBurstしています。
これって?
試しに、Spawn Burst Instantaneous ModuleのSpawn Timeを5秒にセットしてみました。
はい。今度はTimeLineの矢印が5秒を指した時にParticleがBurstしました。
これがSpawn Burst Instantaneous ModuleのSpawn Timeの意味ですね。
解決しました。
<Spawn Rate ModuleのSpawn Rateについて>
Emitter Update Group [4]には以下の様な解説がされています。
これだけでは良く分かりませんが、実際に試してみたら意味が分かりました。
まずSpawn Rate ModuleはSpawn Burst Instantaneous Moduleに付随して作動するModuleではないです。全く関係のない独立したModuleした。
Spawn Rate ModuleのSpawn Rate を1にセットすると
1秒に1回、一個のParticleを放出しています。
今度は、Spawn Rate ModuleのSpawn Rate を5にセットします。
1秒間に5回、つまり20秒に一回、1個のParticleを放出しています。
これがSpawn Rate ModuleとSpawn Rateの機能でした。
2.4「先週、分からなかった事2」Emitter State ModuleのLife Cycle Modeの値について
Life Cycle Modeの値がSystemの方が計算は速くなるそうです。それならばDefaultでもSystemにセットするはずです。なぜdefaultではSelfにセットされているのでしょうか?
今の時点ではこれを調べる手段がないですね。
これは諦めます。
と思ったらCreate a Ribbon Effect in Niagara [5] のEdit the Emitter Update Group Settingsの2にそのものズバリの説明がありました。
良く読んでおけば良かったです。
2.5「先週、分からなかった事3」Torus Location Module のTours Modeについて
Torus Location Module のTours Mode はToursとRingのどちらかが選択出来ます。その違いについて調べます。
上から見てみます。
Torusの場合です。
Ringの場合です。
Torusの場合の方が大きい位の違いしか分かりません。
2.6「先週、分からなかった事4」Parametersについて
以下にParametersの要素の一覧表を示しています。これらが何なのかが分かりません。
調べます。
UE4 - Niagara Parameters [7] に少しだけ解説がありました。
まずここに書かれているParameterは既に作成されているParameterで使用中か、これから使用されるモノだそうです。
以下に示したLockのiconですが、意味は編集したり、値を変更したり出来ないとの意味だそうです。
以下に示した数字の部分は参照されている回数だそうです。
後、それぞれのParameterの意味が分かれば良いですが。
ParticlesのParameterはカーソルを乗せるとそのParameterの機能が解説されています。
EmitterのParameterはカーソルを乗せても何も表示されません。
もう少し経ったらEmitterのParameterの解説も表示されそうですね。これは待つ事にしましょう。
ただし、UPositionに関しては完全に理解出来ました。
上記の説明のようにRingの場合はCircle状のPositionを示しています。そしてParameterはAgeなので0から9秒の間のFloatを示しているはずです。それが以下のCircleの円周上の位置を示しているはずです。
2.7「先週、分からなかった事5」Acceleration Force Moduleについて
Particle Update Group [7] に以下の説明がありました。
この説明を見る限り単なる加速度ですね。
CGHOW氏のAll Forces Modules in UE4 Niagara Explained [8] にも簡単な説明がありました。
Captionのマイナスが切れてしまいましたが、‐980cmをZに追加すれば重力と同じになると説明しています。
やっぱり加速度を追加しているようです。
2.8 Ribbon Emitterについて
一つ大切な事に気が付いたのでここに書いておきます。
UE4のVirtual Effectは全てParticle で作成されているはずです。そのParticleにTextureを貼り付けたのがSprite、Static MeshをはりつけたのがMeshです。ではRibbon Emitterは何をParticleに貼りつけてんでしょうか?
分かりません。
しかしこれはarticle Effectの理論からUE4のVFXを理解するためには解明する必要があります。
後で調査しましょう。
3. Cascadeの勉強
今週はContent ExampleにあるGPU Particle with Velocity Cone Moduleに使用されているModuleについて勉強します。
最初の二つのEmitterはGPU Spriteを使用していますね。最初の二つのEmitterのModuleの多くは+が付いていますがこれはGPU Spriteに関係しているのでしょうか?
Velocity Cone Moduleは先週散々勉強したので、今週はパスしますが、出来た当時は結構な大発明だったんでしょうか?
3.1 Sphere Emitterを調べる
順番は逆ですが最後のSphere Emitterから見て行きます。
綺麗なEffectです。どうやって作成しているのでしょうか?
いろいろ試したら分かったのですが、この色はMesh Material Moduleで作成されています。
このModule、Materialに属するModuleですが、
Particle System Reference [2] に載っていません。
ので解説が見つかりません。
このModuleに関する疑問は、Required Module内にMaterialを指定する箇所があるのに更にMaterialを指定している所です。
Mesh Dataの場合はMesh Material Moduleで別に使用するMaterialを指定する必要があるんでしょうか?
以下の様なMesh Particleを放出するEmitter を作成しました。
Mesh Material Moduleを追加します。
Materialには以下の青色をセットしました。
球が青くなりました。
今度はRequired ModuleのMaterialに同様の青をセットしました。
球に色は付いていませんね。
どうしてこうなったんでしょう。
残りのModuleは全部知っているヤツですね。
3.2 Particle Emitterを調べる
以下にGPU Spriteを使用したParticle Emitterを示します。
+のサインの意味が分かりませんね。GPU Spriteの場合+を使用しないといけないのでしょうか?
GPU Spriteを使用したParticle Emitterを作成してみました。
別に+サインがModuleの名前の隣に現れたりはしていません。
色々調べたんですが分かりません。
調べている内に以下のtutorial(Introduction to Cascade [9] )を見つけました。
公式のTutorialでContent Exampleで紹介されているEffectについての解説と作成方法を説明しています。
数年前にこのTutorialにある牛のおもちゃが落下するEffectを作成した事があったのですが、存在自体すっかり忘れていました。今、見直すとModuleの使用方法の解説は詳しくそれなりに勉強にはなります。これからはこのTutorialも参考にする事にします。
ただ全てのVideoのTutorialに言える事ですが、何故、その関数や機能、UE4のVisual Effectの場合ならそのModuleを使用するのかについての理論的な解説はこのTutorialもほとんどないです。
これは重大な問題なのでここで時間をとって詳しく解説します。
Programmingならば大体以下の手順で(ソフトウェアを)制作します。
- 作りたいソフトウェアの目的、機能、UIなどを紙の上でまとめます。
- こうやったらそのソフトウェアが作成できるとだろうと言う簡単な設計図を作ります。
- 試しに作成します。
- 出来なければ2に戻って設計図を直します。
- 出来たらテストします。
- バグが発見されたら直します。
- 全部直したら完成です。
UE4のEffectだって根本的にはProgrammingなのですから大体は上記の手順で作成が進みます。だからEffectのTutorialだってその手順を示すべきなんです。しかし何故かEffectに限らずUE4のTutorialは既に完成した設計図が何故か手元に最初からあります。しかもその設計図にはどのNodeやら変数やらEffectの場合はModuleを使用するのかまでしっかり書かれています。それをどうやって組み立てるのかだけしか教えません。まるでプラモデルでも組み立てているかのようです。
その様なTutorialからは何も学べないと言うのではないですが、設計図の作成方法を学ばなければ自分で新しく何かを作成する事は出来ません。
いろいろ弄っていたら+が表示されているModuleは、どちらかを選択しても両方が一辺に選択される事に気が付きました。
これが+の意味なのかもしれません。
試してみましょう。
Linking modules within cascade [10]によると
で出来るそうです。
出来ました。
Sphere emitterの隣に新しいEmitterを作成してMesh Material Moduleを上記の方法でLinkしました。
+のサインが表示されています。
4. Monster Zoneの改良について
先週、Landscape4上に配置している全てのMonsterを倒してみました。その結果、色々直しが必要な個所が見つかりました。
以下にそれをまとめます。
- Start画面の部屋がStarter Kitで作成されているのでFantasy感が薄い。
- 戦闘後にLevelが上がった場合、一言「Levelが上がりました。」としか表示されません。勝利ポーズを変更してもっと細かい情報(攻撃力がどれくらい上昇したのかなど)を報告するようにします。
- Monsterがたまにアイテムを落とすようにします。
更に、以下の改善点が述べられています。
- 途中から凄い退屈になった。戦闘しても勝てるのが分かっているから作業感が半端じゃない。
- 戦闘画面に移る時に、後ろからモンスターに襲われるときと、自分からモンスターの後ろを襲うとき、は普通の戦闘と同じ始まり方で良いのかと思った。
- もっと戦闘にメリハリが欲しくなった。途中までは戦闘も楽しかったが、戦闘しても勝てるのが分かっているからつまらなくなる。
- 一端倒したモンスターが絶対復活しないので帰りは楽だった。
- バグらしいバグはなかった。のでその点は良かった。
- 地面が明かる過ぎると思いました。
以下にそれぞれの改善方法について検討した内容を示します。
<Start画面の部屋がStarter Kitで作成されているのでFantasy感が薄い>
BeffioのMedieval KingdomのStatic meshを使用して作り直します。
<戦闘後にLevelが上がった場合>
一言「Levelが上がりました。」としか表示されません。
勝利ポーズを変更してもっと細かい情報(攻撃力がどれくらい上昇したのかなど)を報告するようにします。
Levelが上がると以下のパラメーターの値が上昇します。
更に魔法を覚える事もあります。
これらを一つ一つ文章で報告します。
例えば、
- 最大HPが1上がりました。
- 最大MPが1上がりました。
- 攻撃力が1上がりました。
- 防御力が1上がりました。
- 幸運が1上がりました。
- 魔法、炎(小)を覚えました。
のようにします。
<Monsterがアイテムを落とすようにします。>
偶に、倒したMonsterがアイテムを落とすようにします。
そう言えば、武器は拾えるように以下に示したBPを前に作成しました。
がアイテムは忘れていました。
PickUpItem WidgetでもItemを拾った場合は実装していません。
以下のFalseの時の実装の事です。
アイテムの獲得方法ですが、単に戦闘終了後に貰えるのではなく、以下の様なのを考えています。
戦闘終了後、アイテムが貰える場合は、9体ある像のどれかに一回だけ話せるようになります。
天使の像です。
50%の確率でアイテムが貰えます。
裏切りの像です。
25%の確率で特別なパスが貰えます。
像1です。
この像の名前は像1としか書かれていません。逃亡した奴隷の像とでも名付けます。
50%の確率でHPを全快にしてくれます。
角の像です。
何ですかね。この名前のセンスは。せめて角のある人の像と名付けて欲しいですね。
50%の確率でMPを全快にしてくれます。
頭蓋骨です。
50%の確率でHPとMPを全回復します。しかし10%の確率で死にます。
以下の3体の像に関してはまだ何も考えていません。
こんな感じで戦闘後のアイテムが貰えるようにします。
以下はそれ以外の問題点についてです。
<
- 途中から凄い退屈になった。戦闘しても勝てるのが分かっているから作業感が半端じゃない。
- 戦闘画面に移る時に、後ろからモンスターに襲われるときと、自分からモンスターの後ろを襲うとき、は普通の戦闘と同じ始まり方で良いのかと思った。
- もっと戦闘にメリハリが欲しくなった。途中までは戦闘も楽しかったが、戦闘しても勝てるのが分かっているからつまらなくなる。
>
これらは一見別々な問題について語っている様で、同じ問題について論じています。戦闘の結果、勝利するのが100%予測出来るのでつまらなくなっているんです。
最初の10回位までは戦闘も楽しいんです。何故かと言うと以下のサイクルが発生するからです。
- 何とか実力でモンスターを一体倒す。
- しかし次の戦闘に勝つための十分なHPとMPはない。
- たまたまLevelが上がる事でHPとMPが回復。次の戦闘も勝つ事が出来る。
今回の戦闘は勝てる。次の戦闘は勝てない。の状態で戦闘に勝ちます。しかし戦闘画面からLandscape4に戻ったら別なモンスターと直ぐに戦闘になります。そうなったら戦闘で負けて死にます。その予測がかなり濃厚になった時にLevelが上がる訳です。Levelが上がる事でHPとMPが回復して次の戦闘は勝てるように成る訳です。
これは楽しいです。
所が、LevelがMaxまで上がると今回の戦闘も勝てる、次の戦闘も勝てる状態になります。それがつまらなくなるんです。
それでこんな事を考えました。
今までWarpは無料で出来るように作っていました。これを有料にします。といってもお金ではありません。パスというアイテムが必要になります。Map1からLandscape4にWarpするにはパスが1枚必要です。みたいにします。このパスはお金では買えません。
戦闘に勝つとこのパスを手に入れられるようにします。
Levelが低い時は兎に角。HPとMPを回復させる必要があります。
ので天使の像にお祈りして回復アイテムをもらう一択になります。
LevelがMaxになり回復アイテムがそんなに重要でなくなったら、裏切りの像でお祈りしてパスを集める戦略に変更出来ます。
これで戦闘も退屈ではなくなるはずです。
となると最初にする事はMonsterを倒した時にアイテムが手に入るようにする事ですね。
<一端倒したモンスターが絶対復活しないので帰りは楽だった。>
何時、Monsterは復活出来るのかを決めていませんでした。
以下の条件でMonsterは復活すべきです。
- ワープをした時
- 宿屋で寝た時
- Saveした時
- 夜になった時
縄張り内のMonsterを全部倒した場合、帰りは楽になります。でも夜になればMonsterは復活するので楽なのは一時だけです。いいと思います。
<地面が明かる過ぎる>
以下にLandscape4の地面を示します。
確かに明るいです。
地面をもっと暗くする方法は幾つか考えられます。
まずはDirectional LightのIntensityを下げる方法です。
次はSky Lightの以下のParameterを弄る事です。
更にLandscape4はまだGood Skyを実装していません。Good Skyを実装して昼夜が出来たら、地面が明るすぎるのは朝の一時期だけになるかもしれません。
まずはGood Skyを実装する事から始めます。
5. Monster Zone の更なる作成
残りのMonster Zoneの作成もしていきます。
5.1 Monster Zone 4 の作成
やり方は先週作成したMonster Zone 3と全く一緒です。
先週、Monster Zone 3を作成した方法はマニュアル化出来ているはずなので、全く同じ方法でMonster Zone 4を作成してみます。
Block、Territory、Triggerを追加します。
Monsterを静的に配置します。
以下の様になっています。
Monsterを動的に生成するためにMonster Spawn DataをRPG Game Instance BPに作成します。
この配列に先程、静的に配置したMonsterのデータを写します。
このData TableからMonsterを生成するようにします。
Monster Zone ActorのGet Monster Spawn Data関数をMonster Territory Number が4だった場合にも対応できるようにします。
これでMonster Zone 4のMonster は動的に生成されるはずです。
Monster Zone 4のMonster が倒された時にMonster Spawn Data Landscape 4-4のデータを書き変えるようにしましょう。
RPGGameBaseBPのRemove Defeated Monster関数にMonster Territory Number が4だった場合の対応を実装させました。
これでMonster Zone 4 でMonsterと戦闘しても問題ないはずです。
ここまではMonster Zone 3の作成方法と一字一句同じやり方で出来ました。
しかしRemove Defeated Monster from Landscape4()関数の内容がかなり複雑になってしまいMonster Zone 4の実装にかなり時間がかかりました。
先週は要らないと言いましたがやはりMonster Zone の部分は関数化する必要があります。後でやります。
テストします。
Block 4に侵入しました。
Monsterが生成されています。
次にBlock 4から退散してみます。
戦闘してみます。
Monster Zone 4に発生するMonster 9匹を倒しました。特にバグが発生する事もありませんでした。
Block内に侵入したり退出したりを繰り返しました。
これも大丈夫でした。
正し、死体になったMonsterが引きずられるように移動するバグはそのままです。これは後で直します。
5.2 Remove Defeated Monster from Landscape4関数の直し
Remove Defeated Monster from Landscape4 Helper関数を作成します。
実装部は以下の様になっています。
Remove Defeated Monster from Landscape4関数の実装部は以下の様になりました。
正直あんまり綺麗になっていません。Switch 関数の場合にどうやってNodeを整理するかの正しい方法が分かりません。
取り敢えずこれでテストしてみます。
Monster Zone 1をテストしました。問題ないです。
Monster Zone 2もテストしました。問題ないです。
Monster Zone 3もテストしました。流石に飽きて来ました。全部のモンスターは倒しませんでしたが、多分問題なしです。
Monster Zone 4もちょっとだけテストしました。多分問題なしです。
5.3 Monster Zone 5、6、7 の作成
残りのMonster Zoneも作ってしまいます。
Monster Zone 5です。
テストもしました。
25体もMonsterがいるので最強装備で倒しました。バグはありませんでした。
Monster Zone 6です。
21体のMonsterを全部倒しました。
バグはなかったです。
Landscape 4の最後のMonster Zone であるMonster Zone 7を作成します。
36体のモンスターを配置しました。
テストで全部倒しました。
バグはなかったです。
これでMonster Zoneは完成です。
5.3 Monster Zone のバグの直し
今週は時間が無くなってしまったので来週やります。
6. まとめと感想
今週は以下の事をやりました。
- Niagara の勉強としてRibbon Effectの復習
- Cascadeの勉強としてMesh Material Module、別々のEmitterにある二つの同じ種類のModuleをLinkする方法
- Monster Zoneの改良というかこのゲームの改善すべき点に対する考察
- 残りのMonster Zoneの作成
来週は以下の事をやります。
今週はやる気が出なくて、一日お休みしました。休んだらやる気が戻りましたが正直、二度とやる気が戻らないかと思って焦りました。やる気を維持する為には、良く寝る事と成果を吐き出せる場所がある事が大切と理解しました。
7. 参照(reference)
[1] Epic Games. (n.d.-a). Create a Ribbon Effect in Niagara. Unreal Engine Documentation. Retrieved June 13, 2021, from https://docs.unrealengine.com/4.26/en-US/RenderingAndGraphics/Niagara/HowTo/RibbonEffect/
[2] Epic Games. (n.d.-f). Particle System Reference. Unreal Engine Documentation. Retrieved June 13, 2021, from https://docs.unrealengine.com/4.26/en-US/RenderingAndGraphics/ParticleSystems/Reference/
[3] Epic Games. (n.d.-e). Niagara Visual Effects. Unreal Engine Documentation. Retrieved June 13, 2021, from https://docs.unrealengine.com/4.26/en-US/RenderingAndGraphics/Niagara/
[4] Epic Games. (n.d.-c). Emitter Update Group. Unreal Engine Documentation. Retrieved June 13, 2021, from https://docs.unrealengine.com/4.26/en-US/RenderingAndGraphics/Niagara/EmitterReference/EmitterUpdate/
[5] Epic Games. (n.d.-b). Create a Ribbon Effect in Niagara. Unreal Engine Documentation. Retrieved June 13, 2021, from https://docs.unrealengine.com/4.26/en-US/RenderingAndGraphics/Niagara/HowTo/RibbonEffect/
[6] gameDev Outpost. (2020, September 17). UE4 - Niagara Parameters [Video]. YouTube. https://www.youtube.com/watch?v=7Nally9pWq4
[7] Epic Games. (n.d.-g). Particle Update Group. Unreal Engine Documentation. Retrieved June 13, 2021, from https://docs.unrealengine.com/4.26/en-US/RenderingAndGraphics/Niagara/EmitterReference/ParticleUpdate/
[8] CGHOW. (2021, March 19). All Forces Modules in UE4 Niagara Explained [Video]. YouTube. https://www.youtube.com/watch?v=iW867tJ93lU
[9] Unreal Engine. (n.d.). Introduction to Cascade | v4.2 | Unreal Engine. YouTube. Retrieved June 13, 2021, from https://www.youtube.com/playlist?list=PLZlv_N0_O1gYDLyB3LVfjYIcbBe8NqR8t
[10] Epic Games. (n.d.-d). Linking modules within cascade - UE4 AnswerHub. UE4 ANSWER HUB. Retrieved June 13, 2021, from https://answers.unrealengine.com/questions/407178/linking-modules-within-cascade.html