<前文>
今週は、調子が悪くて週末ずっと寝てました。そんな中で勉強したのでちょっとオカシな所があるかもしれません。
<本文>
<目的>
「Unreal Engine4.xを使用してRPGを作成する」の8章、在庫数とアイテムの使用(Inventory Population and Item Use)を勉強します。
この章では、以下の事をします。
- フィールドプレイヤーのブーリアンの作成(Creating the Field Player Boolean)
- インベントリースクリーンがオンかオフかどうかを決定する(Determining whether the inventory screen is on or off)
- インベントリーと店のアイテムの論理的な違い(Logical difference between inventory and shop items)
- インベントリースクリーンの完成(Finishing the inventory screen)
- アイテムの購入(Buying item)
- アイテムの使用(Using the item)
教科書の前置きに色々説明がありましたが、今一ピンと来ません。やりながら理解していきましょう。
<方法と結果>
<Step.0>
まず、サンプルコードを解凍します。
もう、普通に出来ましたね。
<Step.1>
フィールドプレイヤーのブーリアンの作成(Creating the Field Player Boolean)
フィールドプレイヤーのイベントグラフ内に新しいブーリアン変数を作成します。
教科書にはfield PlayerはContent | Blueprints | Charactersにあると書かれていましたが、私のプロジェクトではContent | Blueprints内にありました。直しておいた方がいいのかそのままの方がいいのか悩みますね。そのままにします。
教科書にブーリアン変数の名前が書かれていないみたいですね。唯一それらしきのはinventoryScreenですが、今一、確信が持てません。
早速サンプルコードで確認してみます。
inventoryScreenでした。
ちなみに、教科書の図が以下に示すようになっていたのですが、
多分、間違っていますね。
以下に示すように
inventoryScreenブーリアン変数をフィールドプレイヤー内に作成しました。
<Step.2>
インベントリースクリーンがオンかオフかどうかを決定する(Determining whether the inventory screen is on or off)
インベントリースクリーンがオンかオフかどうかを確認します。
あれ、もう二節目になりました。ひょっとすると8章は短いのかもしれません。
Determineなので決定すると訳しましたが、確認するぐらいが適切な気がします。しかしDetermineに確認すると言う訳はないですね。
教科書通りに作成しました。流石にBPまで逐一記録する気はないので結果だけ表示します。
<Step.3>
インベントリーと店のアイテムの論理的な違い(Logical difference between inventory and shop items)
Itemブループリント内のボタンに何かの機能を追加するみたいです。
これも教科書通りに作成しました。
最後まで作成しても良かったのですが区切りがいいのでStep.3はここで終わりにします。
<Step.4>
フィールドプレイヤーのイベントグラフ内にarrayItemと言う名前のテキストの配列を作成します。
はい。
出来ました。
<Step.5>
インベントリースクリーンの完成(Finishing the inventory screen)
Pause_InventoryブループリントにarrayItem変数を使用した機能を追加します。
はい。
出来ました。
一応、サンプルコードで確認します。
最後の部分はまだ作成していないから除外して比較すると同じですね。
<Step.6>
AddChildの部分を追加します。
これでフィールドプレイヤーの持つアイテムがPause_Inventoryウィジェット内のScrollBox_Inventoryに表示されるはずです。
<Step.7>
アイテムの購入(Buying item)
Itemブループリント内のボタンの機能の追加を行います。
出来ました。
うーん。この辺は正直、自分で考えて作成したいですね。考察で、自分で作成するためには、考えなければならないポイントを考えたいと思います。
<Step.8>
テストしてみます。
買えない。
お金持ってなかったです。
うーん。今回のテストだけなので、Portionの値段を-10 goldにしちゃいます。
これで試してみます。
PortionをクリックしたらGoldが10に代わりました。買えたみたいですね。
Inventoryを開いて見た所、Portionが追加されています。
今度は、Portionを3つ買って見ました。
Inventoryを開くとPortionが3つ表示されています。これは期待した通りに表示されていますが、Portionx3の方が、ユーザーに親切と思われます。改良が必要ですね。
今度はEtherも買ってみます。
問題ないですね。
<Step.9>
アイテムの使用(Using the item)
Itemブループリント内のボタンの機能内のTarget Inventory ScreenがTrueだった場合の機能を追加します。
出来ました。
教科書にも書かれていた通り、このやり方ではetherには対応していません。実際に使用する場合には改良が必要ですね。
<Step.10>
テストします。
取りあえず、2つほどポーションを買いました。
使用してみると、見事に消えました。しかし元々HPがMAXなのでPortionが効いているのかわかりませんね。
良い事を思いつきました。Portionの効果をHP‐10に変更しました。
今度はPortionを使用するとHPが10下がりましたので成功ですね。
このデータシートの値を変更する事で、アイテムの効果を、プログラムをいじる事なく変更出来るのは、大変画期的ですね。「Game Programming Patterns 」に、この方法でゲームをデザインしないとゲームデザイナーがゲームのバランスを調節する段階で、全ての他の作業を中止する必要が出て来てゲームが完成しなくなる。と書かれていたのですが、その本を読んだときには、どのように直したらいいかの部分が理解出来なくて、ちょっと困っていました。それがこの教科書で勉強する事で具体的な方法で出来るようになったので、この教科書で勉強した価値はあったと言えますね。この辺もちょっと考察したいです。
<考察>
ここまで、インベントリーのシステムが完成すると、自分で独自のインベントリーシステムを作成したくなります。今回は、自分で独自のインベントリーシステムを作成する時に何を考えて作成しないといけないのかを考察したいと思います。
1.データシートの活用
- データシートでアイテムの効果や酒類を一括管理しないと、アイテムの効果の値を変化した場合に、いちいちコンパイルする必要が生じてゲームが完成しない可能性があるみたいです。のでデータシートでの管理は必須だと思います。
2.C++で各部分とブループリントで書く部分の分担
- まず、基本の考え方から復習しますが、デザイナーがより良いデザインをするために変更可能な部分はブループリントで作成、それ以外はC++で作成。が基本です。
- これを考えながら教科書のインベントリーシステムのどこがC++で作成されていのか、ブループリントで作成されているのは何処からかを調べる必要があります。
- 調べた後で、改良出来る点を考えます。
3.UIの改良
- まずアイテムのイラストは追加したいです。
- スマートホンなどのPC以外のデバイスにも対応出来るUIにしたい。
- KUROとHealerが常に表示されているが、この部分にも子供のウィジェットを使用して、パーティーのメンバーが増えたり減ったりした場合の変更に対応した表示にしたいです。
4.他の機種にも対応
- 3.UIの改良でも述べましたが、兎に角、アンドロイドアプリとして使用可能なインベントリーシステムにしたいです。
取り敢えず、これくらいですかね。
ワークフローも考えてみたのですが、ちょっと複雑すぎて挫折しました。片手間に出来るものではなかったですね。
<感想とまとめ>
今週は作業的には簡単でしたが、簡単になったのはこれまでのゲームの設計がしっかりしていたからです。その設計部分をしっかり理解しておかないと、大切な部分の勉強がおろそかになってしますと思いました。