UE4の勉強記録

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

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

f:id:kazuhironagai77:20201025213654p:plain

<前文>

やっとvtuberと中国の炎上も落ち着いたみたいです。Redditでこの話題を追いかけていた人にとっては、中国側が土下座して謝る以外の決着はない事は最初から明白でした。しかし結構な数の日本人が右往左往していたのを見ると、それらの人々は普段の口ぶりとは違い、全然英語が出来ない(少なくともRedditを読む事が出来ない。)事が分かり、私はかなり憤慨しました。

ただその英語の情報が全くない状態でvtuberの味方をし続けた人は尊敬に値します。英語の情報が全くない状態では中国からの脅しはそれなりに怖かったと思います。

個人的な感想を言えば、今回の炎上は完全に仕組まれていて、

日本のある政治家 -> (中国に強い商社) -> 中国共産党のとても偉い人 -> あのvtuberを叩け

のラインで発生したと思っています。中国側から仕掛けたならあまりに稚拙すぎるからです。今回の炎上で、あんなに英語が得意な中国人スパイの存在を10人もアメリカ側にバラシしてしまったんですから、中国側からすれば大損です。二度と関わりたくないでしょう。

今回の件で唯一私が納得出来なかったのが、三週間のクールダウンを入れる事で炎上が収まるのを待つと言う考え方でした。これはケガをしたら、病院で治療しないで家で寝てるのと同じで、肉離れ程度なら良いですが骨折だったらもっと悪くなる最悪の選択だったと思います。

今回はReddit民が敵対的な中国人を片っ端から潰して、一週間経った時にはもう敵対的な発言をすると徹底的に叩かれる、という事実が中国側に完全に浸透していました。日本語しか出来ない人には、一見三週間のクールダウンに効果があったように思えますが、このReddit民の行動が無かったら、三週間たっても炎上し続けた可能性は高かったと私は思っています。

更にこの三週間のクールダウンのせいで、一つの中国を肯定し「台湾は国である。」と言う事は言ってはいけないと言う風潮が、日本のvtuber界に何となく受け入れられてしまいました。これも最悪だと思います。

―以下の内容は、私が知り合いから聞いた話を、元に書いてるので細かい部分は、間違っているかもしれません。台湾、歴史で検索すれば正確な歴史を記した本が、沢山ではないですが結構あります。正確な歴史はそれらの本を読んでください。-

ほとんどの日本人は知らないと思いますが、第二次世界大戦の後アメリカの支援を受けた中華民国の元である国民党は、ソ連(ロシア)の支援を受けた中国人民共和国の元である共産党との戦争に敗れて台湾に逃げ込みました。そこには日本の教育を受けた(お金持ちは帝国大学まで出ていた。)台湾人が住んでいたのですが、国民党はその現地人たちを虐殺につぐ虐殺で殺しまくったんです。その悲劇から海外に逃げ延びた台湾人が掲げたのが台湾独立運動なんです。

だから中華民国(台湾)と言う表記は元々おかしいんです。台湾と言う国は中華民国から独立して初めて存在するんです。

そして中国(中華人民共和国)と日本の条約ってのは「中華民国が中国の代表ではなく中華人民共和国が唯一の中国の代表で、それ以外の国が中国の代表である事は認めない。」と言う意味なんです。この唯一の中国の代表であると言う事の意味は、中華人民共和国が国連の常任理事国であり、中華民国は中国の代表じゃないから国連の常任理事国じゃないよ。と言う意味でそれ以上でも以下でもないんです。

もし台湾人が中華民国から独立して、台湾と言う国を宣言したとしても、台湾が「我々こそが、中国の代表であり国連の常任理事国の権利をよこせ。」と言わない限り、それを国として承認するかどうかは、100%日本の自由なんです。

では、何でこんなに、中国が台湾を国と表記した事に激怒しているのかと言うと、国民党の幹部と共産党の幹部が親戚同士だからなんです。

昔の中国の金持ちは国民党と共産党のどっちが勝つか分からなかったから、子供を兄は国民党、弟は共産党に入れてどっちが勝っても家族が生き残れるようにしたんです。中華民国から台湾が独立してしまうと国民党が台湾に築いた富と権力がなくなってしまうので(一説によると国民党は世界で一番金を持っている政党だそうです。)親戚の共産党の幹部にお願いして、台湾が絶対独立出来ないように圧をかけてもらっているんです。また自分たちでも中華民国(台湾)のような表記を積極的に使用して台湾と言う言い方も中華民国と同じ意味であるような印象を回りに与えているんです。

あれ、でも台湾って選挙してたよね。と気づく人も居ると思います。そうなんです。国民党は中華人民共和国と戦争中であるから戦争が終わるまでは選挙はしない。と言っていたのですが、それだと台湾人がまた反乱を起こすので、名ばかりの副総統に台湾人をつけていたんです。しかしこの副総統、ある特別な権限だけは持っていたんです。それは、総統が在職中に亡くなった場合、副総統が総統に就任する。と言う権限なんです。そう、在職中に総統が何故か亡くなった、その隙をついて総統に就任したその台湾人が、すかさず総統の権限を使用して選挙を行ったんです。

それで、慌てた国民党の幹部が親戚の共産党の幹部に頼んで、台湾が中華民国から独立しないように中華人民共和国から圧をかけまくっているのが現在の台湾の政治なんです。

これは、非常にsensitiveな内容で台湾人もあまり触れたがらない歴史と政治なんです。日本で原爆の話をする時は、非常に気を使って話さないといけないのと同じような難しさが存在する話題なんです。

でも日本人がこういう話を全く知らないでいて良い訳ではありません。知った上で空気を呼んで知らないフリをするのは、賢いですが知らないのは単なるアホです。

今回の台湾を国と言ってはいけないと言う風潮は、多くの日本人がvtuberを通じてこういう事実に触れる機会を奪ってしまったんです。だから私はこの三週間のクールオフは最悪だったと思っています。

しかし今回の炎上で多くの日本人は気付いませんが、大きな宝を得る事が出来た事はここに記しておきたいと思います。

今のアメリカの若い世代は日本のアニメや漫画を見て育っています。彼らにとって一番衝撃だったのが日本のアニメや漫画における友情の強さでした。今のアメリカの若者がベビーブーマー世代に対して自分の事しか考えていないと批判するのは、日本のアニメや漫画における友情が潜在的な基準になっているからなんです。しかし彼らは本当に日本人がアニメや漫画の主人公の様に友情を大切にするのか疑問に思ってもいます。

今回の炎上の初期に炎上したvtuberが所属する会社や同僚たちがそのvtuberを見捨てて中国におもねる様な行動を取った時、Reddit民を代表とするアメリカの若い世代は大激怒しました。彼らは、日本のアニメや漫画における友情の強さを信じていたのにあっけなく裏切られたからです。所がその後、vtuberが所属する会社が中国におもねる様な行動を取ったのは本意ではなかった事や、同僚のvtuberはこの炎上に触れない事で炎上のクールダウンを狙っている事が知れ渡ると、アメリカの若い世代は、やっぱり日本のアニメや漫画のように彼らは強い友情で助け合っていると確信するようになりました。

そして今回無事に復活出来た事でその確信は信用に昇華しました。大人だろうが子供だろうが他人から信用してもらうのは大変です。それが違う文化に属している人達ならなおさら大変です。別にアメリカに限りませんが別な文化に属している人達からそういう信用を得られた事は大変な宝です。そしてこの信用はvtuberを通じて全ての日本人に対する信用に拡張する可能性にもつながります。

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

<本文>

1. バグの直し

前回は村人NPCを沢山作成した所で終わりました。今週は先週のバグの直しからやろうと思います。

1.二人の村人NPCが近い距離で立っていると、一方の村人としか話せない。

2.UE4C++widgetを作成した場合は、その派生クラスであるBPのデザインはどうなるのか?

3.NPC村人のアクターを別々に作成しているが、一種類に出来ないのか?

それぞれ直していきます。

1.1 二人の村人NPCが近い距離で立っていると、一方の村人としか話せない。

これは以下に示したように、それぞれのNPCがボックスを保持していてそのボックス内にプレイヤーが操作するキャラが侵入した時に、そのNPCと会話出来るようになっているからです。

f:id:kazuhironagai77:20201025215031p:plain

これを、プレイヤーが操作するキャラにボックスを付けてその中に居るアクターを調べる方式でやれば、こんな問題は起きませんでした。

ここまで制作しておいて今更ですが、ゲームの制作は結局どうやってアルゴリズム(algorithm)に落とすかにかかっていたと言う事です。最初に優れたアルゴリズムに変換出来ていれば、こんな問題は今頃になって発生する事はありませんでした。

とってもこれからやり方を変えるわけにもいかないので、対症療法で解決します。

まず。以下に示したような印を、NPCの上に表示出来るようにします。

f:id:kazuhironagai77:20201025215050p:plain

プレイヤーが操作するキャラが会話出来るNPCは上の印が表示されます。

表示されないNPCとはどんなに距離が近くても会話する事は出来ません。一端離れてからもう一度近づく必要があります。

この印が表示されるには、RPGGameModebaseクラスのPlaceForEvent変数の値が、このNPCの種類と同じである必要があります。

以下のコードで確認します。

f:id:kazuhironagai77:20201025215152p:plain

テストします。

以下の状態でテストします。

f:id:kazuhironagai77:20201025215210p:plain

印が表示されているので右側のNPCと会話出来る事が分かります。

f:id:kazuhironagai77:20201025215228p:plain

一端離れた後、近づき方を変えて左側のNPCと会話出来るようにしました。

f:id:kazuhironagai77:20201025215248p:plain

これでNPCのボックスが重なったとしても、プレイヤーはキャラを操作する事で望みのNPCと会話出来るはずです。

1.2 UE4C++widgetを作成した場合はその派生クラスであるBPのデザインはどうなるのか?

要するに前回出来なかったVertical boxを追加したUUserWidgetの親クラスの作成をUE4C++から出来ないのかと言う事です。

f:id:kazuhironagai77:20201025215312p:plain

Google先生で調べた限りではやっている人は見当たらないです。諦めても良かったのですがちょっとだけ試してみます。

うん。

2時間ぐらい色々試したのですが、良く分かりません。なんていうかUUserWidgetとかSlotの周りを全部忘れてしまっていてその辺を復習しているだけで時間が経ってしまいました。これは今の私にはちょっと難しすぎました。

パスします。

1.3 NPC村人のアクターを別々に作成しているが、一種類に出来ないのか?

f:id:kazuhironagai77:20201025215343p:plain

これを一種類のActorで代用します。

f:id:kazuhironagai77:20201025215402p:plain

NPC_Oldmanからduplicateして作成しました。

f:id:kazuhironagai77:20201025215420p:plain

変数にOccupationを作成します。タイプはPlaceForEventでInstanceEditableとします。

更にコードを変更します。

f:id:kazuhironagai77:20201025215449p:plain

RPGGameModebaseのMyPlaceForEvents変数にはこのOccupationの値をセットします。

更に、印を表示するための判定の部分もOccupationを使用します。

f:id:kazuhironagai77:20201025215511p:plain

これで完成です。滅茶苦茶簡単でした。

テストします。

2体、instanceを作成しました。

f:id:kazuhironagai77:20201025215556p:plain

f:id:kazuhironagai77:20201025215604p:plain

一体目はOldmanにセットしました。

f:id:kazuhironagai77:20201025215632p:plain

2体目はHenchmanにセットしました。

f:id:kazuhironagai77:20201025215651p:plain

一体目に話しかけます。

f:id:kazuhironagai77:20201025215707p:plain

普通にOldmanとの会話が出来ました。

2体目は、村長の腰巾着が出て来ました。

f:id:kazuhironagai77:20201025215729p:plain

こっちも普通に会話出来ます。

出来ました。

これで要らない以下のアクター全部消せます。

f:id:kazuhironagai77:20201025215746p:plain

消してはいけない以下の3つのアクターだけ別のフォルダーに移して

f:id:kazuhironagai77:20201025215805p:plain

残りは全部消しました。

f:id:kazuhironagai77:20201025215824p:plain

相当すっきりしました。

並べると以下のような感じです。

f:id:kazuhironagai77:20201025215844p:plain

こうなるとWelcomeウィジェットも一つに統一したいです。

f:id:kazuhironagai77:20201025215903p:plain

うーん。来週もう一回考えます。

. 残りの村人の作成

以下の村人NPCを作成します。

f:id:kazuhironagai77:20201025215940p:plain

村長の娘です。

f:id:kazuhironagai77:20201025220015p:plain

保安官です。

f:id:kazuhironagai77:20201025220040p:plain

旅人です。

ムーミンスナフキンみたいにしたかったのですが、難しいですね。

f:id:kazuhironagai77:20201025220058p:plain

ハンターです。

f:id:kazuhironagai77:20201025220117p:plain

これで村人NPC全部完成しました。

こんな感じで配置しました。

f:id:kazuhironagai77:20201025220137p:plain

アニメーションは来週作成します。

. 残りは何をするか

先々週は、以下の事をすると予定を立てました。

f:id:kazuhironagai77:20201025220200p:plain

この中で村人との会話は完成しました。

今週は、もう時間が無くなってしまったので以下に来週以降どんな事をやるのかの計画だけを書いておきます。

3.1 魔法の拾得方法について

神殿のような建物を作成して、そこに行くとレベルに応じて魔法が覚えられるようにします。

これは、GameCharacterクラスで使用出来る魔法を管理しているから

f:id:kazuhironagai77:20201025220231p:plain

f:id:kazuhironagai77:20201025220247p:plain

f:id:kazuhironagai77:20201025220255p:plain

魔法の拾得に使用出来る可能性があるのでこれも勉強してみます。

神殿のデザインについては、

f:id:kazuhironagai77:20201025220322p:plain

f:id:kazuhironagai77:20201025220332p:plain

らのアセットを使用して作成しようと思います。

3.2 戦闘システムのボタンの直し

これは今すぐでも出来る事なのでやってしまいます。

f:id:kazuhironagai77:20201025220417p:plain

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

f:id:kazuhironagai77:20201025220434p:plain

攻撃する対象は以下の様に変更しました。

f:id:kazuhironagai77:20201025220451p:plain

魔法の選択画面も変更しました。

f:id:kazuhironagai77:20201025220512p:plain

その後で、攻撃対象を選択するためのボタンが以下の形だったのでそれも直しました。

f:id:kazuhironagai77:20201025220529p:plain

以上です。

3.3 実際のゲーム内の町の地面をデコボコにする

前のテストで、Landscapeの使い方は一応勉強したのですが、数値の最適化がまだ良く分かっていませんので、来週以降に何回かLandscapeを練習作成してから考えます。

3.4 夜と昼の作成の続き

良く考えてみると、時間で昼と夜が変わるよりも、歩いた歩数で昼と夜が変化した方が分かり易い気がします。後、宿屋に止まった後は、必ず朝になるようにします。

. まとめと感想

今週はこれでお終いです。