Debug.DrawLine
由于射线不可见, 所以测试时可以使用DrawLine绘制辅助线.
描述:在指定的起始点与结束点之间绘制一条直线
public static void DrawLine(
Vector3 start,
Vector3 end
);
public static void DrawLine(
Vector3 start,
Vector3 end,
Color color
);
public static void DrawLine(
Vector3 start,
Vector3 end,
Color color,
float duration
);
public static void DrawLine(
Vector3 start,
Vector3 end,
[Internal.DefaultValue("Color.white")] Color color,
[Internal.DefaultValue("0.0f")] float duration,
[Internal.DefaultValue("true")] bool depthTest
);
| star | 世界空间中的点作为该直线的起始点 |
| end | 世界空间中的点作为该直线的结束点 |
| color | 该直线的颜色 |
| duration | 该直线的可见长度应为多长 |
| depthTest | 该直线是否应被靠近此摄像机的对象遮挡 |
duration是在第一次显示该直线后该直线可见的时间长短(单位为秒). 如果持续时间为零, 则该直线仅显示一帧.
1 | // 辅助线可视化 |
Time.deltaTime:当前帧和上一帧之间的时间transform.right:世界空间中变换的红轴; 旋转游戏对象时, 表示游戏对象的X轴的红色箭头也会改变方向.transform.Up:世界空间中变换的绿轴; 旋转游戏对象时, 表示游戏对象的Y轴的红色箭头也会改变方向.
| Vector3 | |
| back | 用于编写Vector3(0, 0, -1)的简便方法. |
| forward | 用于编写Vector3(0, 0, 1)的简便方法. |
| up | 用于编写Vector3(0, 1, 0) 的简便方法. |
| down | 用于编写Vector3(0, -1, 0)的简便方法. |
| left | 用于编写Vector3(-1, 0, 0)的简便方法. |
| right | 用于编写Vector3(1, 0, 0)的简便方法. |
| one | 用于编写Vector3(1, 1, 1)的简便方法. |
| zero | 用于编写Vector3(0, 0, 0)的简便方法. |
Physics2D.Raycast
用来向场景中的碰撞体投射射线;
描述:从概念上说, 射线投射类似于从空间中的某个点朝特定方向发射一条光束. 在该过程中, 可以检测并报告与光束接触的任何对象.
public static RaycastHit2D Raycast(
Vector2 origin,
Vector2 direction
);
public static RaycastHit2D Raycast(
Vector2 origin,
Vector2 direction,
float distance
);
public static RaycastHit2D Raycast(
Vector2 origin,
Vector2 direction,
float distance,
int layerMask
);
public static RaycastHit2D Raycast(
Vector2 origin,
Vector2 direction,
float distance,
int layerMask,
float minDepth
);
public static RaycastHit2D Raycast(
Vector2 origin,
Vector2 direction,
[Internal.DefaultValue("Mathf.Infinity")] float distance,
[Internal.DefaultValue("DefaultRaycastLayers")] int layerMask,
[Internal.DefaultValue("-Mathf.Infinity")] float minDepth,
[Internal.DefaultValue("Mathf.Infinity")] float maxDepth
);
| origin | 射线在2D空间中的起点 |
| direction | 表示射线方向的矢量 |
| distance | 射线的最大投射距离 |
| layerMask | 过滤器, 用于仅在特定层上检测碰撞体. |
| minDepth | 仅包括Z坐标(深度)大于或等于该值的对象. |
| maxDepth | 仅包括Z坐标(深度)小于或等于该值的对象. |
该函数返回一个RaycastHit2D对象, 该对象引用了射线命中的碰撞体(如果未命中任何对象, 则结果的碰撞体属性将为NULL).
当该对象添加了Collider 2D组件时, 射线会探测自身的碰撞体. 需进行设置:
1 | Physics2D.queriesStartInColliders = false; |
LayerMask
描述:指定要在Raycast中使用的层GameObject最多可以使用Editor支持的32个LayerMask. 这些Layers中的前8个由Unity指定; 以下24个可由用户控制.
![]() | ![]() |
1 | RaycastHit2D hitInfo; |
value:将层遮罩值转换为整数值
public static int GetMask(
params string[] layerNames
);
public static string LayerToName(
int layer
);
public static int NameToLayer(
string layerName
);
RaycastHit2D
描述:在2D物理中, 有关射线投射检测到的对象的返回信息.
| centroid | 用于执行投射的图元的质心 |
| collider | 射线命中的碰撞体 |
| distance | 从射线原点到撞击点的距离 |
| fraction | 射线上发生命中的距离的分数 |
| normal | 射线命中的表面的法线矢量 |
| point | 世界空间中射线命中碰撞体表面的点 |
| rigidbody | 附加到命中的对象的Rigidbody2D |
| transform | 命中的对象的变换 |

