カテゴリの最新記事

他Blueprintの変数を参照する方法

前回で地形の作成ができるようになったので背景を作成していく。
背景を実装する構想としては
1:各Levelに背景情報を持っただけの空のアクタを配置(Managerとでも呼ぶ)
2:ManagerがPlayerの位置情報を取得
3:Playerの移動に合わせて背景を動かす
という、書くだけなら単純なものである。いや、実装にあたって苦労したのは自分の頭が弱いからというだけの話ではあるのだが……。

で、ManagerがPlayerの位置情報を取得するにはどうすればいいのか。
どのアクターを参照するのかが明確であるのならばCastノード使うのが簡単だ。Castノードを使うと以降のノードにおいて、Castした先の関数などを扱うことができるようになる。

WS2016-07-14_22_27_16

まずはPlayer側で自身の位置情報を取得する。そしてその情報を出力する関数を作成する。
画像の通り構造は非常に単純である。
が、位置情報の取得は関数内で行った方がいいのか?しかし沢山のアクターから関数が呼ばれることになれば何度もGetActorLocationノードが実行されることになるからパフォーマンス的には悪いのか?など、内部処理の問題を考えるともしかしたらそう単純に考えない方が良い問題なのかもしれない。世のプログラマ達は高パフォーマンスを追及するためにこういう問題に日々取り組んでいることであろう。
もっとも私はプログラムなど門外漢であるので、そういった知識をつけるとなるとそれこそ膨大な時間を費やすことになるのは明白。プログラマを目指すわけではないのだからその時間をもっと別のことに使った方が有意義なんじゃないか。とりあえず今回はこれで動くのだからこれで行こう。Player自身で位置情報をもしかしたら使うかもしれないということで、Playerに位置情報を入れておく変数を作り、関数ではその変数を出力するのみとした。

WS2016-07-14_22_28_50

Manager側のノード配置は画像の通りとする(AddActorWorldOffsetノードは実装したい内容からすると誤りであるが、ここで書きたいのは変数の扱い方なので関数以降のノードはスルーしてほしい)。
CastノードのObjectピンはGetPlayerCharacterノードを繋ぐ。Cast先のアクターと一致したObjectでないとCastできないらしい。なんとなくはわかるが仕組みの理解は及んでない。
んで、CastしたらCast先(つまりPlayer)の関数が使えるようになる。この関数からはPlayerの位置情報が出力されているので、その出力ピンを使いたいノードまで引っ張っていけば良い。
と、このような流れで他のBlueprintの変数を読み取ることができる。

最初に変数の受け渡し方を考えたとき、PlayerからManagerに情報を渡すのか、その逆なのか、描画処理はManagerが受け持つのか、Playerなのか、などなど、どう実装すればいいのかわからなかったが、とりあえずは先に書いた通りにManagerがPlayerの変数を取得し、Manager側で描画処理を行うという方法に落ち着いた。というかPlayer側からManagerの変数や関数にアクセスする方法がよくわからなかったのでそうせざるを得なかっただけなのだが。背景表示のノード配置にしてもあまりスマートではない形なのだが、それはまた次の機会に書くこととする。

「Levelに直接背景置けばいいじゃん?」という意見は至極尤もではあるのだが、垂直投影(Orthographic)のカメラではただ画面奥・手前にスプライトを設置するだけでは多重スクロールは実装できない。そのためSpriteを動かす必要があり、且つSpriteを一つ一つ動かすのはあまりに面倒なので、Spriteと多重スクロール用の移動速度の入力だけで他Levelでも使い回せるようなアクターを作りたかったのだ。

UE4

Posted by むいか