private WheelRaycastResult HandleWheel(GameObject wheel, bool isFront) { if (!Physics.Raycast(wheel.transform.position, -transform.up, out var hit, SuspensionLength, _layerMask)) { return(null); } var amount = Round(1f - hit.distance / SuspensionLength, 2); var result = new WheelRaycastResult { CompressionRatio = amount, ImpactPoint = hit.point }; var pushBack = transform.up * SuspensionForce * amount; _rb.AddForceAtPosition(pushBack, wheel.transform.position); return(result); }
private void DebugGizmosWheelRaycastResult(GameObject wheel, WheelRaycastResult result) { var style = new GUIStyle { normal = { textColor = Color.white }, fontSize = 30 }; var wheelPos = wheel.transform.position; if (result != null) { Gizmos.color = Color.blue; Gizmos.DrawLine(wheelPos, result.ImpactPoint); Gizmos.DrawSphere(result.ImpactPoint, 0.1f); Handles.Label(wheelPos, result.CompressionRatio.ToString(), style); } else { Gizmos.color = Color.red; Gizmos.DrawLine(wheelPos, wheelPos - transform.up * SuspensionLength); Handles.Label(wheelPos, "No hit", style); } }