public void Fire()
    {
        CameraDataOrtho2D data = accessor.Get();

        data.AnchorBetween(transformFirst.position, transformSecond.position);
        accessor.Set(data);
    }
    // Interpolate.
    public static CameraDataOrtho2D Lerp(CameraDataOrtho2D a, CameraDataOrtho2D b, float t)
    {
        CameraDataOrtho2D result = new CameraDataOrtho2D();

        result.position         = Vector3.Lerp(a.position, b.position, t);
        result.orthographicSize = Mathf.Lerp(a.orthographicSize, b.orthographicSize, t);
        result.aspect           = Mathf.Lerp(a.aspect, b.aspect, t);
        return(result);
    }
    private void Start()
    {
        CameraDataOrtho2D cdo    = new CameraDataOrtho2D(cam);
        Bounds            bounds = rend.sprite.bounds;

        //bounds.size *= rend.transform.localScale;
        Vector3 result = bounds.size;

        result.x   *= rend.transform.localScale.x;
        result.y   *= rend.transform.localScale.y;
        result.z   *= rend.transform.localScale.z;
        bounds.size = result;

        cdo.FitBounds(bounds);
        cdo.AssignTo(cam);
    }
 private void FixedUpdate()
 {
     if (!interpolator.TimerIsRunning() && toFollow != null)
     {
         CameraDataOrtho2D data = accessor.Get();
         if (toFollow.position.x > data.GetCoordinateRightEdge())
         {
             data.OffsetPosition(Vector2.right * data.GetWidth());
             interpolator.SetTargetValue(data, true);
         }
         else if (toFollow.position.x < data.GetCoordinateLeftEdge())
         {
             data.OffsetPosition(Vector2.left * data.GetWidth());
             interpolator.SetTargetValue(data, true);
         }
     }
 }
 public static CameraDataOrtho2D SmoothStep(CameraDataOrtho2D a, CameraDataOrtho2D b, float t)
 {
     return(Lerp(a, b, Mathf.SmoothStep(0.0f, 1.0f, t)));
 }