Ejemplo n.º 1
0
 private void OnTriggerEnter(Collider other)
 {
     if (other.gameObject.layer == CinematicDirector.Instance.Settings.CinematicCameraLayer)
     {
         ShakeableCamera camera = other.GetComponent <ShakeableCamera>();
         if (camera != null)
         {
             OnCollideWithShakeableCamera.Invoke(camera);
         }
     }
 }
Ejemplo n.º 2
0
        private void OnCollideWithShakeableCamera(ShakeableCamera camera)
        {
            // Calculate nearest point car will pass by camera.
            Vector3 nearestExpectedPointToCamera   = MathHelper.NearestPointOnLine(transform.position, transform.forward, camera.transform.position);
            float   distanceToCameraAtNearestPoint = Vector3.Distance(nearestExpectedPointToCamera, camera.transform.position);
            float   distanceScaler = Mathf.Clamp01(1f / distanceToCameraAtNearestPoint);
            float   shakeForce     = body.velocity.magnitude * shakeScalar;

    #if UNITY_EDITOR
            Debug.DrawLine(transform.position, transform.position + transform.forward * 1000f, Color.red, 10f);
            Debug.DrawLine(nearestExpectedPointToCamera, camera.transform.position, Color.blue, 10f);
    #endif

            float distanceToNearestExpectedPointToCamera = Vector3.Distance(transform.position, nearestExpectedPointToCamera);
            float timeToNearestPoint = distanceToNearestExpectedPointToCamera / body.velocity.magnitude;

            camera.ShakeCamera(shakeForce, distanceToCameraAtNearestPoint, timeToNearestPoint);
        }