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.