源代码
计算碰撞体的高度一半,用于将射线的起点从物体的中心点偏移到底部。
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);