UE4の勉強記録

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

「Unreal Engine 4.xを使用してRPGを作成する」の足りない部分を作成する Inventory Systemの改善Part 6

f:id:kazuhironagai77:20200223202850p:plain

<前文>

今週は、日本人が中々発音出来ないと言われているTHですが、実は「日本語で“す”と言うときにThの音で言っている人が結構いる。」と言う話をしようと思ったのですが、先週も英語について語って今週もそうなると全然ゲームデザインの考察が進まないのでこの話は止めて、JRPGにおける好かれる主人公について考察します。

しかし、私ゲームは、あまりやりませんので具体的な例が分かりません。ここではマンガやアニメの作品をゲームの代わりに使用して考察します。

ゲームに限らず、漫画、小説の主人公は読者やユーザーから好かれるタイプでなければなりません。しかし自分で考えてみると好かれる主人公の設定は大変難しいです。

残酷な現実を素直に受け入れるならば、最強でイケメンの主人公が最も好かれるはずです。人間は群れの動物ですから本能的に群れのボスに憧れます。群れのボスになるためには何より腕力です。ので最強であると言う設定は無条件で好かれるのです。次にイケメンです。人間の五感で最も重要なのが視覚です。ので見た目が大切です。

しかし、人気のあるJRPGや漫画、ライトノベルなどでそのような設定の主人公はあまりいません。

アニメ好きなアメリカ人が良く言う駄目なキャラになりやすいからでしょうか? 

彼らが良く言う駄目なアニメキャラとはOP、no character development、そしてno empathyなどに当てはまるキャラの事です。まずOPですがover powered の略で、主人公に限らないですが、あるキャラが強すぎると戦闘になっても、結果が予測出来て面白く無いと言う事です。次にcharacter developmentですが、そのキャラがどの程度成長したかが話の中にないとつまらないと言います。最後にempathyですが、共感しにくいキャラクターがどうなろうと知った事じゃないと彼らは言います。

最強でイケメンの主人公は、OPになり易く、成長する必要もないし、読者の共感も得られにくいので、欠点も同時に抱えている訳です。因みに、なろう系の作品は、主人公が最強でもイケメンでもないのに転生する事でOPになり、その結果全く成長せず、読者の共感も得られないと言う駄目を通り越しているキャラが結構いるみたいです。

しかしここで主人公を最強でもイケメンでもないキャラとすると、最初の問題がぶり返して来ます。

人間は群れの動物ですから、最強である設定を外すと、読者はこの主人公は群れの中でどの辺に位置しているのかはっきりさせようとかなり強引に追及するはずです。トップグループに属しているためには、最強の要素がなければ読者は納得しないでしょう。平均グループであると適当に設定すると、今度は自分と比べて上か下かをはっきりさせようとします。そして結果的に上に成ろうが下に成ろうがそのキャラを嫌ったりするはずです。本当は嫌いじゃないかもしれませんが、群れの順位を一寸でも落とすために本能的に嫌悪するみたいです。最下位であると設定するとあけすけに見下し、この主人公が何をしようと興味を示しません。

イケメン問題は、小説とそれ以外で深刻さが大きく変わる問題です。小説にはこの方法は無理ですが、漫画やアニメそしてJRPGでは、どうみても主人公が凄いイケメンなのに周りがイケメンとして扱わない事で、読者にだけイケメンが可能です。ので媒体によりますが、主人公は最強問題よりも扱いは簡単です。

では、実際、最強でイケメンの主人公問題はどう解決すべきなのでしょうか?

過去の人気作品を分析すると以下の対策を取っている事が分かりました。

タイプ1:最強でイケメンの主人公だか、主人公以上に強くイケメンの敵がいる。

Narutoにおけるサスケとイタチ、FF7におけるクラウドセフィロススラムダンクにおける桜木と流川などがすぐに思い浮かびます。鋼の錬金術師の主人公のエルとアルと敵のホムンクルスもそうですし、one pieceにおけるゾロとミホークの関係もそうです。要するに、主人公をイケメンで最強に設定しますが、それ以上の敵を作る事で、主人公がOPになる事を防ぎ、更に主人公に成長の余地を残しておく訳です。しかし最後の要素であるempathy、つまり読者の共感を得られるかどうかは、結構難しいみたいです。サスケはアメリカのNarutoの嫌いなキャラTop3に入ってきますし、クラウドは第2部では最強でもイケメンでもなくなってしまいます。スラムダンクは日本や中国では未だに人気ですがアメリカでは全く人気ありません。黒子のバスケの方が人気なくらいです。ベルセルクのガッツは読者の共感を得つつ、ガッツとグリフィスというタイプ1の関係を維持しているので絶対無理ではないのは確かです。

タイプ2:主人公は最強でもイケメンでもないが、イケメンで最強のキャラが主人公を認め、常に褒め上げている。

Narutoのナルトとカカシ、one pieceのルフィとシャンクス、MHAのデクとオールマイト進撃の巨人のエレンとミカサなどが思い当たります。要するに、主人公は最強でもイケメンでもないが、最強でイケメンなキャラの保護下にあるので結果的に群れのトップグループにいるのと同じになるパターンです。実際の社会でも最強かつイケメンなキャラの親友は、特別枠で群れのトップグループに入れる事をみんな経験上理解していますので、主人公の実力と群れの順位が一致しなくても読者は気にしません。更に、毎回現れる敵も主人公がギリギリ倒せる場合だけ、主人公が担当してそれ以上の場合はイケメンで最強のキャラがやっつけてくれますので、主人公をOPにする必要もないですし、主人公の成長も描きやすいです。Empathyに関して言えば、理由は分かりませんが、コネでトップグループに属しているのに、読者の共感を阻害する事はほとんどないようです。

調べているうちに、このタイプ2の場合、強いタイプ2と弱いタイプ2の2つのケースがある事が分かりました。上記の例で言えば、one pieceのルフィとMHAのデクは最強でイケメンなキャラの保護下にあるだけでなく、主人公としてやって行くための特殊能力のほとんど全てを、そのキャラから無料で貰っています。ルフィは悪魔の実を、デクはquirkをそれぞれ無料で貰っています。これが強いタイプ2のケースです。Naruto のナルトと進撃の巨人のエレンは、最強でイケメンなキャラから常にベタ褒めされるだけで主人公としてやって行くための特殊能力は、そのキャラから貰っていないので弱いタイプ2のケースです。強いタイプ2のケースは、主人公の元々の群れの順位が低いと読者から陰口を言われる事が多いみたいです。

タイプ3:主人公は最強でもイケメンでもないが、一点だけ最強な能力を持っていて、それを工夫して使用する事で問題を解決していく。

遊戯王やDr.ストーン、Narutoのシカマル、そして黒子のバスケットの黒子などがこれに当てはまります。料理や賭博、そして釣りなどの一芸マンガの主人公も大半はこのタイプになります。悲しい事にこのタイプの主人公、群れの最下位グループに属している場合が多く、不良のパシリなんかさせられています。後、上の責任を無理やり押し付けられたりして本当にかわいそうです。一般的に読者は群れの最下位グループに属している連中に興味を持ちませんが、例外が二つあるような気がします。困っている人が美少女である場合、そして下層が知恵を使って問題を解決する場合です。ので、このタイプの主人公が策を練って問題を解決するタイプのマンガは結構な数の読者を早期に獲得出来たりします。また主人公が新聞配達などで家計を助けたりしていて、読者の共感度が他のタイプの主人公に比べて格段に高い場合が多いのも特徴です。

こんな良い事ずくめならば、みんな主人公はこのタイプにすればいいのですが、あまりこのタイプを選択する作家はいません。私見ですが、マンガ家や小説家は甘やかされて育っている人が多いので、最下位グループの厳しい日常を描く事が出来ないからだと思います。更に現実的な策を考えたり、料理や化学などの知識などを要求されたりしますので、創作の難易度が一気に高まる事も一因と考えられます。

タイプ4:主人公は最強でもイケメンでもないが、最強でイケメンのキャラが主人公の中に封印されている。

Narutoのナルトと九尾、進撃の巨人のエレンと巨人、Bleachの一護と一護の中にいるヤツ、などが当てはまると思います。普段は封印されていますが、主人公がピンチの時は必ず封印が解けて主人公を助けに来てくれるのが特徴です。ひと昔前の超能力マンガもこれに当たると思います。一見するとイケメンで最強の利点と欠点を一気に解決しているようですが、実際にこのタイプを採用したマンガは、話が幼稚化しやすく、読んでいてリアリティを感じない作品が多い気がします。下手をするとなろう系の作品より、OPで成長しないし読者の共感も得られない主人公になってしまいます。進撃の巨人のエレンが最初に巨人化した時も、かなりの数の読者が離れたと聞きました。その話を聞いたときは何で?と思ったのですが、今この分析をしながらもう一度考えると、OPで成長しない、読者の共感も得られない主人公になった瞬間でもあったわけですね。遊戯王の遊戯は最強でイケメンのキャラが開放された後でも、OPにならずにタイプ3の主人公で居続けた例外みたいな感じでしょうか?

今週のゲームデザインは好かれる主人公について考察しましたが、結構な収穫がありました。やはりゲームデザインも真剣にやる必要があり、やればそれなりの成果につながる事も分かりました。

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

<本文>

今週は、プレイヤーが操作するキャラクターが武具を装備した場合、そのキャラクターの攻撃力や防御力が上昇するだけでなく、FieldPlayerの3Dモデルもその武具を装備するようにします。

といってもどうすれば出来るのか全く分からないので、まずチュートリアルを探す事から始めます。

1.チュートリアルでの勉強

このサイトにありました。

以下に示すブループリントを使用すれば出来るみたいですね。

f:id:kazuhironagai77:20200223203020p:plain

武具はstatic mesh ですが、上記のどのブループリントを使用すればいいのでしょうか?

f:id:kazuhironagai77:20200223203038p:plain

このチュートリアルをみると

f:id:kazuhironagai77:20200223203058p:plain

Attach Actor to Componentを使用してStatic mesh を装備させてるみたいです。

先月ぐらいに試しにcharacterに武器を装備させた事があったはずです。それの復習もしておきます。

2019-11-17にありました。

f:id:kazuhironagai77:20200223203118p:plain

先月じゃなくて3か月も前でした。もう3カ月以上もプロジェクトの修正をしていたんですね。全然進んでいなくて正直ショックです。

それはともかくとして、やり方を確認したら全然違うので、こちらのチュートリアルの方法をまず勉強してみます。

あれ、Attach Actor to Componentがないですね。

f:id:kazuhironagai77:20200223203136p:plain

このページによると、Attach Actor to Componentは廃止されたとあります。

そしてAttachToComponentを代わりに使用してとありました。

f:id:kazuhironagai77:20200223203156p:plain

はい。

使用します。

f:id:kazuhironagai77:20200223203215p:plain

以下のようにバーを追加します。

f:id:kazuhironagai77:20200223203233p:plain

テストします。

f:id:kazuhironagai77:20200223203309p:plain

あれ、装備していない。

Location RuleがKeep Relativeになっていますが、

f:id:kazuhironagai77:20200223203333p:plain

装備するbarのLocationが0に成ってなかったです。

f:id:kazuhironagai77:20200223203352p:plain

直します。

f:id:kazuhironagai77:20200223203409p:plain

もう一度テストします。

f:id:kazuhironagai77:20200223203436p:plain

細かい位置の調整が必要ですが装備はされました。

うん。まあいいでしょう。

今度は外します。

取りあえず、DetachFromComponetノードで外します。

f:id:kazuhironagai77:20200223203456p:plain

テストします。

f:id:kazuhironagai77:20200223203514p:plain

装備しているのが、

f:id:kazuhironagai77:20200223203547p:plain

外れました。

一応出来ました。しかしこの方法だと武具のStatic mesh actorを静的にレベル上に作成する必要があります。

出来れば装備する時だけ動的に武具のStatic mesh actorを作成して、装備を外す時にはそのactorを破壊したいです。

色々試しましたが、以下の方法がよさそうです。

まず、ブループリントからStatic mesh actorを作成します。

f:id:kazuhironagai77:20200223203622p:plain

Static mesh にbarをセットします。

f:id:kazuhironagai77:20200223203640p:plain

サイズを調節して、Movableに変更します。

f:id:kazuhironagai77:20200223203705p:plain

Collision ResetをNoCollisionにセットします。

f:id:kazuhironagai77:20200223203742p:plain

名前はtestBar2としました。

f:id:kazuhironagai77:20200223203808p:plain

以下に示したようにEを押すとこのアクターをスパンして、プレイヤーの操作するキャラクターのソケットに装備します。一回だけ作成するようにBoolean変数であるequippedを追加しています。

f:id:kazuhironagai77:20200223203859p:plain

Rを押すと作成したstatic mesh actorを破壊します。

f:id:kazuhironagai77:20200223203919p:plain

テストします。

f:id:kazuhironagai77:20200223203939p:plain

Eを押すと前と同じようにbarを装備しました。

f:id:kazuhironagai77:20200223203956p:plain

Rを押したらbarが消えました。

この方法で武具を装備してみます。

2.実際の装備

取りあえずSword01SMを装備出来るようにします。

f:id:kazuhironagai77:20200223204049p:plain

まず、Static mesh actorを作成します。名前はShortSwordSmallとします。

f:id:kazuhironagai77:20200223204109p:plain

作成したStatic mesh actorのStatic meshにSword01SMをセットし

f:id:kazuhironagai77:20200223204126p:plain

Movableを選択し、

f:id:kazuhironagai77:20200223204207p:plain

NoCollisionを選択します。

f:id:kazuhironagai77:20200223204231p:plain

FieldPlayerには素手の武器を装備するためのソケットが用意されていたのでそれを利用します。

f:id:kazuhironagai77:20200223204254p:plain

ソケットの位置を変えずに剣を装備すると歩くたびに剣がFieldPlayerの顔に刺さるのでソケットの位置を大幅に移動しました。

f:id:kazuhironagai77:20200223204328p:plain

その結果、剣を握る事は出来なくなりました。

f:id:kazuhironagai77:20200223204348p:plain

細かい調整は後で考えます。

Weaponウィジェットで武器を装備した時に、Static mesh actorであるShortSwordSmallをspawnしてそれをFieldPlayerのソケット、hand_lSocketにセットします。

f:id:kazuhironagai77:20200223204427p:plain

この時、作成したStatic mesh actorを保持する変数はWeaponウィジェット内で作成すると、後でアクセスする事が非常に難しくなるので、FieldPlayer内に作成しました。

f:id:kazuhironagai77:20200223204458p:plain

あまりFieldPlayer内の変数を増やしたくないので、この変数はGameModeに移すかもしれません。

武器を外すを押した時は、以下に示したようにShortSwordSmallアクターを破壊するようにしました。

f:id:kazuhironagai77:20200223204556p:plain

テストします。

武器を装備しました。

f:id:kazuhironagai77:20200223204623p:plain

FieldPlayerを見てみます。

f:id:kazuhironagai77:20200223204656p:plain

剣を装備しています。

今度ははずすボタンを押しました。

f:id:kazuhironagai77:20200223204720p:plain

FieldPlayerをもう一度見てみます。

f:id:kazuhironagai77:20200223204742p:plain

剣の装備を外しています。

第一段階としては成功です。

3.次のステップ

取りあえず、武器としてSword01SMを装備したり外したりする事は出来る様になりました。

次に行うべき内容を考えてみます。

  • 防具を装備したり外したり出来る様にする。
  • 装備する武器に応じて、表示される武器を変える。
  • ワープしても装備したままにする。

1と3はすぐに出来るので、まずそれをしてから2について考えます。

その前に剣を振るアニメーションを確認しておこうと思って開いたら、盾側に剣を装備していました。これも直します。

f:id:kazuhironagai77:20200223204827p:plain

4.剣を持つ手を逆にする。

しました。更に、ソケットの位置や回転も変えました。

f:id:kazuhironagai77:20200223204849p:plain

剣を振るモーションは非常にカッコイイです。しかし

f:id:kazuhironagai77:20200223204927p:plain

走る時に剣が体に刺さっています。この問題は後で考えます。

因みに、剣を持って走るモーションはあります。

f:id:kazuhironagai77:20200223204948p:plain

5.防具を装備したり外したり出来る様にする。

防具は武器の装備と基本的に同じなので、さっさとやってしまいます。

まず、Static mesh actorを作成します。名前はWoodShieldSmallとします。

f:id:kazuhironagai77:20200223205007p:plain

武器の場合と同じように設定を変えます。

f:id:kazuhironagai77:20200223205101p:plain

f:id:kazuhironagai77:20200223205107p:plain

f:id:kazuhironagai77:20200223205115p:plain

次に、FieldPlayerのソケットを調節します。

f:id:kazuhironagai77:20200223205138p:plain

f:id:kazuhironagai77:20200223205145p:plain

f:id:kazuhironagai77:20200223205152p:plain

f:id:kazuhironagai77:20200223205159p:plain

中々カッコイイですね。

コードも武器と全く同じ方法で組みます。

f:id:kazuhironagai77:20200223205226p:plain

f:id:kazuhironagai77:20200223205233p:plain

テストします。

f:id:kazuhironagai77:20200223205326p:plain

装備しています。

外すボタンを押します。

綺麗に外れました。成功ですね。

7.ワープしても装備したままにする。

試しにワープしましたが、装備した武具は跡形もなく消えました。

f:id:kazuhironagai77:20200223205358p:plain

今回はまだ、武器と防具の種類が一つずつなので、もし武器を装備していたら、短剣(小)を表示、もし防具を装備していたら、木の盾(小)を表示とするコードを書きました。

f:id:kazuhironagai77:20200223205424p:plain

テストします。

f:id:kazuhironagai77:20200223205438p:plain

今、武器と防具を装備しています。これからワープします。

f:id:kazuhironagai77:20200223205455p:plain

ワープした後も、武器と防具を装備しています。成功です。

8.装備する武器に応じて、表示される武器を変える。

これはどうのように整理するのが、効率が良いのかまだ分からないので、一週間ほど考えてみて来週やります。

まとめと感想

今週は、何かあんまり集中しなくて一寸しか進まなかったです。

久しぶりに、キャラクターのモーションのアニメーションを見たら、装備する武器によって別々のアニメーションが用意されていました。これらのアニメーションも使用したいです。装備する武器によってモーションのアニメーションを変える方法を勉強する必要が出て来ました。

ブループリントから武器を装備するのは、結構大変な事と予想していましたが、調べてたらUE4ブループリントでは結構基本みたいですね。今回のやり方が本当に正しいのかは分かりませんが結構簡単でした。