Spawn object at random points within camera view

I’m looking to spawn objects at different points around the scene within the camera view. I think I have the general idea of it, but my execution is off, I have this so far:

public GameObject ball;
void spawnRandom() 
	{
		Vector3 p = camera.ViewportToWorldPoint(new Vector3(Random.Range (0,0),Random.Range (1,1), camera.nearClipPlane));
		Instantiate(ball, p, Quaternion.identity);
	}

Am i on the right path? Or am I way off? At the moment, it’s creating a lot of balls at the location of the camera

What you want is this Unity - Scripting API: Camera.ScreenToWorldPoint is the one you want.

	public void SpawnRandom()
	{
        //Vector3 screenPosition = Camera.main.ScreenToWorldPoint(new Vector3(Screen.width/2, Screen.height/2, Camera.main.nearClipPlane+5)); //will get the middle of the screen

        Vector3 screenPosition = Camera.main.ScreenToWorldPoint(new Vector3(Random.Range(0,Screen.width), Random.Range(0,Screen.height), Camera.main.farClipPlane/2));
		Instantiate(ball,screenPosition,Quaternion.identity);
	}

You also want to use farClipPlane and then divide it by 2 if you are using an orthographic camera. This will put the GameObject in the center of the clipping planes.

You also want to use farClipPlane and then divide it by 2 if you are using an orthographic camera. This will put the GameObject in the center of the clipping planes.

I use farClipPlane/2 in order to get the center of the Clipping Planes. It i a lot easier to work with than nearClipPlane.

Also instantiating is not the best way to go about spawning in GameObjects. Instantiate and Destroy are not efficient as an ObjectPool.