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 | 命中的对象的变换 |