ぺんたんがゲーム開発やアプリ開発、最近の気になる話題、特にスマホやIT関連について語る場所

ぺんごや

Unity Unity2D Unity初心者

【Unity】オブジェクトの描画順。オブジェクトグループに別オブジェクトを割り込ませて描画する方法【2D】

投稿日:

やりたいこと。
2Dでゲームで画像のようにコタツのオブジェクトグループの間に猫を割り込ませるような描画をしたい。

親オブジェクトに子オブジェクトを複数入れて1つのキャラや物を作成することは多いと思います。
※ここではその作成した子オブジェクトをまとめた親オブジェクトを便宜上「オブジェクトグループ」と呼ぶことにします。

オブジェクトグループ同士の描画順はソーティンググループを設定してあげればいいのですが、子オブジェクトにソーティンググループを設定しても親オブジェクトのソーティンググループが優先されてしまい思った通りの描画順になりません。
※オブジェクトグループの下に隠れてしまう

そこで今回は画像のようにオブジェクトグループに割り込ませて別オブジェクトを描画する方法を紹介します。

オブジェクトグループに別オブジェクトを割りませる手順

2つのカメラを使うことで実現可能です。

  1. レイヤーの追加
  2. カメラを追加する
  3. 追加したカメラのカリングマスク、投影方法、深度などの設定
  4. 既存カメラのクリアフラグ、カリングマスクの設定
  5. 後ろ側に描画したいオブジェクトのレイヤーを変更

上記のような手順となります。

レイヤーの追加

後ろ側(奥側)に表示するオブジェクト用のレイヤーを追加します。
今回は「bg」という名前のレイヤーを追加します。

カメラを追加

ヒエラルキーウィンドウで右クリックし「カメラ」を選択し追加します。

追加したカメラの設定

カリングマスクを上記で追加したレイヤー「bg」のみチェックを変更します。
投影方法を「平行投影」に設定します。
サイズは既存のカメラと同じ値を設定します。今回は「6.4」にしています。
さらに深度を既存のカメラより小さい値に設定します。既存のカメラが「-1」なので、「-2」にしています。

カメラは深度の値が小さい順に描画をしていきます。
ですので今回のケースでは、追加したカメラの深度を既存カメラより小さい値にしたため、まず追加カメラが表示可能なものを描画し、そのあとに既存カメラが表示可能を描画する…という動作となります。

既存カメラの設定変更

クリアフラグを「深度バッファのみ」に変更します。

カリングマスクで追加したカメラに設定したレイヤーのチェックを外します。今回、追加カメラには「bg」を設定しているので、「bg」のチェックを外してします。

ちなみにカリングマスクとは、カメラで描画させたいレイヤーを指定する設定となります。

今回のケースでは、追加カメラで「bg」レイヤーを描画し、既存カメラで「bg」レイヤー以外のレイヤーを描画する設定となります。

後ろ側に描画したいオブジェクトの設定

画像のコタツオブジェクトの構造は「Furniture_Table」という親オブジェクトの中に「bg」というコタツじゅうたん用オブジェクトと「ObjectManager」というコタツテーブル用オブジェクトとなっています。

その中でコタツじゅうたんを後ろ側に描画したいので「gb」オブジェクトのレイヤーを、先ほど作成した「bg」レイヤーに変更します。

さらに、ゲームの背景用オブジェクトのレイヤーも変更します。
今回のケースですと、miro_roomというオブジェクトを背景用としているので、こちらのレイヤーを変更します。

スポンサードサーチ

動作確認

ここまで出来たら表示を「Scene」から「ゲーム」に変更したりゲームを実行して、意図したとおりに描画されているか確認します。

思った通りに描画されない場合は深度やレイヤーの設定が間違っている可能性があるので要チェックしてみてください。

スポンサードサーチ

アスペクト比対応のスクリプトを設定している場合

こちらのスクリプトを既存のカメラに設定している場合は、同じものを追加したカメラにも設定してください。
設定し忘れていると、アスペクト比の異なる画面で実行した際に描画がおかしくなってしまいます。

カメラを複数使うのは意外と便利かも

今回初めてカメラを追加してみましたが、なかなか融通が利きそうでいいかもですね。
複数カメラは他にも有効活用できそうなので、また色々試してみたいと思います。

-Unity, Unity2D, Unity初心者

Copyright© ぺんごや , 2019 All Rights Reserved Powered by STINGER.