赞
踩
目录
⚠️按需使用
Layers通常被摄像机用来渲染部分场景,和灯光照射部分场景使用。但是它们也可以用来做射线检测时忽略一些collider或Collision使用。
在代码中使用时如何开启某个Layers?
LayerMask mask = 1 << 你需要开启的Layers层。
LayerMask mask = 0 << 你需要关闭的Layers层。
比如:
LayerMask mask = 1 << 2; 表示开启Layer2。
LayerMask mask = 0 << 5;表示关闭Layer5。
LayerMask mask = 1<<2|1<<8;表示开启Layer2和Layer8。
LayerMask mask = 0<<3|0<<7;表示关闭Layer3和Layer7。
上面也可以写成:
LayerMask mask = ~(1<<3|1<<7);表示关闭Layer3和Layer7。
LayerMask mask = 1<<2|0<<4;表示开启Layer2并且同时关闭Layer4.
⚠️注意:相机需要设置为正交模式
- using UnityEngine;
-
- public class XXXContr : MonoBehaviour
- {
- RaycastHit2D hit;
- private Transform hitObj;
-
-
- private void Awake()
- {
-
- }
-
-
- void Start()
- {
-
- }
-
- private void OnMouseDown()
- {
- Debug.LogError("down");
-
- }
- private void OnMouseDrag()
- {
-
- }
- private void OnMouseUp()
- {
- SetTableState(false);
- }
-
- private void FixedUpdate()
- {
- if (isMove)
- {
- //2d射线检测需要指定参与碰撞的layer 并且添加射线长度,否则会失效
- LayerMask layer = 1 << 8;
- hit = Physics2D.Raycast(_camera.ScreenToWorldPoint(Input.mousePosition), Vector2.zero, 100f, layer);
- Debug.DrawLine(Input.mousePosition, hit.point, Color.black);
- if (hit.collider != null)
- {
- hitObj = hit.transform;
- //Debug.LogError("------" + hitObj.tag + "------");
- //注意上调参与点击的spriteRender的z轴 使其距离摄像机更近,否则可能会被其他碰撞体盖住 影响点击响应
- transform.position = new Vector3(offsetX, offsetY, -5);
- }
- }
- }
-
-
-
- private void OnTriggerEnter2D(Collider2D collision)
- {
- //Debug.LogError("trigger:" + collision.tag);
- }
-
- private void OnTriggerExit2D(Collider2D collision)
- {
- //Debug.LogError("Exit:" + collision.tag);
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。