我做了一個函數(shù)來預測與 CapsuleCast 的碰撞,因為我的角色正在快速移動并且很多碰撞都沒有被 unity 檢測到:private bool CheckForwardCollision(Vector3 direction){ RaycastHit hitInfo; float maxDistance = m_DefaultSpeed * Time.deltaTime + m_Capsule.radius; int layer = 1 << LayerMask.NameToLayer("Default"); // Debug CapsuleCast DebugExtension.DebugCapsule(transform.position + (direction * maxDistance), transform.position + (direction * maxDistance) + (Vector3.up * m_Capsule.height), new Color(1, 0, 0), m_Capsule.radius); // Draw last collision point DebugExtension.DrawPoint(debug_hitpoint, Color.cyan); // Get collision with a capsule cast which is in front of character if (Physics.CapsuleCast(transform.position, transform.position + (Vector3.up * m_Capsule.height), m_Capsule.radius, direction, out hitInfo, maxDistance, layer, QueryTriggerInteraction.Ignore)) { debug_hitpoint = hitInfo.point; return true; } return false;}但它會與高于膠囊高度的物體發(fā)生碰撞。這是一個示例:您可以看到高于膠囊的生命值。怎么了?謝謝
1 回答

12345678_0001
TA貢獻1802條經(jīng)驗 獲得超5個贊
經(jīng)過數(shù)小時的研究,我找到了解決方案: Physics.CapsuleCast(point1, point2, ...)并且DebugExtension.DebugCapsule(point1, point2, ...)不是以相同的方式制作的。在 DebugCapsule 上,point1 和 point2 是指向膠囊末端的點,而在 CapsuleCast 上,這些點是曲線部分的起點。所以解決方案是從點 1 和點 2 移除膠囊的半徑!
Vector3 point1 = transform.position + Vector3.up * m_Capsule.radius;
Vector3 point2 = transform.position - Vector3.up * m_Capsule.radius + (Vector3.up * m_Capsule.height);
Physics.CapsuleCast(point1, point2, m_Capsule.radius, move, out hitInfo, maxDistance, layer, QueryTriggerInteraction.Ignore)
- 1 回答
- 0 關注
- 161 瀏覽
添加回答
舉報
0/150
提交
取消