【趣味】【ゲーム開発】2Dクオータービューに3Dスポットライトを適応する応用

この記事の目的

 

今回の記事では、このクオータービューのマス目管理された
2次元の世界に、3次元のスポットライトを用いて、
懐中電灯で照らしているような表現の実装方法を紹介します。

 

◎クオータービューとは

2Dゲームのビジュアルにクオータービューというものがあります。
RPGツクールなどでよく見かけるような、
正方形のマス目を並べた世界ではなく、
ひし形のマス目を並べた世界です。
その特徴は、2Dの世界がより立体的に見えるということです。

Unityの機能を利用してクオータービューのマス目管理を行う場合、
“IsometricGrid”というシステムがあります。
これを利用せずとも、スプライトで自前実装することも可能です。

 

◎クオータービューの基本概念

まず基本的な概念として、クオータービューでは
「奥にあるオブジェクトから順に描画する」ということが必要です。

ここでいう「奥」とは、2次元世界なので “Y軸” です。
“Y軸”の値が大きいものから順に描画します。

しかし、様々な問題で描画関係が前後してしまう不具合があります。
それを解決する方法はこちらの記事をどうぞ。

ここで解説されている方法は、いわゆる2次元世界に “Z軸” の概念を追加し、
通常の “Y軸” に+α “Z軸” の値の大きなものから順に描画する、応用的な対処です。
なので、2次元世界ですがZ軸の概念を付与することになります。

※ここ重要です。

 

◎基本的なクオータービューにスポットライトを適応

先ほど、クオータービューは2次元世界だといいました。
なので、3次元世界にあるスポットライトで照らしてしまうと、

本来、建物の陰に隠れてほしいスポットライトの光が、
表側で照らされてしまうこともあります。

その対処方法の一つとして、
クオータービューにZ座標の概念を加える方法があります。

その対処は単純です。
ライトで照らしたいオブジェクトをライトよりもZ軸で奥に。
ライトで照らしたくないオブジェクトをライトよりもZ軸で手前に
置いていけばいいのです。

 

◎競合したZ軸の扱いの棲み分け

…?

ここでまずいなと思った方は勘がいいです。

クオータービューの不具合対応で追加したZ軸の概念と
スポットライトで照らす場合と照らさない場合を
判断するためのZ軸の概念が競合しています。

棲み分けのためのフォーマットを考えてみましょう。

この棲み分けをすれば、競合の問題は無くなりそうですね。

 

ライトの位置により建物の描画順を変える(本題)

 

さて、大体の問題は片付きましたが、まだ問題はあります。

クオータービューの建物は、
建物よりも手前にライトがある場合は照らしたいけれど、
建物よりも奥にライトがある場合は照らしたくないです。
この切り替えが必要です。

 

◎スクリプト

はい。
その切り替えのためのスクリプトがこちらです。

 

◎このスクリプトの使い方

①このスクリプトを建物のオブジェクトに付けます。

建物ごとに分けてそれぞれ付けます

 

②Inspectorで画像のようにTransformを設定します。

※BorderParentは全ての境界線の位置をまとめて動かすための空のTransformです。
※TargetTransformはここではスポットライトのTransformを設定して下さい。

 

 

③”境界線”の設定をします。

Sceneウィンドウでプレビューできます。

この画像のような見た目になるように設定してください。

 

④”対象のZ座標設定”を設定します。

・Z Pos When Over X Border
 X軸境界線を越えている(プレビューの赤い線よりも上にTargetTransformがある)ときのZ座標
・Z Pos When Under Y Border
 X軸境界線を越えていない(プレビューの赤い線よりも下にTargetTransformがある)ときのZ座標

 

◎実行結果イメージ

このような結果になれば、スクリプトの導入は成功です。

 

終わりに

 

以上です。
まずは一度挙動を試してみてください。

わからないことや不具合があればご連絡ください。