Unity: detección de objetos mediante Ray Ray

Detección de objetos usando rayos


Unity ray (Rayo) detecta colisionadores o disparadores emitiendo un rayo. Los objetos sin componentes colisionadores no se pueden detectar, y el activador de detección se puede cancelar en la configuración física (Editar → Configuración del proyecto → Física/Physics2D).

Physics.Raycast (origen, dirección, out hitInfo, distancia, máscara)

origen: la posición de emisión del rayo;

dirección: La dirección de emisión del rayo.

hitInfo: información sobre el objeto golpeado por el rayo;

distancia: distancia del rayo, por defecto significa distancia infinita;

máscara: máscara de rayos, que indica qué capa se detecta y los medios predeterminados para detectar todas las capas. La forma de este parámetro es obligatoria:

método uno:

int shootableMask = LayerMask.GetMask("Shootable");
Physics2D.Raycast(Ray, out hitInfo, range, shootableMask);

Método dos:

int layerNumber;
(1 << layerNumber)  //只检测编号为 layerNumber 的层
~(1 << layerNumber) //不检测编号为 layerNumber 的层,其余的层都检测
(1 << layerNumber) | (1 << layer2Number)  //只检测 2 个层

RaycastHit: almacena la información de colisión después de emitir rayos

Variables miembro de uso común:

colisionador : el colisionador que choca con el rayo;

transform : la Transformada del colisionador que colisionó con el rayo;

distancia: la distancia desde el punto de partida del rayo hasta el punto de intersección del rayo y el colisionador;

normal: el vector normal del plano incidente del rayo;

punto: Las coordenadas del punto de intersección del rayo y el colisionador.

Uso común

  1. emitir un rayo desde la cámara en la dirección del ratón;
  2. Obtener la información de colisión del rayo;
  3. Obtenga el objeto que choca y manipule el objeto.
ejemplo de código
Ray myRay = Camera.main.ScreenPointToRay(Input.mousePosition);//从摄像机发出一条射线
RaycastHit2D hit = Physics2D.Raycast(new Vector2(myRay.origin.x, myRay.origin.y), Vector2.zero);//射线从鼠标点击屏幕的那个点出发,射到以当前点击位置为原点的坐标系中的垂直于(0,0)的位置,

if (hit.collider)//如果碰到有Collider2D组件的物体,找到该物体
{
    
    
  Debug.Log(hit.transform.name);//打印出碰撞到的节点的名字
  GameObject obj = GameObject.Find(hit.transform.name);
}
//通过 obj 来操作物体

Supongo que te gusta

Origin blog.csdn.net/qq_33021529/article/details/125357964
Recomendado
Clasificación