Unity 2D射线基本使用和画线
2D射线可以检测到挂载了Collider2D的对象,包括isTrigger的对象。
如果发射射线的对象自身带有碰撞器,射线从碰撞器内部发出,检测到碰撞的第一个对象将是自身。
如果不想返回自身,可以在设置中取消勾选 Queries Start In Collider
如果不想检测isTrigger对象的碰撞,可以取消勾选Queries Hit Triggers
定义射线:
//参数为:起点坐标,方向向量
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("没有碰撞任何对象");
}
}
}