Make a camera to Follow two players

so in my game i have a local co-op and i want a single camera to follow the players. this camera should be at a specified distance from the players but zoom in or zoom out, smoothly based on the distance between the two players like most old coop games. i have attempted to make it but it does not really work. can anyone suggest how to fix what i have or a whole new way of doing it. any help appreciated.

{

``````public Vector3 distance;
public Transform target1;
public Transform target2;
public float CamZPosition;
public float TargetZmiddle;
public float camDistance;
public float trial;

// Use this for initialization
void Start ()
{

}

// Update is called once per frame
void Update ()
{
distance = target1.position - target2.position;
TargetZmiddle = ((target1.position.z * target2.position.z) /2);

if(distance.x < 0)
distance.x = distance.x * -1;
if(distance.z < 0)
distance.z = distance.z * -1;

trial = camDistance + distance.x;

if(distance.z > 20)
{
//camDistance = trial;
}

if(distance.x > 20)
{
camDistance = trial;
}
if(distance.x < 19 || distance.z < 19)
{
camDistance = 10;
}

//Debug.Log (TargetZmiddle);
transform.position = new Vector3(transform.position.x, transform.position.y, (TargetZmiddle - camDistance));

}
``````

}

for anyone that wants to know i have completed this function
the final code is below

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

{

``````public float dampTime = 0.15f;
private Vector3 velocity = Vector3.zero;
public Transform target;

public float MidX;
public float MidY;
public float MidZ;

public Transform target1;
public Transform target2;
public Vector3 Midpoint;

public Vector3 distance;
public float camDistance;

public float CamOffset;
public float bounds;

void Awake ()
{
//checking if there's already a game manager
{
}
{
Destroy(gameObject);
}
}

// Use this for initialization
void Start ()
{
camDistance = 10.0f;
bounds = 12.0f;
}

// Update is called once per frame
void Update ()
{
distance = target1.position - target2.position;

if(camDistance >= 19.0f)
camDistance = 19.0f;
if (camDistance <= 10.0f)
camDistance = 10.0f;

if(distance.x < 0)
distance.x = distance.x * -1;
if(distance.z < 0)
distance.z = distance.z * -1;

if(target1.position.x < (transform.position.x -bounds))
{
Vector3 pos = target1.position;
pos.x =  transform.position.x -bounds;
target1.position = pos;
}
if(target2.position.x < (transform.position.x -bounds))
{
Vector3 pos = target2.position;
pos.x =  transform.position.x -bounds;
target2.position = pos;
}
if(target1.position.x > (transform.position.x +bounds))
{
Vector3 pos = target1.position;
pos.x =  transform.position.x +bounds;
target1.position = pos;
}
if(target2.position.x > (transform.position.x +bounds))
{
Vector3 pos = target2.position;
pos.x =  transform.position.x +bounds;
target2.position = pos;
}

if(distance.x > 15.0f)
{
CamOffset = distance.x * 0.3f;

if(CamOffset >=8.5f)
CamOffset = 8.5f;

}else if(distance.x < 14.0f)
{
CamOffset = distance.x * 0.3f;
}else if( distance.z < 14.0f)
{
CamOffset = distance.x * 0.3f;
}

MidX = (target2.position.x + target1.position.x) /2;
MidY = (target2.position.y + target1.position.y) /2;
MidZ = (target2.position.z + target1.position.z) /2;

Midpoint = new Vector3 (MidX, MidY, MidZ);

if (target1)
{
Vector3 point = camera.WorldToViewportPoint(Midpoint);
Vector3 delta = Midpoint - camera.ViewportToWorldPoint(new Vector3(0.5f, 0.5f, camDistance + CamOffset)); //(new Vector3(0.5, 0.5, point.z));
Vector3 destination = transform.position + delta;
transform.position = Vector3.SmoothDamp(transform.position, destination, ref velocity, dampTime);
}

}
``````

hellp hi bro i want use this script but is not working