unity npc射线检测碰撞
源代码
计算碰撞体的高度一半,用于将射线的起点从物体的中心点偏移到底部。
var offset = m_collider.size.y * 0.5f;
var hit = Physics2D.Raycast(
transform.position - new Vector3( 0, offset, 0 ), // 射线起点
dir, // 射线方向
m_collider.size.x * 0.55f, // 射线长度
Globals.ENV_MASK // 仅检测 ENV_MASK 层
);
原项目使用效果
是刚好超出碰撞体x长度0.05的
新项目使用效果
问题
我也是0.5怎么就取不到一半
结果
他喵的整个对象的大小变了,结果碰撞体的长度也影响了,最终值就错了
原:
新:
(亏我调了几个钟可恶)
解决:
加个bound就行了
var raycastLength = m_collider.bounds.size.x * 0.55f;
对比
var offset = m_collider.size.y * 0.5f;
var hit = Physics2D.Raycast(
transform.position - new Vector3( 0, offset, 0 ), // 射线起点
dir, // 射线方向
m_collider.size.x * 0.55f, // 射线长度
Globals.ENV_MASK // 仅检测 ENV_MASK 层
);
var offset = m_collider.size.y * 0.5f;
var raycastLength = m_collider.bounds.size.x * 0.55f; // 适配缩放
var hit = Physics2D.Raycast(
transform.position - new Vector3(0, offset, 0),
dir,
raycastLength,
Globals.ENV_MASK
);
结果:无论对象大小多少,都不影响射线整体比例
附
//调试射线代码
Debug.DrawRay(transform.position - new Vector3(0, offset, 0), dir * (raycastLength), Color.red, 1f);