WisdomSoft - for your serial experiences.

レイヤー

オブジェクトをレイヤーに分け、指定したレイヤーに所属するオブジェクトの表示または非表示を制御できます。

オブジェクトの層を分離する

主にデザイン時の都合であることが多いのですが、オブジェクトをタグや階層とは別の論理的な重ね合わせで管理したいことがあります。例えば「背景」「障害物」「演出用オブジェクト」などです。

Unity にはレイヤーと呼ばれる機能があり、オブジェクトは任意のレイヤーの属することができます。Unity エディタ上で特定のレイヤーを非表示にするということができるほか、ゲームを描画するときのカメラでもレイヤー別のマスク機能があります。

オブジェクトのレイヤーの Unity エディタ上で設定するには「Inspector」ウィンドウの上部にある「Layer」ドロップボックスをクリックし、表示されたリストの中から選択します。

図1 レイヤーの選択
レイヤーの選択

ユーザー定義のレイヤを追加することもできます。新しいレイヤーを追加するには図1のドロップダウンリストから「Add Layer...」項目を選択してください。「Tag Manager」が表示され、ここにレイヤーが一覧されています。

図2 レイヤーの追加
レイヤーの追加

レイヤーは名前ではなく番号で識別されます。0 番から 7 番までは組み込みの Builtin Layer として定義済みです。ユーザー定義のレイヤーは User Layer 8 より下の 8 番以降に指定します。Unity エディタ上では名前で識別できますが、スクリプトからは単純な番号で管理します。

レイヤーの応用例として、Unity エディタ上のシーンで特定のレイヤーだけを非表示にするということができます。画面右上にある「Layer」コンボボックスをクリックするとレイヤーの一覧が表示され、チェックされている項目だけがシーン上に表示されます。

図3 レイヤーのマスク
レイヤーのマスク

作業中、特定のレイヤーだけを表示し、編集しない不要なレイヤーを非表示にすることで、誤ったオブジェクトを選択するといった面倒を避けられます。

スクリプトからオブジェクトのレイヤーを制御するには layer プロパティを利用します。

GameObject クラス layer プロパティ
public int layer { get; set; }

このプロパティは、オブジェクトのレイヤーを番号で表します。Default レイヤーは 0 番で表されます。

コード1
using UnityEngine;

public class Test : MonoBehaviour
{
	void Start()
	{
		gameObject.layer = 8;
	}
}
実行結果
コード1 実行結果

コード1は単にオブジェクトのレイヤーをユーザー定義の 8 番に変更するというスクリプトです。実行すると、このスクリプトが設定されているオブジェクトのレイヤー番号が 8 番に変更されます。