sylph55
(sylph55)
1
初心者です。お世話になります。
BPについて調べていると、よく「大規模なものは依存関係に注意しないと後々大変なことになる」「依存性を下げないと危ない」などと出てきて、今の自分のやり方ではいけないのだろうか、と考えるようになりました。
今は、一つの変数を複数のBPで使用するというパターンが多いので
・複数のBPで使う変数は全てPlayerControllerBPに作っておく
・作った変数を使用したいBPでPlayerControllerBPをキャストし、変数を呼び出す
という方法をとっています。
このため多くのBPでPlayerControllerBPをキャストしており、様々な場面で呼び出した変数を使っている状態になっています。これだと依存関係が強くて重くなるのでしょうか?
現在は練習用の小規模なゲームを作っているためあまり問題を実感したことがないのですが、今後大規模なゲームを作った場合はこのままのやり方ではいけないのかなと悩んでいます。
長文で申し訳ありません。わかる方がいましたらご回答よろしくお願いします。
また、別の方法の方がいい、という場合そのノードの組み方も教えてくださるとありがたいです。
paperbag
(paperbag)
2
依存関係が多くなるとBlueprintEditor自体が重いと感じたり、コンパイルにかかる時間が長くなってしまいます。
Castを避ける方法として一般的なのはInterfaceを使うことです。
ですが、小規模なもので大きく問題だと感じていないのであれば今はそれで良いとも思います。
次のプロジェクトからInterfaceを活用してみたり、もう1つ練習用の小規模プロジェクトで練習するなど工夫されると良いでしょう。
YuukiOgino
(Yuuki_Ogino)
3
個人的な感想ですが、ケースバイケースです。
確かに依存度は減らしたほうがいいですが、逆に減らし過ぎたら後日ソースを見た時に追うのに時間がかかるということもあるので、「効果のあるやつだけ減らしてね」というのが個人的な意見です。
練習なら、なれるためにも依存度を減らしてみるのもいいかもしれません。
今回の件でしたらインターフェースをPlayerControllerBPに追加すれば、依存度は減ります。
どこでも変数を共通で使用する、ということであればPlayerControllerBPに持たせるのでなく、GameInstanceを継承して変数をもたせる、というのも手です。
http://mozpaca.hatenablog.com/entry/20161121/1479719751
↑こちら参考にしてみてください。
sylph55
(sylph55)
4
ご回答ありがとうございます。
Interfaceの練習をしてみたいと思います。
sylph55
(sylph55)
5
ご回答ありがとうございます。
知識不足で申し訳ないのですが、継承というのはプロジェクト設定内にあるGameInstanceClassに作ったGameInstanceBPを選択することでしょうか。
継承を調べると各BPの親クラスを変更するという内容も出てきて少し迷いました。
そのGameInstanceBPに変数を作り、Interfaceも追加すればよろしいでしょうか?
Interfaceは前に少し挑戦してみて失敗してるのですが、こちらの方法の方がよさそうならもう一度チャレンジしてみたいと思います。
YuukiOgino
(Yuuki_Ogino)
6
ああ、申し訳ございません。わかりにくい回答ですね。
「継承」をUE4のブループリントを例に簡単に説明します。
ブループリントを一度でも作ったことがあれば、以下の画像のように親クラスを選択するウィンドウが出ているのを見たことがあると思います。
この親クラスを選択して新しいブループリントを作る、という行為が「継承」になります。

ブループリントを開いたときに右上に「親クラス」というのがあります。これの意味は「GameInctance」というクラスを継承、つまりGameInctanceで使える機能をそのまま新しく作ったブループリントでも使うことができる、という意味です。
かなり大雑把なので、より正確な意味を知りたい場合は「プログラム 継承」で調べてみてください。
GameInctanceを継承したクラスにインターフェースを追加すれば、やったことないので推測ですが、依存度は減ると思います。
sylph55
(sylph55)
7
ご返答感謝します。非常に分かりやす内容にしてもらいとても助かりました。継承の解釈が間違っていたようで、もっとブループリントについて学習しないといけないと痛感しています、ご不便をおかけしました。
この方法でやってみたいと思います。ありがとうございました!