How to make a camera zoom on a particular part of image plane?

Am creating a sniper game and would like to know when I double tap on a device the camera should only zoom on that particular place and when double tap again it should be back to its normal mode.

I did a script where I have been able to achieve zoom and tilt functions to some extent though it is not 100% right… I would highly appreciate if anyone can solve my problem and can fix my code, Thanks a ton in advance :slight_smile:

{
public Texture2D sniperTexture;
public Material sniperMat;

public bool sniperMode=false;
private bool isplaying = false;

public float maxX = 0.0f;
public float minX = 0.0f;
public float maxY = 0.0f;
public float minY = 0.0f;

public float speed = 6.0f;
public float filter= 5.0f;

private Vector3 curAc;
private Vector3 zeroAc;


void Start()
{
	sniperMode = false;
	ResetAxes();
}


void OnPostRender()
{
	if(sniperMode)
	Graphics.Blit( sniperTexture,null,sniperMat);
}


void FixedUpdate()
{
	DoubleTap();
	gyroMovement();
	
}


void DoubleTap()		
{
	for (var i=0; i< Input.touchCount; ++i)
	{
		if(Input.GetTouch(i).phase == TouchPhase.Began)
		{
			if(Input.GetTouch(i).tapCount == 2)
			{
				sniperMode=!sniperMode;
				Camera.main.fieldOfView = sniperMode ? 20 : 60;
				isplaying = true;					
			}
			
		}
		else
		{
			isplaying = false;
		}			
	}
}


void gyroMovement() // Tilt Function
{
	if(sniperMode=sniperMode)
	{						
		curAc = Vector3.Lerp (curAc,Input.acceleration,filter*Time.deltaTime);
		
		Vector3 dir = new Vector3(curAc.x,curAc.y,0);
		
		if(dir.sqrMagnitude > 1)
			
		dir.Normalize();
		
		transform.Translate(dir*speed*Time.deltaTime);
		transform.Translate(dir*speed*Time.deltaTime);			
		
		var pos = transform.position;
		
		pos.x = Mathf.Clamp(pos.x, minX,maxX);
		pos.y = Mathf.Clamp(pos.y, minY,maxY);
		
		transform.position = pos;
	}
	else
	{
		isplaying = false;			
	}
}

void ResetAxes()
{
	zeroAc = Input.acceleration;
	curAc  = Vector3.zero;
}

}

You can get a ray from the camera to the tapped position like this :

Ray ray camera.ScreenPointToRay(Input.GetTouch(i).position);

Then, you can zoom in the ray direction.

Oh, and you’ll need to change if(sniperMode=sniperMode) to if(sniperMode==sniperMode).