目錄
1.目標(biāo)物體加對應(yīng)的collider碰撞體
?2.調(diào)節(jié)ProjectSetting里的time 幀速
3.LayerMask設(shè)置
4.避坑代碼
1.目標(biāo)物體加對應(yīng)的collider碰撞體
?2.調(diào)節(jié)ProjectSetting里的time 幀速
??按需使用
3.LayerMask設(shè)置
Layers通常被攝像機用來渲染部分場景,和燈光照射部分場景使用。但是它們也可以用來做射線檢測時忽略一些collider或Collision使用。
在代碼中使用時如何開啟某個Layers?
LayerMask mask = 1 << 你需要開啟的Layers層。
LayerMask mask = 0 << 你需要關(guān)閉的Layers層。
比如:
LayerMask mask = 1 << 2; 表示開啟Layer2。
LayerMask mask = 0 << 5;表示關(guān)閉Layer5。
LayerMask mask = 1<<2|1<<8;表示開啟Layer2和Layer8。
LayerMask mask = 0<<3|0<<7;表示關(guān)閉Layer3和Layer7。
上面也可以寫成:
LayerMask mask = ~(1<<3|1<<7);表示關(guān)閉Layer3和Layer7。
LayerMask mask = 1<<2|0<<4;表示開啟Layer2并且同時關(guān)閉Layer4.文章來源:http://www.zghlxwxcb.cn/news/detail-510470.html
4.避坑代碼
??注意:相機需要設(shè)置為正交模式文章來源地址http://www.zghlxwxcb.cn/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 + "------");
//注意上調(diào)參與點擊的spriteRender的z軸 使其距離攝像機更近,否則可能會被其他碰撞體蓋住 影響點擊響應(yīng)
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);
}
}
到了這里,關(guān)于Unity---2d射線檢測的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!