This week we started a new project, a top-down game where we’ll be feeding food to hungry animals who are rushing at us.
We had another asset bundle to download to get the assets we will be using for this project. It’s available on our Teams site.
Upon importing the asset bundle, we start with a basic scene which has three planes, two black ones flanking one with a grass texture. The asset bundle contains a total of four suitable textures for the ground and we had a look at those, and saw how to use them.

The asset pack also contains prefabs, these are pre-made combinations of Unity objects, ready to use. We had a look at some these prefabs by clicking once on them and viewing the preview at the bottom of the inspector. We also saw how double-clicking on them opens the prefab in the game view for editing and how using the back arrow at the upper-left returns us to the scene.
We brought in three animals, a human and a slice of pizza (scaled up by 3 or 4 to make it visible), laid out roughly as shown below:

Making the Player Move
We made a Scripts folder and added a new C# script called PlayerController.cs. At the top, we added two properties:
public float horizontalInput;
public float speed = 10.0f;
And Update() we changed to the following:
void Update()
{
horizontalInput = Input.GetAxis("Horizontal");
transform.Translate(Vector3.right * horizontalInput * Time.deltaTime * speed);
}
Now, when testing, we see the player can go side-to-side, but it can also go completely off screen! How do we limit this? We do that by adding an if statement; this allows us to check if something is true, and then do something only when it is true.
First we added a new property to the top of the class:
public float xRange = 10.0f;
This represents the range (between -10 and +10) that we want to confine the player’s position to.
In Update(), after the transform.Translate(), we add the following code:
if (transform.position.x < -xRange)
{
transform.position = new Vector3(-xRange, transform.position.y, transform.position.z);
}
What does this say? If the x part of the players position gets smaller than -xRange (-10) (meaning it goes too far to the left), then we change the player’s position so that the x part is exactly -xRange (-10).
When we test now, we’ll find that we can move as far right as we want, but when we move left, once the player’s x position gets to -10, we can’t move any further.
It’s easy now to add in the same check for the right-hand-side. We can copy-paste the last block of code and make a few small changes to the copy:
if (transform.position.x > xRange)
{
transform.position = new Vector3(xRange, transform.position.y, transform.position.z);
}
So, the less-than (<) changes to greater-than (>) and -xRange (-10) changes to xRange (+10) in two places.
Now the player is constricted in two directions.
Making a Moving Pizza Prefab
To make the pizza move we make a new C# script called MoveForward.cs and attach it to our pizza slice. In this script we have one property:
public float speed = 40.0f;
And a single line in Update():
transform.Translate(Vector3.forward * Time.deltaTime * speed);
We make a new folder called Prefabs and then just drag our pizza slice from the Heirarchy into it. We now have a prefab of the moving pizza slice. We can delete the instance of the pizza slice in the scene; we’ll be spawning them automatically later.
And Finally…
We looked into spawning the prefab on a regular interval from the player’s position. That’s not part of the final game, but it was just to illustrate making an instance of a prefab from code.
The code for this week’s project is on our GitHub, as always. There is also small additional project there called “ScriptableObjects for a Recipe System” which is demonstrating a way to define ingredients and recipes and was in response one if our ninja’s queries. To download our stuff from GitHub, you can just click on the green button and choose “Download ZIP”

Note that this ZIP file will contain all our projects for the year!