UE4の勉強記録

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

「Unreal Engine 4.xを使用してRPGを作成する」の足りない部分を作成する 教科書のサンプルをもう一度作成する2

f:id:kazuhironagai77:20200719225120p:plain

<前文>

GaN半導体

あれ?「中村*二は口先だけの詐欺師で、実際は彼の部下が青色ダイオード作成した。」って日本で散々言ってましたよね。もう日本中のマスコミが彼の事をパッシングして、それまで米国との2重国籍は特に問題視していなかったのに、*民党は彼から無理やり日本国籍取り上げたりしましたよね。この動画、たまたま見たのですが、何か凄い事になっています。近い将来、ほとんどの電子機器でGaNがSiliconにとって代わるんじゃないかって予測してます。そしてその研究の中心人物として紹介されているのが中村*二教授じゃないですか。米国での彼の弟子は、他の大学の教授になってGaNの研究で世界をリードする立場に立っているじゃないですか。

シリコンバレーがITの分野で世界的な存在になったのは別に優れたプログラマーが集まったからじゃないです。Siliconという安価な素材を使って半導体が作れるようになったからですよ。そのGaNがSiliconに代わるとなると、GaNが日本にもたらすはずだった富は、GoogleApple, Facebook そしてMicrosoft時価総額を合わせた分より大きくなるんじゃないんでしょうか?

確か、彼が起こした裁判で、彼の青色ダイオードにおける貢献は3億円程度と判決が出たと思うんですが、本当にその程度なんですか?3兆円の間違いじゃないんでしょうか?こういう問題って、日本ではその場、その場で終りにしてしまうけど後からでも詳しく検討すべきだと思うんですよ。

後、アメリカ国籍を持っている人は海外に在住してもアメリカに税金払わないといけないんです。(ただしある一定以下の収入の人に限ってそれを証明する書類を提出する事で免除されはします。)何が言いたいのかと言うと「知らないけどアメリカ国籍持ってた。」と言う事は絶対ないと言う事です。*民党は、中村*二氏から無理やり日本国籍取り上げたくせに、議員の中に米国との2重国籍な人はいませんよね。と言う事ですよ。

人種差別的な悪口をアメリカで言うと

日本から海外に出る気がない人には関係ない話かもしれませんが、アメリカで勉強や仕事をしたいと思って英語の勉強をしている人は絶対知っていた方が良い話をしますが、人種差別的な悪口、いわゆるNワードを言って喧嘩になった場合、警察は出て来ませんよ。これは黒人だけじゃなくて日本人に*apと言ってもです。私が住んでいた州は、喧嘩で胸倉掴んだくらいでも、警察に見つかったら即逮捕なくらい厳しいのに、人種差別的な悪口を言っていたと分かると、警官たちは殴られていても無視してました。

今、日本でもBLM運動に反対している人達は軽率に人種差別的な言葉をネットに書いていますが、その言葉の重さを知らないで真似ると大変な事になります。ここで特に気を付けてほしいのがall lives matterのような一見差別用語に思えない差別用語です。

突然ですが、以下に示す英文の意味分かりますか?

f:id:kazuhironagai77:20200719225324p:plain

最近The Political Compassと言う自分の政治的な立ち位置を測るテストをやったのですが、この英文が質問として出ていました。

因みにDeepLで翻訳すると以下のようになりました。

f:id:kazuhironagai77:20200719225353p:plain

意味分かんないですよね。何で意味が分からないかと言うと、人は一種類しかいないのに色々な種類の人と訳されているからです。これって色々な職業じゃねぇ。と日本人なら思うかもしれません。

全ての人には権利があるが、色々な職業の人はそれぞれの職業に留まっていた方が皆のためになる。

これなら理解出来ますよね。「タクシーの運転手は、国会議員に成る権利はあるけれどずっとタクシーの運転手をしてる方が皆が幸せになる。」と言う事です。これに対して賛成か反対かを述べる事で、自分の政治的な立ち位置が分かるわけですから、何か納得出来ますよね。

でも違ったんです。正直に言うと私も分かりませんでしたが、このテストを受けた保守派の論客を左派の論客が批判したYouTubeのビデオを見て分かったのですが、この質問は、

黒人(アジア人)が白人と結婚する権利はあるけど、結婚しないほうがお互いのためだよね。

と言う意味だったんです。つまりこの質問は被験者の人種差別度を測る質問だったんです。アメリカでは人種差別問題はこれぐらい曖昧にさせないと議論出来ないんです。だからall lives matterのような一見差別用語に思えない言葉でも差別用語な場合があるんです。

更にNワードと全く同じに聞こえる日本語もあります。「逃げろ!」がNワード+runに聞こえるのは有名な話ですが、他にもいっぱいあります。人種差別的な悪口を言ったつもりがなくても言った事にされる可能性まであるんです。

アメリカで勉強や仕事をしたいと思って英語の勉強をしている人達は本当に人種差別に関しては気を付けてください。今までの努力が一発で水の泡になる可能性があるからです。特に差別用語に関しては、日本人にはどんなに気を付けても気を付け過ぎる事はありません。

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

<本文>

今週は、先週終わらなかった教科書の内容をch4_3に行います。

1.アイテムが購入出来る店の追加と購入したアイテムが使用出来るようにする

この節でInventory populationと言う言葉が出て来ているのですが、前回読んだときはよく意味が分からないので飛ばして読んでいました。更に以下に示した文では、dynamically populated inventory screenと言う表現を使用しています。

f:id:kazuhironagai77:20200719225608p:plain

この場合のdynamically populated inventory screenはch4_3ではまだ作成していませんが、ch2では既に作成した

f:id:kazuhironagai77:20200719225638p:plain

この画面のScrolling boxを指しているはずです。

となるとこの場合のpopulatedはItemボタンを擬人化してItemボタンがこのScrolling box内に居住 (populated)しています。と言う事を言っているみたいですね。

populated areaと言えば人口密集地の事です。すし詰めのニュアンスもあるかもしれません。

これらを踏まえてInventory populationの意味を考察すると、Itemボタンがinventory画面(この場合はScrolling box)にどんどん移住してすし詰めになって行く様を表していると思われます。

1.1 Boolean変数をThirdPersonCharacter内に作成する

作りました。

f:id:kazuhironagai77:20200719225710p:plain

教科書に載っている図が間違っていますね。

f:id:kazuhironagai77:20200719225727p:plain

何でGetDataTableRow()関数を使用している図がここに載っているんでしょうか?

1.2 Inventory Screenが開いているかどうかを確認する

はい。教科書通りに作成しました。

f:id:kazuhironagai77:20200719225812p:plain

ThirdPersonCharacterにアクセスするのに教科書はGetAllActorsOfClass()関数を使用していますが、GetPlayerPawn()関数を使用してもいいと思います。

f:id:kazuhironagai77:20200719225845p:plain

どっちが速いんですかね。

1.2 道具袋内の道具と店に置いてある道具の局所的な違い

何が言いたいのか分かったような分からないような題ですが、やって行きます。

まず、Itemボタンがクリックされた時、道具屋でそのアイテムを購入する時なのが、道具袋を開けてそのアイテムを使用する時なのかの判別が必要です。

以下に示した方法で判別します。

f:id:kazuhironagai77:20200719225919p:plain

この部分も考えどころですね。教科書ではポーズ画面の道具ボタンと道具屋での道具ボタンの両方をItemウィジェットで作成していますが別々にしても何も問題ないです。どちらがユーザーに分かり易く綺麗なデザインでなるかで考えると分けるのもありだと思います。

次にThirdPersonCharacter内にArrayItem変数を作成します。

f:id:kazuhironagai77:20200719225949p:plain

ArrayItem変数はTextの配列で購入したアイテムの名前を保持するための変数です。

しかし既にRPGGameInstance内にItemsと言う名前の変数を全く同じ目的で作成しています。

f:id:kazuhironagai77:20200719230013p:plain

これは、私のゲームはプレイヤーが操作するキャラが違うレベルを移動するため、そのキャラクターの情報をそれぞれのレベル内で維持するために作成された物ですが同じ目的の変数を二つも作成する必要はありませんよね。しかし今週は教科書通りに行い、来週以降どのように改良するのかを考えます。

1.3 道具袋スクリーンを完成させる

しました。

f:id:kazuhironagai77:20200719230038p:plain

1.4 アイテムを購入出来るようにする

以下に示したように大体教科書通りに作成して道具を買えるようにしました。

f:id:kazuhironagai77:20200719230102p:plain

こんな感じです。

f:id:kazuhironagai77:20200719230123p:plain

保持しているアイテムの管理をThirdPersonCharacterで行うのか、RPGGameInstanceで行うのか良く考える必要がありますね。

1.5 アイテムの使用

以下に示したように実装しました。

f:id:kazuhironagai77:20200719230147p:plain

HPのみしか作用するようになっていませんね。全部のパラメーターが作用するように後で変更します。

テストします。

回復薬を使用するとHPが20ほど回復しました。

f:id:kazuhironagai77:20200719230215p:plain

ただし使用した回復薬が無くならないです。これも後で直します。

2.装備

今度は装備の部分を作成します。

2.1 武器防具のデータテーブルの作成

これは既に作成しています。それを使用します。

f:id:kazuhironagai77:20200719230252p:plain

2.2 武器と装備用のスクリーンのための変数の作成

ThirdPersonCharacterにArrayWeaponsとEquipmentScreenを追加します。

f:id:kazuhironagai77:20200719230318p:plain

Pause_EquipmentのBPで以下のコードを実装する事でPause_Equipmentウィジェットが表示されている間のみ、EquipmentScreen変数がTrueになるようにします。

f:id:kazuhironagai77:20200719230348p:plain

2.3 Weaponボタンを作成します。

Itemウィジェットを複製してWeaponと名付けました。

f:id:kazuhironagai77:20200719230417p:plain

装備画面からWeaponボタンが押された場合のコードを以下に示したように変更しました。

f:id:kazuhironagai77:20200719230441p:plain

これだと、元々のATKと武器を装備した後、ATKの変化が分からなくなるため、武器を外した時に困った記憶があります。その辺も来週以降直します。

2.4 装備用のスクリーンの作成パート2

武器装備画面を開いたら、装備出来る武器が全て表示されるような実装をしました。

f:id:kazuhironagai77:20200719230508p:plain

こんな感じです。

f:id:kazuhironagai77:20200719230525p:plain

これ見ると結構、私の前のプロジェクトであるCh2も結構改良していたのが分かります。武器は道具と同じように店で買える様になっていましたから。

2.5 WeapやArmの脇のTextBlockに文字を表示させる

教科書では以下に示したやり方で行っています。

ThirdPersonCharacter内に変数SoldierWeaponを作成します。

f:id:kazuhironagai77:20200719230549p:plain

この変数は装備している武器の名前を保持します。

EquipmentScreenのweapの隣のテキストボックスにSoldierWeapon変数に保持されているテキストが表示されるようにします。

f:id:kazuhironagai77:20200719230614p:plain

Weaponボタンが押された時にSoldierWeapon変数に押されたWeaponボタンの名前が保持されるようになります。

f:id:kazuhironagai77:20200719230633p:plain

短剣(大)を押したらきちんと表示されています。

f:id:kazuhironagai77:20200719230703p:plain

武器を選んでも防具を選んでも同じようにWeapに表示されていますね。この辺も後で直していきます。

2.6 武器を装備した時のキャラの状態値を正す

この節の論理は間違ってはいませんがもっとマシな実装をすべきだと思います。

武器を装備した時、キャラクターのATKの値に直接武器のATKの値を足してしまっているので、

f:id:kazuhironagai77:20200719230737p:plain

武器のボタンを押すたびにAP(ATK)が上昇してしまうバグがあります。

f:id:kazuhironagai77:20200719230754p:plain

もう一度短剣(小)のボタンを押した。

このバグを直すのがこの節の目的です。

そのためにWeapon内のBlueprintでThirdPersonCharacterに作成したSoldierBaseATKの値を調節しているのですがWeaponが作成されるたびにこのコードが実行されます。Pasue_Eqipments画面を開くたびにWeaponボタンは16個(現状の段階でも)作成される訳で、16回も同じ事を繰り返す訳です。武器を装備する時に、SoldierBaseATK + WeaponATK = ATKとセットして、SoldierBaseATKの値はThirdPersonCharacterが作成された時に、RPGGGameInstanceからYourMyHero変数のATKをコピーすればいいはずです。

以下に示した方法で作成しました。

f:id:kazuhironagai77:20200719230821p:plain

まずThirdPersonCharacterのEventBeginPlayでSoldierBaseATKの値にMyYourHeroのATKの値をセットします。

f:id:kazuhironagai77:20200719230858p:plain

WeaponBP内では武器を装備した時にThirdPersonCharacterのSoldierBaseATKと武器のATKを足した値をRPGGGameInstance のYourMyHeroのATKにセットします。

これで完成です。

f:id:kazuhironagai77:20200719230927p:plain

f:id:kazuhironagai77:20200719230939p:plain

f:id:kazuhironagai77:20200719230951p:plain

f:id:kazuhironagai77:20200719231002p:plain

出来ていますね。

3. レベルアップ、アビリティ、そしてセーブ

この部分、2節で終わりと思っていたら6節もあるじゃないですか。ちょっと今週に終わらせるのは無理みたいです。

不本意ですが来週に回します。

4. まとめと感想

今週中には教科書の内容は終わると思ったのですが終わらなかったです。来週頑張ります。