Vector3 ResolveCollisions(Vector3 root, Vector3 tip, float cameraRadius) { #if CINEMACHINE_PHYSICS var dir = tip - root; var len = dir.magnitude; dir /= len; var result = tip; float desiredCorrection = 0; if (RuntimeUtility.SphereCastIgnoreTag( root, cameraRadius, dir, out RaycastHit hitInfo, len, CameraCollisionFilter, IgnoreTag)) { var desiredResult = hitInfo.point + hitInfo.normal * cameraRadius; desiredCorrection = (desiredResult - tip).magnitude; } // Apply the correction if (desiredCorrection > Epsilon) { result -= dir * desiredCorrection; } return(result); #else return(tip); #endif }
Vector3 ResolveCollisions( Vector3 root, Vector3 tip, float deltaTime, float cameraRadius, ref float collisionCorrection) { #if CINEMACHINE_PHYSICS if (CameraCollisionFilter.value == 0) { return(tip); } var dir = tip - root; var len = dir.magnitude; dir /= len; var result = tip; float desiredCorrection = 0; if (RuntimeUtility.SphereCastIgnoreTag( root, cameraRadius, dir, out RaycastHit hitInfo, len, CameraCollisionFilter, IgnoreTag)) { var desiredResult = hitInfo.point + hitInfo.normal * cameraRadius; desiredCorrection = (desiredResult - tip).magnitude; } collisionCorrection += deltaTime < 0 ? desiredCorrection - collisionCorrection : Damper.Damp( desiredCorrection - collisionCorrection, desiredCorrection > collisionCorrection ? DampingIntoCollision : DampingFromCollision, deltaTime); // Apply the correction if (collisionCorrection > Epsilon) { result -= dir * collisionCorrection; } return(result); #else return(tip); #endif }