原カバンは鞄のお店ではありません。

Unityを使ったゲーム制作のあれこれを綴っていきます。

【Unity】立体スライドパズルできるかな(検証編)

f:id:Karvan:20210831202728p:plain

100日後に○○

例のワニ以降、SNSで「#100日後に○○」とタグが付いた投稿が増えていて安易だなぁと思いつつ「#100日後に退職する47歳」の投稿を楽しみにしている皆さんこんにちは。
IT業界の土方作業を経験した方なら誰しも身に覚えのある話ばかりで、私も興味深く拝見させてもらっています。現場には顔を見せない上役や営業が電話やメールやらでどんどん口を出して混乱している現場を更に混乱させる有様はこの業界のあるあるですね。

 

会心の1ゲー

テレビ朝日で毎週木曜深夜に放送されている「会心の1ゲー」という番組で、私が以前unityroomに投稿した「Supra animus quo」というゲームを遊んでいただけたらしく、その模様が今週分の放送回で放送されるそうです。

 

tver.jp

また、同じくunityroomに投稿した「The two met」も9月分の放送で紹介して頂けるそうで誠にありがたい限りです。
以前よりこの番組ではunityroomの投稿ゲームをいくつか取り上げており、私も小耳にはさんでは内心羨ましく思っていたのですが、まさか二つもピックアップしてもらえるとは夢にも思っていなかったので驚くばかりです。残念ながら私の住んでいる地域では放送されていないのでTVerでの配信待ちになるのですが、配信されたらPCの前で正座して視聴したいと思います。

 

立体スライドパズル

さて、前回はRenderTextureでcameraの映像を表示させた平面を立方体の形状で分割させて、3D空間が分割された(ように見える)画面を作ることまでできました。

後はこれをスライパズルの要領で動かせばパズルの完成だと思っていたのですが・・・

f:id:Karvan:20210824195318g:plain



結果としては思った通りにはいきませんでした。理由は大きく二つほどあって、一つは分割した映像を違う位置へ違う位置へ動かしてみると

f:id:Karvan:20210831203505p:plain

こんな感じになります。3D空間が分割されたというよりは側面に映った映像が分割しているようにしか見えない。


各立方体の初期状態では見えていない面に対しては何も描画しないようにしているのですが、このため立方体の「中に」オブジェクトがあるようには見えず、立方体の「側面に」映っている用しか見ない。

f:id:Karvan:20210831203544p:plain

もちろん位置を動かした時に両面すべて表示させることもできるのですが、そうした場合も問題があって、それがもう一つの問題「ステンシルバッファを利用してマスキングした部分が二つの立方体で重なった場合に描画順を制御できない」という問題。

 

f:id:Karvan:20210831203818g:plain

上の動画を見て一瞬、「ん?」と不思議に思う箇所があると思います。
それもそのはずホール部分が中央下に来た時、上の立方体部分の中に下の立方体の「通常では見えない部分」の映像が見えています。

f:id:Karvan:20210831204105p:plain

この部分

 

これはステンシルバッファに書き込む描画順が「下の立方体→上の立方体」ではなく「上の立方体→下の立方体」となっているため、ステンシルバッファに書き込まれる値が「下の立方体のステンシル値」で上書され、結果として下の映像が映し出されているのだと思います。

調べてみるとunityでは不透明分の描画順はZ方向に厳密にソートされているわけでなくRenderQueueの値も影響するらしいので、厳密に描画順を決定するならこのRenderQueueを変える必要があるらしい。

 

とはいえ、これは静止画でなくパズルとして各立方体の位置を動かす必要があるため、RenderQueueの値で調整するのは難しいと思います。

パズル内の場所によってステンシルバッファに書き込む値を決めて参照時に「Greater/Less」でレンダリングするという手も考えたのですが、そもそもシェーダのステンシル値を動的に変えられるのかも不明で、う~ん、どうしよう。。。と悩んでいる最中です。





 

◇プライバシーポリシー

●個人情報の利用目的

当ブログでは、メールでのお問い合わせ、メールマガジンへの登録などの際に、名前(ハンドルネーム)、メールアドレス等の個人情報をご登録いただく場合がございます。

これらの個人情報は質問に対する回答や必要な情報を電子メールなどをでご連絡する場合に利用させていただくものであり、個人情報をご提供いただく際の目的以外では利用いたしません。

●個人情報の第三者への開示

当サイトでは、個人情報は適切に管理し、以下に該当する場合を除いて第三者に開示することはありません。

・本人のご了解がある場合
・法令等への協力のため、開示が必要となる場合

個人情報の開示、訂正、追加、削除、利用停止
ご本人からの個人データの開示、訂正、追加、削除、利用停止のご希望の場合には、ご本人であることを確認させていただいた上、速やかに対応させていただきます。

アクセス解析ツールについて

当サイトでは、Googleによるアクセス解析ツール「Googleアナリティクス」を利用しています。

このGoogleアナリティクスはトラフィックデータの収集のためにCookieを使用しています。このトラフィックデータは匿名で収集されており、個人を特定するものではありません。
この機能はCookieを無効にすることで収集を拒否することが出来ますので、お使いのブラウザの設定をご確認ください。

●免責事項

当サイトからリンクやバナーなどによって他のサイトに移動された場合、移動先サイトで提供される情報、サービス等について一切の責任を負いません。

当サイトのコンテンツ・情報につきまして、可能な限り正確な情報を掲載するよう努めておりますが、誤情報が入り込んだり、情報が古くなっていることもございます。

当サイトに掲載された内容によって生じた損害等の一切の責任を負いかねますのでご了承ください。

●プライバシーポリシーの変更について

当サイトは、個人情報に関して適用される日本の法令を遵守するとともに、本ポリシーの内容を適宜見直しその改善に努めます。

修正された最新のプライバシーポリシーは常に本ページにて開示されます。