2Dでカメラで見せたくない部分を見せない(Tilemap依存版)

投稿日:2018/10/08 投稿者:sai

Read in 3 minutes

フィールドを作っていない部分が出るとかっこ悪いので見せないようにしたい. 手段はいろいろあるので簡単でした.

検索して初めに出てきた手段はCinemachineを使う【Unity】2Dのカメラがステージ外を映さないようにする方法 ただCinemachineはオーバースペックな気もするのでひとまず保留.

ひとまずTilemapでフィールドを作っているのでtilemapをもとにした範囲で実施可能で,現状のカメラ追従プログラムから手軽に行ける手段でやってみた. これでだめだったらCinemachineにしてみるつもりだったができた.

プレーヤ追従

まず見せたくない部分を見せてしまうプログラムがこちら。これはメインカメラオブジェクトに付与するスクリプト.内容としてはカメラの位置を強制的に追従対象の位置に毎周期置き換えているだけ.

この状態だとただプレーヤに追従しているため見せたくない部分が見えてしまう。

見せたくない部分に行かせない

置き換える際に場所のクランプをする.ただそれだけ. 流れとしては 1. フィールドの範囲を取得しておく 2. X,Yの端からカメラの表示範囲を考慮してクランプする地点を調べる 3. カメラの位置をずらす処理の前に2番で求めた地点を超えていないかを調べてから追従する位置を決める

フィールドの範囲を取得しておく

現在のフィールドはTileMapで構成されているためその大きさを取得すればよい. TilemapにはlocalBounds要素があり,その中に中心と中心から端までの長さが入っているのでそれを使う.

この方式でやる限りカメラの範囲をフィールドごとに変更しなくとも(サンプルコードでは)groundの名前が付いたtilemapがあれば自動でフィールドの範囲を守ってくれるので違うフィールドを作るのが楽と予想。フィールド追加をそれ程していないので効果のほどは不明。

※camera.orthographicSizeとscreen_ratioは後述

Unity - Scripting API: Tilemap

X,Yの端からカメラの表示範囲を考慮してクランプする地点を調べる

フィールドの範囲だけではカメラの描画分が考慮できていないのでちょっとだけフィールド外が見えてしまう.そのためカメラが移す範囲を調べる.2Dなので楽. Unity - Scripting API: Camera

  • Y方向

 これは簡単でCamera.orthographicSizeをそのまま使うだけ

  • X方向

 こっちはちょっと厄介.Camera.orthographicSizeを流用するために画面のアスペクト比を求める必要がある.

 Unity - Scripting API: Screenこいつからよさげな奴を見繕う.

カメラの位置をずらす処理の前に2番で求めた地点を超えていないかを調べてからずらす位置を決める

ただif文で調べるだけ.戻り値にタプルを使っているのはただの手抜き。

結果

以下のコードでいい感じになった. 高性能にするのはまたいつか.


category: unity



カテゴリ

タグ

2Dでカメラで見せたくない部分を見せない(Tilemap依存版) | Homepage