目录
1.目标物体加对应的collider碰撞体
2.调节ProjectSetting里的time 帧速
3.LayerMask设置
4.避坑代码
1.目标物体加对应的collider碰撞体
2.调节ProjectSetting里的time 帧速
⚠️按需使用
3.LayerMask设置
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.文章来源:https://www.toymoban.com/news/detail-510470.html
4.避坑代码
⚠️注意:相机需要设置为正交模式文章来源地址https://www.toymoban.com/news/detail-510470.html
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);
}
}
到了这里,关于Unity---2d射线检测的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!