ねのぷろ! ~げーむ・ぷろぐらみんぐ・ぶろぐ〜

プログラミングやゲームについてだらだら書きます。https://twitter.com/nenowawon

Unity Layerの管理について

こんにちは。ネノワヲンです。 今回は、Layer管理についてのお話です。

値の持ち方

レイヤーを、enumで管理しています。

   /// <summary>
    /// レイヤー名と番号
    /// </summary>
    public enum Layer
    {
        Ground = 8,
        Player = 9,
        HangObject = 10,
        AttackPoint = 11,
        Hook = 12,
        Enemy = 13,
        MiniMap = 14,
        PlayerFace = 15,
        Guide = 16,
        EnemyBase = 17,
        Goal = 18
    }

unityではレイヤーはintで使うので、直接intにできるenumだと管理がしやすいです。

LayerMaskの管理

/// <summary>
    /// フックの衝突レイヤー
    /// </summary>
    public const int hookCol = (1 << (int)Layer.Ground | 1 << (int)Layer.HangObject | 1 << (int)Layer.AttackPoint | 1 << (int)Layer.Enemy);

    /// <summary>
    /// カメラとの障害物判定のマスク
    /// </summary>
    public const int cameraBlockCheck = ~(1 << (int)Layer.Player | 1 << (int)Layer.Hook | 1 << (int)Layer.Enemy);

    /// <summary>
    /// 敵の本体の衝突レイヤー
    /// </summary>
    public const int enemyBaseCol = (1 << (int)Layer.Ground | 1 << (int)Layer.EnemyBase);

Raycastの際に使用するMaskの値もあらかじめ格納しておくことで、管理が楽になります。