unity_chan_logo

レイヤー

概要

Unityにはレイヤーと呼ばれるある種のグループ分けの機能が用意されています。
レイヤーは主に描画で使用されており、特定のゲームオブジェクトのみを表示したり、
逆に非表示にしたりできます。
他にもキャラクター、ステージギミックなどのゲームオブジェクトを
グループ単位で分けたい場合などで使用されています。

	unity_0168
	unity_0168

基本

表示

Layer情報は以下の方法で表示可能です。 ・上段メニュー => Edit => ProjectSettings => Tags and Layers unity_0169 unity_0169 ・UnityEditor右側「Layers」=> Edit Layers  ※Unityのバージョンによって位置が異なる可能性があります。 unity_0170 unity_0170 ・適当なゲームオブジェクトクリック => Inspector上段 => Layerドロップダウン => Add Layers unity_0171 unity_0171

初期レイヤー

Unityでは最初からいくつかのレイヤーが用意されています。 unity_0178 unity_0178 上の絵の「Builtin Layer 0 ~ 7」まではUnityが用意しているレイヤーです。 空白の部分がありますが、今後設定される可能性があるので、 ここにユーザー用のレイヤーを追加することはできません。

追加

レイヤーを追加するにはUserLayerの8~31のいずれかに 追加するレイヤーの名前を入力するだけで可能です。 unity_0175 unity_0175 上の絵ではUserLayer8に「Characters」というレイヤーを追加しています。

削除

レイヤーの削除は追加済みのレイヤーの入力情報を消すだけです。 unity_0176 unity_0176

割り当て

ゲームオブジェクトへのレイヤーの割り当ては Inspectorの上部にあるLayerのドロップダウンリストから選択します。 ※現在割り当て中のレイヤーにはチェックが入っています。 unity_0177 unity_0177

割り当ての注意点

ユーザー登録のレイヤーを割り当てている状態で該当するレイヤーを削除した場合、 割り当てたレイヤーは、割り当てられたままとなります。 unity_0179 unity_0179

スクリプト

レイヤーの設定

各ゲームオブジェクトのレイヤー情報はgameObjectのlayerが持っています。 layerの値は0~31までの数値が入っており、この値はUnityの「Layer」の 内容とリンクしています。 例: // レイヤー番号0番を指定 gameObject.layer = 0;

文字列によるレイヤー番号の取得

LayerMaskクラスのNameToLayerメソッドを使用するとレイヤーの番号を 文字列から取得することが可能です。 メソッド名: NameToLayer 戻り値: 成功:0~31 失敗:-1(該当する名前なし) 引数: string name 取得したい番号の文字列 内容: 引数で指定した文字列と一致する文字列をLayerから探し出し その結果(成功:0~31、失敗:-1)を返します。 例: // Characterをレイヤー番号から探す LayerMask.NameToLayer("Character");

レイヤーを使った描画制限

レイヤーを使用した描画制限はCameraで行います。 CameraにはcullingMaskという変数を持っており、 その値を参照して描画、非描画を決めています。

特性

layerをビット管理しているメンバで、 ビットが立っていれば描画、立っていなければ非描画となります。 例: if (Input.GetMouseButton(0)) { // Characterレイヤーを表示 GetComponent<Camera>().cullingMask |= 1 << LayerMask.NameToLayer("Character"); } else if (Input.GetMouseButton(1)) { // Characterレイヤーを非表示 GetComponent<Camera>().cullingMask &= ~(1 << LayerMask.NameToLayer("Character")); }

当たりの抑制

レイヤーはRayによる当たり判定時のマスク用の情報として使用することが可能です。 マスクの作成はLayerクラスのGetMaskメソッドで行います。 ※RayについてはRay--3D--Ray--2D--にて説明しています。 例: // Characterのレイヤーのマスクを作る int layer_mask = LayerMask.GetMask(new string[] { "Character" });

問題

問題をダウンロードして以下の仕様を実装して下さい。

・Zキー
	PlayerLyaerのみ描画

・Xキー
	EnemyLayerのみ描画

・Cキー
	StageLayerのみ描画

※LayerTestはMainCameraに関連付けしています。

解答はここにあります。