読者です 読者をやめる 読者になる 読者になる

妹でもわかるUnrealEngine4

毎日更新? 妹に説明するために書いてるけど、たまにわかってない場合もあるUnrealEngine4を中心としたゲーム制作の話。略すとイモリアル

毎日更新? 妹に説明するために書いてるけど、たまにわかってない場合もあるUnrealEngine4を中心としたゲーム制作の話。略すとイモリアル

Paper2Dのスプライトの重ね合わせ順

妹「横スクロール出来るようになったんだけど、なんか重なり方がおかしい気がする」

f:id:una_unagi:20150626013645g:plain

「えっ、もうこんなとこまで作ったの!?」

妹「なんか出来た」

「そうなんだ……重なり具合はこれどっちが上になるのが正しいの?」

妹「クローバー。配置はY軸をずらして手前に方に持ってきてるよ」

「たしかに。一時停止しても同じ場所にある。ということは別の設定があるんだろうなあ」

妹「でもそれっぽい設定は見当たらなかったんだよ。あったとしても英語だから多分わからないんだけど」

「検索した結果こういうのが出てきた」

https://answers.unrealengine.com/questions/198593/paper2d-sprite-object-is-sorting-visually-based-on.html

「ここの設定を変えればいいらしい」

妹「translucency……読めない……」

「トランスルーセンシーかな。多分。意味は半透明」

妹「キャラクターの絵を半透明にしてたっけ?」

「輪郭部分はそうなってるかもしれないけど、この場合それとは関係ない。半透明のポリゴンを重ねて表示するってのが、実は結構難しい技術で、ポリゴンをどういう順番で重ねるかで色んな方法がある。その重ねあわせ方を決める仕組みが2Dとも関係ある」

妹「手前の物が手前に見えればいいと思うんだけど」

「それはそうなんだけど、ポリゴン同士が斜めに重なったりするし、全てを一瞬で計算しなきゃいけないというのもあるから。初代プレステぐらいのゲームだと結構変な表示になってることがある。バグとかじゃなく性能の限界」

妹「わたしのパソコンはプレステより強いのか?」

「たぶんプレステ3と4の間ぐらいじゃないかな。とりあえず標準で3Dは綺麗に表示出来るようになってるみたいなんだけど、それが2Dには向いてない計算方法らしい」

妹「ふーん、ともかくここの設定をSort by projected zにすればいいんだな。でもZ軸じゃなくてY軸で並び替えたいんだけど……」

「あ、これはそのZとは違う用語。画面の手前にあるか奥にあるかを決める数字をzと呼んでる。ゲームエンジンによってXYZは違うけど、重ねあわせの計算の時の奥行きに関してはみんなzと言うんだよ。なんでかはよく知らないけど」

妹「知らないのかよ!」

「正確な由来とかは知らないけど、よく使われる言い方ではあるから、今回も調べる時はz orderとかz sortとか入れて検索したら出てきたんだよ」

妹「検索しても全然出てこなかった……で、結局zって書いてあるけど、実際はY軸の、見た目の通りになるってこと?」

「そうそう。もっと細かい設定をするならSet Along Axisを使ってもいい」

妹「細かい設定??? 普通に手前に表示してくれればそれでいいんだけど」

「いや例えば、Y軸の値が同じスプライト同士が重なった時どうするかとか」

妹「……ぶつかってはじけ飛ぶ?」

「そういう風に作ればそうなるけど、キャラが密集して戦うゲームとかもあるでしょ。かといってバラバラに重なると気持ち悪くなう。だから同じ奥行きのキャラは右側に居る方が手前に出るとか、何かしらルールがあるもんなんだよ」

妹「ブループリントで細かくY軸の数字を変えればいいのかな」

「それでもいいんだけど、Set Along Axisにして、その下のTranslucent Sort Axisも変えれば、そのへん自動的に出来るからブループリントに書かなくていい」

妹「あ、その設定欄は気になってた。ここは変えなくていいの?」

「これはSet Along Axisの時しか意味ないみたい。標準だとY軸が-1.0になってるけど、手前にあるやつが手前に来るという普通の設定。計算としてはそれぞれのスプライトのY座標に-1を掛けて、その結果で表示順が決まる。数字が小さい方が手前に来る」

妹「じゃあ-1じゃなくて、1にすると、奥のやつが手前に見える?」

「見える」

妹「じゃあじゃあ、-100とかにしたら?」

「それだけでは意味ないけど、Xが1でYが100とかだと、Y軸が同じ場合はX軸が小さい方、つまり左にある手前になる。あとX軸が100以上小さいと、そっちが手前になる」

妹「X軸が違ったらそもそも重ならないのでは?」

「重ねあわせを決めるのは基準になる点、アクターのロケーションパラメータだから、大きいスプライトだと中心位置が離れてても重なるよ」

妹「それを使って重ね合わせのルールを作るのか」

「一応そういう設定も出来るという話で、このゲームでは必要ないかもしれないけど」

妹「ともかくちゃんと表示されてよかったよかった……あれ? えび天の表示がおかしい……?」

※2017/1/31追記 こういう処理になるのは、マテリアルがTranslucentの場合です。(バージョン4.15現在)Maskedなど場合はこの設定通りの並び替えが行われません ↓関連記事 imoue.hatenablog.com