1.一个可以控制方向和长度的射线
--通过返回bool值判断是否碰撞
Vector3
fwd = transform.TransformDirection(
Vector3
.forward);
//定义一个方向fwd
bool
grounded =
Physics
.Raycast(transform.position, fwd, 10);
//从该物体向fwd方向投射一条射线 长度为10
//如果grounded为true则碰撞到了物体 反之亦然
2.线性投射
--通过返回bool值判断是否碰撞到的物体层
Debug
.DrawLine(transform.position, Line_floor.position,
Color
.red, 1f);
//画一条线 从该游戏体位置发射 到Line_floor游戏体位置 红色 1帧渲染出来
bool
grounded =
Physics
.Linecast(transform.position, Line_floor.position, 1 <<
LayerMask
.NameToLayer(
"Ground"
));
//从该游戏体位置发射 到Line_floor游戏体位置一个线性投射,Line_floor游戏体的层为
Ground则返回true 反之亦然
3.
在场景中投下投射方向的一条光线,并返回第一个碰撞体的细节信息
--
bool返回值为是否有碰撞产生(长度之内,长度不写就无限长)
RaycastHit
hit;
//返回信息的接受变量
bool
grounded =
Physics
.Raycast(transform.position,
Vector3
.forward,
out
hit,100);
//Physics.Raycast(开始位置,射线方向,返回信息的接受变量,射线长度)
hit.collider.gameObject.name
//返回值的使用方式需要先collider
4.
投射一条光线并返回所有碰撞,也就是投射光线并返回一个RaycastHit[]数组
--
返回值为投射方向的所有碰撞器(长度之内,长度不写就无限长)
RaycastHit[] hits;
//返回信息的接受数组
hits =
Physics
.RaycastAll(transform.position,
Vector3
.forward, 100.0F);
//Physics.RaycastAll(开始位置,方向,长度);
hits[0].collider.gameObject.name
//返回值的使用方式需要先collider
5.相交球 返回球型半径之内(包括半径)的所有碰撞体 collider[]。可用于拾取物品
--
返回值为半径球形射线碰撞到的所有碰撞器
Collider
[] col =
Physics
.OverlapSphere(transform.position, 1f);
//Physics.OverlapSphere(位置,半径) 以半径长度为一个球形射线返回射线碰撞的所有碰撞体 信息
以上有的方法可选择加入 1 <<
LayerMask
.NameToLayer(
"Ground"
)
//可以在射线方法最后面加入这个,判断层 可
参考第二种方法