最近要使用到射线检测特定层碰撞的功能,复习了一下,这里做个笔记
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class test : MonoBehaviour {
Ray _ray;
Vector3 _vector3;
LayerMask mask = 1<<5;//1<<5开启第5层layer 0<<5 关闭第5层layer <<左移运算符(位运算)
LayerMask mask2 ;
LayerMask mask3 = ~(1<<5); //只关闭第5层
LayerMask mask4 = (1<<5)|(1<<0); //只开启第5层和第0层;
// Use this for initialization
void Start ()
{
mask2 = 1 << LayerMask.NameToLayer("UI"); //放在start方法中
// _ray = new Ray(GetComponent<Camera>().transform.position,Vector3.forward);//从一个点沿着某一方向发射射线
//RaycastHit hit;
//if (Physics.Raycast(_ray, out hit ,100,mask2)) //mask和mask2都ok
//{
// print(hit.collider.name);
// Debug.DrawLine(transform.position,hit.point,Color.red,100,true);//只有在scene视图中才可见
//}
}
// Update is called once per frame
void Update()
{
if (Input.GetMouseButtonDown(0))
{
_ray = Camera.main.ScreenPointToRay(Input.mousePosition);//从摄像机出发,经过鼠标点击屏幕的点击点。产生这样一条射线
RaycastHit hit;
if (Physics.Raycast(_ray, out hit, 100,mask4))
{
print(hit.collider.name);
}
}
}
void OnCollisionEnter(Collision _collision)
{
print(_collision.collider.name);
}
}
附一张unity层的关系图: