Keep object constrained to z space origin

I have a 3d object moving around screen controlled by gyroscope. I currently have its movement constrained to the boundaries of the camera viewport. I also have it so that tilting the mobile device forward moves it on Y axis as apposed to forward in Z space, since the camera won’t be moving or following object and I don’t want it moving forward or backward in Z space, only U,D,L,R. I want the object to remain at its starting point when game starts and constrained it in Z space. But with what I have right now the object pops in right in front of the camera and stays locked to the camera (the object fills the screen) when I press play. The code I have is as follows:

``````    void Update()
{
transform.Translate (Input.acceleration.x, Input.acceleration.y, 0);

Vector3 boundaryVector = transform.position;

Vector3 pos = Camera.main.WorldToViewportPoint (transform.position);
pos.x = Mathf.Clamp01(pos.x);
pos.y = Mathf.Clamp01(pos.y);
pos.z = Mathf.Clamp01(pos.z);

transform.position = Camera.main.ViewportToWorldPoint(pos);

}
}
``````

I know that the line `pos.z = Mathf.Clamp01(pos.z);`is the culprit since this doesn’t happen when I remove that line. But by removing that line the character moves freely in Z space which is no no. How do I keep it constrained to certain point in Z space, preferably its origin?

I was able to get the object constrained by replacing the problem line of code accordingly:

``````Vector3 pos = Camera.main.WorldToViewportPoint (transform.position);
pos.x = Mathf.Clamp01(pos.x);
pos.y = Mathf.Clamp01(pos.y);
pos.z = Mathf.Clamp (transform.position.z, 50, 50);
``````

Using this I can specify the z space area to stay constrained to. It took some fidgeting with the numbers to get it to a spot I like. Ideally I would have liked to code it to start from its origin point but this works for now.