unity-合并地图碰撞器&标记字段&射线检测碰撞体

将地图碰撞器合并

  1. Tile Collider 2D中勾选Used by Composite
  2. 新建一个Composite Collider 2D,同时会自动生成一个刚体RigidBody 2D
  3. RigidBody 2DBody Type设置为static,则其不会因重力而运动,固定在原地
  4. 同时也可以在Inspector的右上角将Static勾选

unity在脚本中使用标记字段

在脚本中使用标记字段可以在Inspector中组织属性显示

  1. [Space(10)]: 与上面产生一个10的空隙,也可以不带参数
  2. Header("xxx"): 在Inspector面板上给定义的字段的上一行加描述,形成分组的感觉
  3. [Tooltip("xxx")]: 给变量加Tooltip属性使在Inspector面板鼠标悬停在该变量上显示提示
  4. [Range(min,max)]: 限制数值变量的取值范围并以滑动条显示在Inspector
  5. [SerializeField]: 强制序列化一个私有的变量,使之可以在Inspector面板显示

其他内容可看此链接

使用前:

sIM5N9.png

代码:

1
2
3
4
5
6
7
8
9
[SerializeField]
private float crouchSpeedDivison = 3f;

[Header("移动速度")]
public float speed = 8f;
[Space(10)]

[Range(0, 10)]
public float xVelocity;

使用后:

sIMIhR.png

射线检测碰撞体(RaycastHit2D)

1
2
3
4
//画射线
RaycastHit2D leftCheck = Physics2D.Raycast(pos + offset, Vector2.down, groundDistance, groundLayer);
//显示射线用于debug
Debug.DrawRay(pos + offset, Vector2.down, Color.red, 0.2f);

Physics.Raycast

射线投射(raycast):射线投射从原点沿着射线方向发送假想的“激光束”,直至命中场景中的碰撞体,随后返回有关该对象和RaycastHist对象内的投射命中点的信息。

向场景中的所有碰撞体投射一条射线,该射线起点为origin,朝向direction,长度为maxDistance

若射线与任何碰撞体相交,返回true否则为false

1
public static bool Raycast (Vector3 origin, Vector3 direction, float maxDistance= Mathf.Infinity, int layerMask= DefaultRaycastLayers, QueryTriggerInteraction queryTriggerInteraction= QueryTriggerInteraction.UseGlobal);
参数 含义
origin 射线在坐标系中的起点
direction 射线方向
maxDistance 射线检查碰撞的最大距离
layerMask 遮罩层,用于投射射线时选择性的忽略碰撞体
queryTriggerInteraction 指定该查询是否应该命中触发器

重写Raycast方法

1
2
3
4
5
6
7
8
9
//重构Raycast方法
RaycastHit2D Raycast(Vector2 offset, Vector2 rayDirection, float length, LayerMask layer)
{
Vector2 pos = transform.position;
RaycastHit2D hit = Physics2D.Raycast(pos + offset, rayDirection, length, layer);
Color color = hit ? Color.red : Color.green;
Debug.DrawRay(pos + offset, rayDirection * length,color);
return hit;
}
  • 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!
  • © 2020-2021 Aweso Lynn
  • PV: UV: