Unity 2D射线基本使用和画线

2D射线可以检测到挂载了Collider2D的对象,包括isTrigger的对象。

如果发射射线的对象自身带有碰撞器,射线从碰撞器内部发出,检测到碰撞的第一个对象将是自身。

如果不想返回自身,可以在设置中取消勾选 Queries Start In Collider

如果不想检测isTrigger对象的碰撞,可以取消勾选Queries Hit Triggers

Unity 2D射线基本使用和画线

定义射线:

//参数为:起点坐标,方向向量
Ray2D ray=new Ray2D( transform.position, Vector2.right );

绘制射线

Debug.DrawRay( ray.origin, ray.direction, Color.blue );//起点,方向,颜色(可选)
//线的长度与射线相同,如当前射线方向向量为Vector2.right即长度为1

获取射线碰撞信息:

//无限远
RaycastHit2D info=Physics2D.Raycast(ray.origin, ray.direction);
//或者直接用点坐标,方向
//RaycastHit2D info=Physics2D.Raycast( startPos, Vector2.right);



//限制距离:
RaycastHit2D info=Physics2D.Raycast( startPos, direction, 10f );

使用获取到的射线碰撞信息 ,判断是否发生碰撞、碰撞到的对象 

if(info.collider!=null){//如果发生了碰撞
	GameObject obj=info.collider.gameObject;
	if(obj.CompareTag("Enemy"))//用tag判断碰到了什么对象
		Debug.Log(obj.name);
   
}

 完整示例:向自身的右侧发射一条射线,检测碰到的第一个对象是不是敌人。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class RayTest : MonoBehaviour {

	Ray2D ray;

	void Update () {
		ray=new Ray2D(transform.position,Vector2.right);
		RaycastHit2D info=Physics2D.Raycast(ray.origin,ray.direction);
		//Debug.DrawRay(ray.origin,ray.direction,Color.blue);

		if(info.collider!=null){
			if(info.transform.gameObject.CompareTag("Enemy")){
				Debug.LogWarning("检测到敌人");
			}else{
				Debug.Log("检测到其他对象");
			}
		}else{
			Debug.Log("没有碰撞任何对象");
		}
	}
}