UE4の勉強記録

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

「Unreal Engine 4.xを使用してRPGを作成する」の足りない部分を作成する 前のプロジェクトで自作した機能を追加する3

 

f:id:kazuhironagai77:20200816211803p:plain

<前文>

戦わないから無敵な人

今週はプレイした事もないのにlast of ○○2についての批判に対する考察を書こうと思っていたのですが、もっとムカつく事件があったのでそっちを書く事にします。あんまり詳しく書いてしまうと個人攻撃になってしまうので、ある程度ぼかして書きますが、簡単に言うと私がBlack lives matterと言った時に「Black lifes matterが正しい。」とご丁寧に指導してくれる人がおりました。その人があんまり堂々と指摘するので私も、えっと思いつつその時は「間違えていました。」と言ってしまいました。後から気になって調べたら、やっぱりlivesであってました。私は何で自分が間違っていると認めてしまったのか、本当に色々な意味でムカつく事件でした。

一番悪いのはその場でどっちが正しいかを調べなかった私ですが、その人もあんまりにも堂々とし過ぎているのも問題だと思うんです。これmy name is…事件の時もあったんですが、指摘する人があんまりにも堂々としていると明らかに間違っているにもかかわらず、こっちが間違っている気になってしまいます。だから何でそんなに堂々と出来るか考えてみたんですが、そういうタイプの人に共通するあるものを発見しました。そのタイプは絶対、自分では英語を話さないんです。話さないし書きもしない。だから一度も英語を間違えた事もないんです。人生で一度も英語を間違えた事もないんですよ。そりゃ堂々としますよ。

戦わないから無敵な人と同じなんです。

私は最初、この「戦わないから無敵な人」はどこかで有効に活用できるかもしれないと期待しました。でもそれは無理だと直ぐに分かりました。コードを書かなければバグを作ったことのないプログラマーになれます。でもそんな奴に一銭の価値もありませんよ。プログラマーは実際にコードを書いて、そのコードのバグを自分で直す事で成長していくんです。

外国語をネイティブと全く同じにしゃべる人達

全く日本人と同じ日本語をしゃべるアメリカ人と会いました。その人は大人になってから日本語を勉強したそうですが、全く日本人と同じ日本語をしゃべります。その人曰く、最初はこんなに上手くしゃべれなかったそうです。ある日、道端で黒人にお前の日本語ここが間違っていると指摘されて、凄い頭に来てその黒人のしゃべっている日本語を録音して大学にいる日本人に聞かせたそうです。そしたらその録音を聞いた全ての日本人がこれは日本人がしゃべっている。文法的な間違いや日本人が言わない言い回しが一個もない。さらに発音も完璧であると。それでその人もう一度その黒人にあって話を聞いたら、別に子供の時に日本で育ったわけでもなく日本語は独学で勉強したと言ったそうです。ただしその黒人が言った学習方法が非常に独特でそれまで聞いた事がないやり方だったそうです。

その人は非常に強いショックを受けたのですが、その学習方法を信じるまでにはいかなかったのでその時は実行しなかったそうです。それから何年かして英語を完璧に話すポルトガル人(ポーランド人だったかも?)にあった時に、そのポルトガル人の英語の学習方法がその黒人が言った日本語の学習方法と全く同じだったそうです。それでもう大学で教わった日本語は全部忘れてそのやり方で一から学習し直したそうです。そしたら2年位で日本人と全く区別つかない日本語をしゃべれるようになったそうです。

ちょっと眉唾ですが気になる話ではあります。因みに眉唾の事を英語でひとつまみの塩(a grain of salt)と言います。私この二つがごっちゃになって眉に塩塗って聞いて下さいと言った事があります。

その学習方法は以下の通りです。

  • まず発音を完璧にする。
  • その言語を聞きまくる。24時間、ひたすらその言語付けの環境で過ごす(英語なら海外ドラマやハリウッド映画を見まくる。日本語ならアニメを見るなど)。意味が分からないフレーズや単語はその言語の辞書で調べまくる。文法は意味の分からない文を理解するために使用する。決して文法から文を作成しようとしてはいけない。単語を覚える時は例文事覚える。
  • ある日、突然その言語で夢を見たり、その言語で独り言を口走しったりするようになる。この段階になって初めてしゃべったり書いたりする練習を始める。ただし3文に一個以上文法上のミスがある場合は、しゃべる練習はまだ早く、2の段階をもっとやるか、短い文を文法上の間違いが全くない状態まで推敲する練習をする。

これだけだそうです。この人の主張で特に独特だったのが「文法から作文すると必ず文法を間違える。」でした。文法は意味が理解出来ない文を理解する時に必要であるが、しゃべるときに文法に基づいて作文すると必ず変な文になる。でした。じゃどうするんだと言うと、2番の勉強が重要だそうです。ここでひたすらその言語の環境に自分を浸す事で、脳が勝手に正しい文を作成してくれるようになるそうです。ひたすらその言語に浸る事で何となくこれが正しい言い方というのを脳が構築出来る様になるというのです。

言われてみるとこれって正しいですね。さっきのBlack Lives Matterだって私は何となくそんな言い方が正しいような気がすると思って言った訳で文法を考えて言ったわけじゃないです。だから文法間違ってますよと突っ込まれたら、エッとなって誤ってしまった訳ですが、結局は私の言い方が正しかったわけです。

うーん。

条件付きながらかなり納得出来る話です。

まあこの話が絶対正しいかどうかは置いておいて、外国語をネイティブと全く同じレベルで修得する学習法というか外国語学習の正解みたいなのはありそうな気がします。

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

<本文>

今週は最後の大きな機能、装備した武器を実際の3Dモデルに装着する部分を行います。前回どうやったのか全く覚えていないのでまず復習からやっていきます。

1.機能の追加

1.1 ブログ(2月23日)の追加

まず、この週のブログをざっと読んでどんな方法で武器をキャラに付加しているのかを復習しました。

はっきりとは覚えていないのですが、この週のブログで武器の3Dモデルを付加するためのソケットの位置と角度を大幅に変更したのは間違いで、

f:id:kazuhironagai77:20200816211920p:plain

別に用意されている武器を持った状態のアニメーションを最終的に使用した気がします。

実際のCh2 でのコードは以下のようになっています。

Weaponウィジェットクラス内で実装されています。

f:id:kazuhironagai77:20200816211948p:plain

FieldPlayerのEventBeginPlayで以下の実装がされているんですが、別なレベルにワープした時これで武器が装備出来るのでしょうか?ちょっと良く分かりません。

f:id:kazuhironagai77:20200816212010p:plain

アニメーションの方は一端置いておいて武器が装着されるようにします。

以下に示した方法で、武器が装備した時に武器の3Dイメージがキャラに装着されるようにしました。

最初にBaseWeaponをStaticMeshActorクラスから派生して作成します。

f:id:kazuhironagai77:20200816212043p:plain

MobilityをMovableにセットします。

f:id:kazuhironagai77:20200816212105p:plain

セットした武器がキャラクターの体などに当たると変な挙動を示すのでNoCollisionに設置します。(後で変更するかもしれません。)

f:id:kazuhironagai77:20200816212134p:plain

StaticMeshにはSword01SMをセットしましたが、本当はしなくてもいいはずです。

f:id:kazuhironagai77:20200816212154p:plain

このBaseWeaponクラスを元にそれぞれの武器の3Dイメージを保持するクラスを作成します。

f:id:kazuhironagai77:20200816212221p:plain

今回は試しなので一個だけ作成しました。

今度は、Weaponウィジェット内で武器を装備するためにボタンをクリックした時、実行されるコードを追加します。

f:id:kazuhironagai77:20200816212248p:plain

関数Ruturn Weapon Classでは先程作成したShortSwordSmallクラスを返します。

f:id:kazuhironagai77:20200816212313p:plain

ここで作成したインスタンスは、後でThirdPersonCharacterからアクセスする必要が出てくるのでThirdPersonCharacterクラス内に変数BaseWeaponをBaseWeaponクラスから作成し、それにassignしておきます。

f:id:kazuhironagai77:20200816212342p:plain

f:id:kazuhironagai77:20200816212350p:plain

更にアニメーションを武器持ちのヤツに変更します。

f:id:kazuhironagai77:20200816212532p:plain

テストします。

f:id:kazuhironagai77:20200816212625p:plain

こんな感じに成りました。中々いいですね。

今度は武器を外せるようにします。

この週に載っていると同じやり方で行いました。

f:id:kazuhironagai77:20200816212657p:plain

DestroyActorを使用して武器のアクターを破壊します。その後キャラのモーションを素手のヤツに変更します。

テストします。

f:id:kazuhironagai77:20200816212723p:plain

元に戻りました。

今度は防具の装備を行います。

この週のブログではStaticMeshActorからBaseWeaponを作成したようにStaticMeshActorからBaseArmorを作成しましたが、BaseArmorの代わりにBaseWeaponクラスをそのまま使用しても大丈夫な気がします。ので今回はBaseWeaponクラスからそれぞれのarmorのアクターを作成してみます。

f:id:kazuhironagai77:20200816212751p:plain

これをweaponクラスで装備します。

f:id:kazuhironagai77:20200816212820p:plain

キャラの左手に追加するようにしました。

テストします。

f:id:kazuhironagai77:20200816212848p:plain

f:id:kazuhironagai77:20200816212856p:plain

今度は防具を外せるようにします。

f:id:kazuhironagai77:20200816212914p:plain

f:id:kazuhironagai77:20200816212922p:plain

外せました。

f:id:kazuhironagai77:20200816212957p:plain

武器と防具を装備した時で防具だけ外しました。モーションは武器を装備した時のままです。

今度は色々な武器を装備出来る様にします。

f:id:kazuhironagai77:20200816213112p:plain

f:id:kazuhironagai77:20200816213120p:plain

武器を装備した状態で別の武器を装備するとBaseWeaponのインスタンスが複数作成されるので、既に作成されているBaseWeaponのインスタンスを破壊します。

f:id:kazuhironagai77:20200816213146p:plain

結果を以下に示します。

f:id:kazuhironagai77:20200816213231p:plain

f:id:kazuhironagai77:20200816213240p:plain

f:id:kazuhironagai77:20200816213250p:plain

f:id:kazuhironagai77:20200816213303p:plain

今度は防具を作成します。

f:id:kazuhironagai77:20200816213323p:plain

f:id:kazuhironagai77:20200816213332p:plain

f:id:kazuhironagai77:20200816213343p:plain

結果です。

f:id:kazuhironagai77:20200816213404p:plain

f:id:kazuhironagai77:20200816213413p:plain

f:id:kazuhironagai77:20200816213422p:plain

剣も持つとこんな感じになります。

f:id:kazuhironagai77:20200816213444p:plain

最後にワープしても武器と防具を装備しているようにします。

f:id:kazuhironagai77:20200816213502p:plain

f:id:kazuhironagai77:20200816213510p:plain

テストします。

f:id:kazuhironagai77:20200816213526p:plain

出来ました。

. まとめと感想

今週はこれだけです。