Paper2Dのスプライトの重ね合わせ順
妹「横スクロール出来るようになったんだけど、なんか重なり方がおかしい気がする」
「えっ、もうこんなとこまで作ったの!?」
妹「なんか出来た」
「そうなんだ……重なり具合はこれどっちが上になるのが正しいの?」
妹「クローバー。配置はY軸をずらして手前に方に持ってきてるよ」
「たしかに。一時停止しても同じ場所にある。ということは別の設定があるんだろうなあ」
妹「でもそれっぽい設定は見当たらなかったんだよ。あったとしても英語だから多分わからないんだけど」
「検索した結果こういうのが出てきた」
「ここの設定を変えればいいらしい」
妹「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