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
        }
Exemplo n.º 2
0
        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
        }