ドキュメント

Unity Engine


User Manual

Script Reference

Unity Engine


Uses of layers in Unity

Understand common applications of layers in Unity.
読み終わるまでの所要時間 2 分最終更新 25日前

You can use layers to optimize your project and workflow. Common uses of layers include:
  • Layer-based rendering
  • Layer-based collision

Use the Camera culling mask with layers

You can render only the objects in a particular layer, or selection of layers, if you use the Camera’s culling mask. To change the culling mask, select the camera you want to use, and select the
Culling Mask

?

dropdown in the Inspector window. If you clear the checkbox of a layer, it doesn’t render in the scene.
注
UI elements and screen space canvas children are exceptions to this and render regardless.

Ray cast with layers

You can use layers to specify which GameObjects that a ray cast can intersect with. To make a ray cast ignore a GameObject, you can assign it to the Ignore Raycast layer, or pass a LayerMask to the ray cast API call.
If you don't pass a LayerMask to the ray cast API call, Unity uses Physics.DefaultRaycastLayers which matches every layer except Ignore Raycast.
The Physics.Raycast function uses a bitmask, and each bit determines if a layer is ignored by rays or not. If all bits in the layerMask are on, the ray collides against all colliders. If the layerMask = 0, there are no collisions.
For example, if you want to cast a ray on layer 8, see the code sample below:
int layerMask = 1 << 8;// Does the ray intersect any objects which are in layer 8?if (Physics.Raycast(transform.position, Vector3.forward, Mathf.Infinity, layerMask)){ Debug.Log("The ray hit the player");}
You can then do the inverse, so that the ray collides with all layers except layer 8.
void Update (){ // Bit shift the index of the layer (8) to get a bit mask int layerMask = 1 << 8; // This casts rays only against colliders in layer 8. // But to collide against everything except layer 8, use the ~ operator because it inverts a bitmask. layerMask = ~layerMask; RaycastHit hit; // Does the ray intersect any objects excluding layer 8. if (Physics.Raycast(transform.position, transform.TransformDirection (Vector3.forward), out hit, Mathf.Infinity, layerMask)) { Debug.DrawRay(transform.position, transform.TransformDirection (Vector3.forward) * hit.distance, Color.yellow); Debug.Log("Did Hit"); } else { Debug.DrawRay(transform.position, transform.TransformDirection (Vector3.forward) *1000, Color.white); Debug.Log("Did not Hit"); }}
注
If you don't pass a layerMask to the Raycast function, it still ignores colliders that use the IgnoreRaycast layer.

Additional resources