サーチ…


レイヤー使用量

ユニティレイヤーはタグと似ていますが、相互作用が必要なオブジェクトや、特定の方法で動作するオブジェクトを定義するのに使用できますが、レイヤーは主にPhysicsクラスの関数で使用されます。Unity Documentation - Physics

レイヤーは整数で表され、以下のようにして関数に渡すことができます。

using UnityEngine;
class LayerExample {

    public int layer;

    void Start()
    {
        Collider[] colliders = Physics.OverlapSphere(transform.position, 5f, layer);
    }
}

この方法でレイヤーを使用すると、実行された計算で指定されたレイヤーを持つゲームオブジェクトを持つColliderだけが含まれます。これにより、ロジックをさらに単純化し、パフォーマンスを向上させます。

レイヤーマスク構造

LayerMask構造体は、問題の関数に整数を渡すのとほぼ同じように機能するインタフェースです。ただし、最大のメリットは、インスペクタのドロップダウンメニューから問題のレイヤーを選択できるようにすることです。

using UnityEngine;
class LayerMaskExample{

    public LayerMask mask;
    public Vector3 direction;

    void Start()
    {
        if(Physics.Raycast(transform.position, direction, 35f, mask))
        {
            Debug.Log("Raycast hit");
        }
    {
}

また、レイヤ名をインデックスまたはインデックスに変換するための複数の静的関数も用意されています。

using UnityEngine;
class NameToLayerExample{

    void Start()
    {
        int layerindex = LayerMask.NameToLayer("Obstacle");
    {
}

レイヤーチェックを容易にするために、以下の拡張メソッドを定義します。

public static bool IsInLayerMask(this GameObject @object, LayerMask layerMask)
{
    bool result = (1 << @object.layer & layerMask) == 0;

    return result;
}

このメソッドは、ゲームオブジェクトがレイアースマスク(エディタで選択)にあるかどうかをチェックすることを可能にします。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow