へくれすブログ

UnityとC#中心の備忘録です

【Unity】画面の縁を当たり判定のある壁にする方法

正確には撮影範囲をColliderで囲う方法についてです。
前提としてCamera.orthographicSizeを使用しますので2D専用のTipsです。

f:id:hecres:20180304210016j:plain

中央の白い四角が撮影範囲で、周りの緑の四角がBoxCollider2D×4です。
撮影範囲の各辺にBoxCollider2Dを隣接させています。

オブジェクトサイズ=画面サイズにする方法

ステップ1です。

RectTransformであればStretch機能を使って簡単に実現できますが、
素のTransformコンポーネントだとひと手間掛かります。

Camera.orthographicSizeを基にワールド座標系でのカメラ撮影範囲を算出しましょう。

上記処理をAwakeやStartで呼び出してみましょう。

空オブジェクトだとサイズが分かりにくいのでBoxCollider2Dをアタッチしてみてください。
撮影範囲の白い四角とColliderの緑の四角がぴったり重なっているのではないでしょうか。

レイアウトの確認で画面サイズを変えるなど、動的にフィットさせたい場合はUpdate内で呼び出してください。
(ただしその場合「衝撃でカメラが揺れる」などの演出にも追従します)

オブジェクトに沿ってColliderを配置する方法

ステップ2です。

ステップ1と比べて非常に簡単です。
コードを1行も書く必要がありません。

サイズを変化させるオブジェクトの子として
BoxCollider2DをアタッチしたTop、Bottom、Left、Rightの4オブジェクトを用意します。

そしてそれらのPositionを以下のように設定します。

f:id:hecres:20180304211513j:plain

以上です。

あとは親オブジェクトのスケールに合わせて変化するため、
画面サイズがどう変わっても上下左右綺麗に追従してくれます。

画面の縁=壁にしたいと考えたときはもっと苦労するかと思っていたのですが
思いのほか簡単に実装できました。

Unity様様です。

参考/関連

nn-hokuson.hatenablog.com

この記事でのバージョン

Version
Unity 2017.3.0p4
Unity/PlayerSettings/Scripting Runtime Version Experimental (.NET 4.6 Equivalent)