So let's start a new script, right click Create new C sharp script. And we're going to call this object spawner. Open up in Visual Studio. Cool, and we want to create a couple of variables straight off the bat. First of all, we need to access our player. So we can create a public game object.
Player. We've done this before, we also need to create a public game object. And he's gets crazy, we're going to build a array of game objects. So not just one game object, we want to create basically an array or you can imagine it like a list or a grouping by the court arrays. And to do that you just add open and close square brackets after the game objects and we want to call this triangle pre fam. With the s we do so the So that we know that it's an array, that's just for our own sake.
Cool. So the only other variable we need is at the location that the objects will be spawned out. And we can store this in a vector three. And because we don't need to access this vector three inside the inspector, we can just leave it as private. So we can say private vector three, spawn, or obstacle. position.
Cool, I don't think we need stops, we can get rid of stop, get rid of that. First thing we want to do. We want to create a throwaway float called float distance to rosin, we're going to call it and the horizon is just going to be an arbitrary amount of space between our player and how far we want the objects to spawn. So we're just imagining horizon at this stage and when our game is actually curved, it We'll be over the horizon. And that's going to equal a vector three dot distance. And the distance we want to get is between the player dot game object, dot transform dot position, and the spawn object position.
Awesome. So now we have a variable that is that is just a float between our player and this spawn location. So what was the purpose of this variable? Well, we want to create a fixed distance between where the objects spawn, we don't want them to spawn with gaps that are too big between the triangles. And we don't want between the triangle prefabs and we don't want to spawn them too close together, either. We want them to be pretty consistent.
So what this can do is because we know this value, we know the value between the player between the player and the spawner position is we can say well, if it gets to a certain length, or it gets under a certain length, then we can spawn a new triangle. So then all we need to do is write an if statement. If distance to horizon is less than, say 120. Well, then what do we want to do, we want to spawn triangle. Now this is going to end we're going to do with capital. This is going through an error because we don't actually have this we're trying to call this method, but we actually haven't created this method yet.
So let's just create that method down here. So we go void spawn, triangle. And you see now that it's fixed the error, but I suppose we won't actually say spawn triangles. Just so we understand that we're actually installed. We're actually spawning the triangles prefab. This is just for our sake, so we understand that code a little bit better.
And then all we want to do is we want to change the spawn obstacle position on equal to a new Vector three. Do we want to change it on the x axis? No. So we'll leave it at zero, we don't want to change on the y axis. So we'll leave that at zero as well. And then we want to change it on the z axis by a spawn object position so that the z value of one open position dot z, plus a distance of same 30.
So this will be the amount the distance between the different triangles. So you can adjust this number 20 or 50, or whatever you you find fits best. Awesome. So that's literally it. We've created the locations where our triangles are going to spawn, but now we just need to spawn them. So the next time code is where the magic happens.
It's where we actually spawn the triangles. It's called instantiate inside of unity. And Unity has an inbuilt method that helps us do this is really, really simple. What we need to do is right instantiate Then when you do open parentheses, we need to tell it what we want to actually instantiate. We want to instantiate one of the objects of the triangle prefab. So right now why don't we just choose the very first triangle prefab.
So we'll say triangle, triangle prefabs. open square bracket, open parentheses, and we're just about zero. So the object of the stuff is zero index of the array. And where do we want to instantiate it? Well, we want to instantiate it at spawn, obstacle position. And how do we want this object to be rotated when it's placed in this in the scene?
Well, if we want to be exactly like we have settled in the prefabs, we just need to write quaternion which is very hard word to spell quaternion dot identity, close parentheses into the semicolon and save that quaternion dot identity is whatever the game of default rotation is. So we choose what a game object we want to spawn. Or instantiate, we set the location which we set up here. And let me say just born at the default rotation. Awesome. So let's go back over to unity and set everything up.
Let's create a new, empty game object. We're going to call this scene manager. And I like to put a little underscore at the start there, and I like to drag it to the top. And I also like to zero everything out, just to keep things neat. And we want to add the script of exponents. Awesome.
It's asking for our playoff so we can just drag a player in. It's asking for our triangles. So if we open up this tag, it's saying well, we actually have zero objects so far, so we can just change that to three and then we can go over to our prefabs we can drag in triangles, they Dragon triangles B. And we can drag in triangles. See, then we can take these three triangles and we can turn them off. And we're gonna press play.
Today Ah, we have procedural level generation that will just keep on going forever. But there's a problem. As you can see, game objects are spawning the very first game object over and over and over again. We'll deal with this problem in the next episode.