Unityに簡易的な物理判定用レイヤーを追加するためのライブラリです。
Unityレイヤーはカメラレイヤーと物理レイヤーの二つの用途があるため、しばしばレイヤー数が足りなくなる事があります。
そこで物理レイヤーだけ別の手段を用いる事でUnityレイヤーから分離させ、レイヤー数不足を改善するのが目的です。
方針としてはUnityのColliderはPhysics.IgnoreCollision
関数によってCollider同士の衝突を無効にする事が出来ます。
上記関数を活用して簡易的な物理レイヤーを実現します。
- PhysicsLayers/Prefabs/Layers Manager.prefabをゲーム空間に置いてください。
- LayersManagerコンポーネントで物理レイヤーと衝突判定を設定してください。
- Physics Layers項目で物理レイヤーの追加・削除・名前変更が出来ます。
- Collision Infos項目で各レイヤーとの衝突判定の設定を出来ます。
- 下記リストを元にして、物理判定を行うゲームオブジェクトにコンポーネントをアタッチしてください。
- 三次元用の物理レイヤー : PhysicsLayer.cs
- 二次元用の物理レイヤー : PhysicsLayer2D.cs
- 三次元用のUnityレイヤー : UnityLayer.cs
- 二次元用のUnityレイヤー : UnityLayer2D.cs
- PhysicsLayers/Scripts/Layers/ フォルダに入っています。
- Unityレイヤー用コンポーネントは既にある程度開発が進んでしまっているプロジェクトにも導入する事が出来るようにするための物なので、初期開発の段階から導入している場合は明確な用途はありません。
より詳しい使い方はExampleを参照してください。
- AutoManagemenetが有効の場合は、自動で各種設定が行われます。
- Awakeのタイミングで衝突判定の設定が行われます。
- OnDestroyのタイミングで管理下から外されます。
- 物理レイヤーのレイヤーIDは、Unityレイヤーの最大値の31の次の32から始まります。
- 物理レイヤーのレイヤー名は空文字には出来ません。
各レイヤーの管理や衝突設定等を行います。
シングルトンを実装してありますので、LayersManager.Instance
でアクセス出来ます。
Unityレイヤーのレイヤー数
LayersManagerコンポーネントの実行タイミング
物理レイヤーに関する情報をまとめるクラスのインスタンスを取得
物理レイヤーの登録数
物理レイヤーのレイヤーIDとレイヤー名の一覧を組み合わせで取得
物理レイヤーのレイヤーID一覧を取得
物理レイヤーのレイヤー名一覧を取得
UnityレイヤーのレイヤーIDとレイヤー名の一覧を取得
Unityレイヤーの有効なレイヤーID一覧を取得
Unityレイヤーの有効なレイヤー名一覧を取得
Layerごとの初期キャッシュ数と、コンパクションをおこなうインターバルを設定
LayersManager.ExecutionOrder
より前のタイミングで呼び出すことで、初期値を実行時にプログラムから変更できる
レイヤーIDが衝突しないレイヤーを一覧で取得
レイヤーIDが物理レイヤーかどうか
レイヤーIDがUnityレイヤーかどうか
レイヤーIDが有効なIDかどうか
レイヤー名からレイヤーIDに変換 物理レイヤーとUnityレイヤーの両方に対応します
レイヤーIDからレイヤー名に変換 物理レイヤーとUnityレイヤーの両方に対応します
衝突判定の設定を行い、マネージメント対象に加える
衝突判定の設定を行い、マネージメント対象に加える
マネージメント対象から外す
マネージメント対象から外す
衝突判定の設定を初期化する
衝突判定の設定を初期化する
UnityのLayerMaskと同様に、レイヤーIDを保持出来る構造体です。
ただし、UnityのLayerMaskとは違いマスキング機能は実装されていません。
レイヤーID
レイヤーIDから物理レイヤー名を取得
レイヤー名から物理レイヤーIDを取得
各種レイヤー用クラスが継承している抽象クラスです。
レイヤーID
自動管理を行うかどうか
レイヤーIDを変更する
衝突判定も再設定されます
衝突判定の設定を手動で行う
衝突判定の設定を手動でマネージメント対象から外す
衝突判定の設定を手動で初期化する