UE4の勉強記録

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

「Unreal Engine 4.xを使用してRPGを作成する」の足りない部分を作成する 村人の会話を管理する2

f:id:kazuhironagai77:20201018215720p:plain

<前文>

手塚治虫鉄腕アトム宮崎駿風の谷のナウシカ

現在、失われた30年と言われ日本経済が全く発展しないで30年が経ちました。ほとんどの日本企業は画期的な技術の開発や科学の発見が出来なくなって何十年もゾンビのような生ける屍と化しています。私はその原因は、日本人の科学技術に対する考え方が、手塚治虫鉄腕アトムのそれから宮崎駿風の谷のナウシカのそれに変わったからだと思っています。

これを言うと大抵の人は私の事を馬鹿にしますが、私はかなり強力にこの事を信じていて、いつか文章にまとめようと思っていました。

正し、最初にはっきりと言っておきますが、宮崎駿風の谷のナウシカや他のジブリの作品が駄目と言っている訳ではありません。アニメとしての質とその作品内における特定のモノに対する創作者の思想は全く別モノだからです。ハリウッド映画に例えると分かり易いかもしれませんが、ある監督が作る映画に必ず日本人が出て来て、必ず一番最初に殺されるとしたらどう思いますか?その映画の面白さや内容の質とは別に「この監督、日本人嫌いなんじゃねえ。」と思いますよね。

それと同じ事を宮崎駿風の谷のナウシカにおける科学技術の取り扱い(特に手塚治虫鉄腕アトムにおける科学技術の取り扱いと対比しての)に対して私は言いたい訳です。

宮崎駿風の谷のナウシカでは、科学技術に関して2つの点が強調して書かれています。

一つ目は、科学技術は純粋な悪であると言う事です。風の谷のナウシカで科学技術が人類や主人公に良い結果をもたらす事は全くありません。人類を滅ぼすほどの環境汚染を引き起こしたりとかしてます。

二つ目は、科学技術は簡単に収得出来るものである。と言う事です。ナウシカは自作の稚拙な実験器具から腐海の秘密を解き明かします。特別、化学や薬学の勉強をしたと言う説明もありません。小さい頃から本を読むのが好きとか、実験に失敗して爆発を起こしたとか、一般人には不要でも、科学や技術が好きな人間なら共感できるような逸話もありません。にもかかわらずナウシカ腐海の秘密を解き明かします。

これに対して手塚治虫鉄腕アトムでは、科学技術は人々に大きな幸せをもたらす物であるが、扱い方を間違うと大変な事になる。と描かれています。更に科学者のモラルが科学技術の発達の方向性に大きな影響を与え、人類の幸せに直結する事も描かれています。読者は鉄腕アトムを通じて、どのように科学技術と向き合っていくべきなのかを漫画を読みながら学べます。

更に、手塚治虫鉄腕アトムでは科学者や技術者は簡単には成れない憧れの存在として描かれています。登場する科学者や技術者は、人生の辛苦とそこから真理を学んだ高僧のような表情をしていたり、天才を具現化したような厚顔無恥な態度を取ったりと人によって千差万別ですが、一貫して特別な存在として描かれています。

手塚治虫鉄腕アトムにおける科学技術は、火です。火は扱いを間違えると火事を起こしたり火傷をしたりと大きな害をもたらしますが、正しく用いれば暖かい食事を作成出来たり、暖を取る事が出来たりします。宮崎駿風の谷のナウシカにおける科学技術は、悪です。片手間に収得出来き、表面的には人に益するように見えるが、結局は害にしかならない存在です。

宮崎駿風の谷のナウシカの世界観が支配する今の日本で、誰が科学者や技術者に成りたいと思うでしょうか?また、科学や技術を収得するのは簡単であるとの間違った見解は、必要な勉強時間や実習時間(更に言えばそれにかかる費用も)を大幅に少なく見積もる可能性が高いです。よく科学技術の研究のための予算が貰えないから良い研究が出来ないと言われますが、十分な予算が貰えない時点で、宮崎駿風の谷のナウシカの世界観が日本全体を支配している事の証明だと思います。科学技術そのものを純粋な悪と見なす思想の呪縛が日本人全体を覆っている事について考えてみて欲しいです。

でも読者の中には「宮崎駿風の谷のナウシカにおける科学技術への捉え方の方が本質をついているんじゃね。」と思う人もいるかもしれません。

確かにテレビを見ていると、今の日本の科学者や技術者は専門家の地位を利用してとんでもない嘘をついているとしか思えない人は沢山います。しかしこれも科学技術に対する扱いに長けていないから生じる害なんです。科学や技術は専門家の意見が良く間違っている事を自らよく知っていて必ず2重盲検法というテストでその効果を客観的に判断します。科学技術自体が専門家の意見を何の検証もしないで聞くのは「たき火に手を突っ込むようなもんだ。」と言っているんです。

もう一つの問題があります。科学や技術を悪と断じたとしても、その原理に律されている事には変わりがない事です。原始時代に例えると分かり易いかもしれません。貴方がある日、火の扱いに失敗して火傷してしまったとします。それから貴方が火は悪であると断じて一切火を使わないで生活したとするでしょう。しかし火を扱う事を貴方が止めても火が無くなる訳ではないです。貴方が火を扱うのを止めたとしても山火事が起きなくなる訳ではありません。また食事も火を使わなければ全て生で食べなければなりません。食中毒に罹る割合も段違いに高くなるでしょう。

宮崎駿風の谷のナウシカや他のジブリ作品の呪いから外れ、手塚治虫鉄腕アトムが示したように、科学技術を賢く運用出来た時に日本の停滞が終わる日がくると信じています。

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

<本文>

今週は先週、終わらなかった村人NPCの会話システムのうちの単純な会話の部分を完成させます。

具体的には先週、設定だけ作った以下の村人NPCを実際に作成します。

1. 詩を読む村人

  • 詩人になりたくていつも詩を作成している人です。
  • 話しかけると作成した詩を披露してくれます。
  • 更に主人公に詩の評価を聞いてきます。高評価なら喜び、低評価だと悲しみます。

2. 占い師

  • この世界では霊感が備わった人は守護精霊からの警告が占いの形で聞き取れるとの信仰があります。それを実践する人達です。
  • 話しかけると主人公の未来を占ってくれます。

3. 科学者の卵

  • 再現性を重んじ、繰り返し再現出来る事に価値を見出します。この世界では、魔法が強力なため科学技術はあまり発展していません。
  • 話しかけると、科学の基礎に発展しそうな考察を披露してくれます。

4. 天気予報の達人

  • 村人は基本的に農民なので天気の予測は非常に大切です。
  • 話しかけると今年の雨量、暑さ、寒さなどの予測を教えてくれます。

5. 政治評論家

  • この世界の王たちも政争に明け暮れています。
  • 話しかけると今の政治状況について解説してくれます。

6. 山の達人

  • この世界の村人は、春は山菜、秋はきのこ狩りをするのが普通です。山の達人はそれらを採る達人です。
  • 話かけると、山の情報について教えてくれます。

7. ビジネスマンの卵

  • どうやったらお金持ちになれるのかいつも考えています。
  • 話しかけると、今考えているビジネスについて説明してくれます

8. 退役した戦士

  • 退役した戦士も農民になって暮らしています。
  • 話しかけると、戦闘に有利な情報や退役後にのどかに暮らす方法などについて教えてくれます。

9. 魔法研究家

  • 魔法について研究している村人もいます。
  • 話しかけると、魔法についての情報を教えてくれます。

10. 村長

  • 村のリーダーです。村の食料、治安、水などを管理しています。
  • 話しかけると、村のビジョンについて語ってくれます

11. 村長の腰ぎんちゃく

  • 村長の機嫌を良くする事だけが生きがいです。
  • 話しかけるとどうして腰ぎんちゃくとして生きているのか教えてくれます。

12. 村長の娘

  • 村人から姫と呼ばれています。理想の女の子を演じるのに疲れています。
  • 話しかけると本音を教えてくれます。

13. 保安官

  • 村の治安を守っています。村で武器の使用が許可されている唯一の人です。
  • 話しかけると仕事を頼まれます。保安官に頼まれた仕事は村にいる限りやらなければいけません。因みに料金はもらえません。

14. 旅人

  • 旅人は主人公だけではありません。色々な理由で旅をしている人も村に宿泊しています。
  • 話しかけると、世界の旅の仕方について教えてくれます

15. ハンター

  • 村の外には凶悪なモンスターが出現する事があります。その時には、村人はハンターを呼んで退治してもらいます。ハンターは高額な報酬を貰えるのでみんなの憧れの職業です。
  • 話しかけると、バカにされます

1.NPC村人(詩人)の作成

1.1 DataTableの作成

DataTableを使用して以下に示したように最初の村の詩人のセリフを作成しました。

f:id:kazuhironagai77:20201018220512p:plain

f:id:kazuhironagai77:20201018220520p:plain

f:id:kazuhironagai77:20201018220529p:plain

1.2 詩人のCharacterクラスの作成

NPCの老人をDuplicateして作成しました。

f:id:kazuhironagai77:20201018220554p:plain

以下に示したように変数MyPlaceForEventsの値がPE_TalkingNPC_Oldmanに成っています。

f:id:kazuhironagai77:20201018220613p:plain

Enum、EPlaceForEventsにPE_TalkingNPC_Poetを追加します。

f:id:kazuhironagai77:20201018220632p:plain

Buildし直します。

以下に示したように、UEC++のGameModeBaseのコードを変更した後は、全てのBP内のGameModeBaseのcastがエラーになります。

f:id:kazuhironagai77:20201018220649p:plain

これを直します。

一回、UE4Editorを閉じて開いたら直りました。

f:id:kazuhironagai77:20201018220720p:plain

1.3 ThirdPersonCharacterクラスにPoetのための機能を追加しPoet会話用のwidgetを作成する。

以下のコードをNPC_Poetのために追加します。

f:id:kazuhironagai77:20201018220744p:plain

OldmanWelcomeウィジェットの代わりにPoet_Welcomeを作成します。

OldmanWelcomeからduplicateして名前を変えただけです。

f:id:kazuhironagai77:20201018220802p:plain

イメージとコードを少しだけ変えました。

f:id:kazuhironagai77:20201018220819p:plain

f:id:kazuhironagai77:20201018220827p:plain

テストします。

f:id:kazuhironagai77:20201018220852p:plain

はいを選択します。

あれ、変化しません。エラーになっていました。

f:id:kazuhironagai77:20201018220908p:plain

調べると、AnswerButtonウィジェットのParentWidget変数のタイプはOldmanWelcomeウィジェットなので

f:id:kazuhironagai77:20201018220934p:plain

f:id:kazuhironagai77:20201018220941p:plain

このAnswerButtonウィジェットはOldmanWelcomeしか使用出来ませんでした。新しいボタンウィジェットを作成します。

f:id:kazuhironagai77:20201018220958p:plain

テストします。

はい。を押すと

f:id:kazuhironagai77:20201018221014p:plain

時数が多すぎました。

調整します。

f:id:kazuhironagai77:20201018221033p:plain

細かい調整は必要ですが、大体はOKですね。

2.NPC村人の作成についての考察と効率化

2.1前節で作成した welcome ウィジェットを統一出来ないか?

Buttonウィジェットにwelcomeウィジェットをパスするのですが、welcomeウィジェットはそれぞれwelcome_oldmanウィジェットとwelcome_poetウィジェットと違うウィジェットなのでButtonウィジェットもAnswerButtonウィジェットとAnswerButtonPoetウィジェットの2つを作成しました。共通の親ウィジェットからwelcome_oldmanウィジェットとwelcome_poetウィジェットを派生すれば、AnswerButtonウィジェット1個足りるはずです。

試してみます。

出来ませんでした。

Widgetで親子関係が成り立つのは純粋な変数と関数だけみたいで、親ウィジェットのdesignパートで作成したTextなどのウィジェットは、子クラスのウィジェット内には作成されませんでした。うーん。もしかしたら出来るのかもしれませんが、今回はやり方が分からないのでpassします。

ここにやり方が載っていました。

f:id:kazuhironagai77:20201018221106p:plain

こっちのやり方なら親ウィジェットのdesignパートで作成した全てのウィジェットが表示されるみたいです。

出来ました。出来ましたがこのやり方だと、親クラスのウィジェットで作成したデザインに足したり、変化したりする事は出来ません。

うーん。今回はwelcome ウィジェットの統一は諦めて別々に作成する事にします。

3.その他のNPC村人の作成

これ以上整理出来る事はないので、別のNPC村人を作成していきます。やり方は1. NPC村人(詩人)の作成と同じなので結果だけ載せていきます。

3.1 占い師

WelcomeウィジェットのFormatは詩人と同じです。イラストだけ変更しています。後でWelcomeウィジェットも改造する予定です。

f:id:kazuhironagai77:20201018221150p:plain

3.2科学者の卵

詩人を元に絵を描きました。

f:id:kazuhironagai77:20201018221210p:plain

3.3 天気予報の達人

老人を元に作成しました。これで5種類の村人NPCを作成しましたが、今になってwelcomeウィジェットは統一しても良かったかもと思い始めています。

f:id:kazuhironagai77:20201018221233p:plain

後で、統一するにしてもそれぞれの村人NPCのセリフと絵は必要なのでこのまま残りのNPCも作成します。

3.4 政治評論家

知ってます。が2行になっているのが気になります。

f:id:kazuhironagai77:20201018221300p:plain

3.5 山の達人

流石に同じ事を繰り返すのは飽きて来ました。関係ないですが、NPCの村人のデザイン私が描いているですが、上手くないですか。こんなシンプルな絵にも著作権って付くんでしょうか?

f:id:kazuhironagai77:20201018221344p:plain

3.6ビジネスマンの卵

ビジネスマンのやつです。

f:id:kazuhironagai77:20201018221406p:plain

3.7 退役した戦士

今までのキャラは一人を除いて男性でしたので、このキャラは女性にしました。

f:id:kazuhironagai77:20201018221434p:plain

3.8 法研究家

このキャラも女性にしました。

段々疲れて来て成果デザインが前ほど良く無くなって来ました。

f:id:kazuhironagai77:20201018221458p:plain

以下の絵に変えました。

f:id:kazuhironagai77:20201018221516p:plain

一つデザインで気が付いたんですが、体は基本的な図形を使用して表した方が美しく見えると言う事です。

3.9 村長

村長と言うより王様です。もうデザインのアイデアが無くなりました。

f:id:kazuhironagai77:20201018221601p:plain

3.10 村長の腰巾着

デザインは前よりかなりマシになりました。

f:id:kazuhironagai77:20201018221620p:plain

文字の表示ですが、タイプライター効果は欲しいですね。読み切る前に選択肢のボタンが表示されるのは、混乱します。文字が全部表示されてから選択ボタンが示されると分かり易いです。

流石にもう疲れました。残りは別な機会に作成する事にします。

4.NPC村人の問題点

4.1 NPC村人が2人以上重なった時に、片方の人と会話が出来なくなります。

f:id:kazuhironagai77:20201018221655p:plain

最初のNPC村人のボックスを出た後に、既に次のNPC村人のボックス内に入っていると、

f:id:kazuhironagai77:20201018221720p:plain

MyPlaceForEvents変数が、PE_Noneにセットされたままに成ります。

f:id:kazuhironagai77:20201018221738p:plain

その場合は一端、ボックスを飛び出してもう一度そのNPC村人のボックスに入り直す必要があります。

このボックスを飛び出してもう一度そのNPC村人のボックスに入り直すと言う行為はプレイヤーはボックスそのものを見る事は出来ないので、プレイヤーにとっては、基本的には不可能な行為です。早急に解決する必要があります。

この問題は来週考えます。

5.まとめと感想

今週はここまでです。

ここまでやって思い出したんですが、UE4C++でウィジェットを作成してそれの派生クラスをBPで作成する場合は試していなかったです。更に

f:id:kazuhironagai77:20201018221809p:plain

レベル内に配置するためのアクターをNPC毎に別に作成しているので今の時点でも15種類になっています。これも最適化する事で減らせないか検討します。