Manipulating Objects in Unity
We now have a level that we have fleshed out using paper and pen, and we can start to bring these ideas into Unity. But before we do that, let’s check a few settings in Unity and make sure we are prepared to replicate our paper level design in the editor. Making sure we can “copy” things from our design to Unity in an almost one-to-one fashion will save us a lot of time and frustration.
Let’s start by opening our 2D_Platform_Game Project. We have gone ahead and updated all of the sprites and made Prefabs for all of the GameObjects we will be using in our game. Go ahead and grab the Project files for Chapter 4 if you want to follow along.
In order for us to lay down our GameObjects, we need to know how to move them around in Unity. We need to be able to position, rotate, and scale our objects and place them exactly where we need them. We also need to know the key differences between working in 2D and 3D and how we can still attain depth in our game.
You will mostly make use of the Translate tool when positioning your GameObject. In Figure 4.5 you can see the X-, Y-, and Z-axes just like the Scene Gizmo has. In fact, in 3D mode, you will see that the Translate Gizmo and Scene Gizmo match. This is because in world space we will move along these axes.
Figure 4.5 Default Translate tool display
The Translate button can be found next to the Hand tool in the Transform toolbar. See Figure 4.4 if you do not remember this. You can also access the Translate tool by tapping the W hotkey on the keyboard.
Simply left-click and drag on one of the colored arrows, and your object will move along that axis. Moving along the direction the arrow points will move the object in a positive direction, and negative in the opposite.
Tapping the E key will bring up the Rotate tool. This will let you rotate the object along its pivot point. The colored circles again indicate the axes, but the object will rotate around an axis. This tool is very handy for setting an object at a certain angle. Figure 4.6 shows the Rotate Gizmo.
Figure 4.6 Default Rotation tool display
The last tool is the Scale tool (Figure 4.7). Scale means to increase or decrease the size of an object in relation to its actual size. Using the axis handles will scale the object only in that one axis. This can be handy if you want to adjust the appearance of an object, such as making a cube into a rectangle or a sphere into an ellipse.
Figure 4.7 Default Scale tool display
Positioning our objects with the Translate tool will help us set up our level and accurately position objects in the Scene. But in a 2D setup this will only help us to place them along the X-axis (horizontal) and Y-axis (vertical). This will work for most everything, but we will want to have some depth to our levels. We want to have some dimension and balance to our world so it doesn’t appear flat. Sprites like clouds moving behind our player and allowing the player to walk in front of hills will help add a touch of realism, even though it is 2D.
In a 2D game using Unity, we can still control the Z-depth using the selected sprite’s Sorting Layer and Order in Layer attributes. These can be found on the Sprite Renderer of your Sprite GameObject. Figure 4.8 shows an example of this on our Player GameObject.
Figure 4.8 Sprite Renderer Component of our Player GameObject
The most effective way we have of sorting our sprites is by using Sorting Layers. Sorting Layers work very similarly to 2D editing package layers. You separate elements into layers, and then place those layers above or behind one another to determine what draws in front of the next. The only difference with Unity is that it draws from bottom to top, with the top being drawn first, and then the next layer down over that. See Figure 4.9 for the Sorting Layers we will set up.
Figure 4.9 Tags & Layers window—Sorting Layers
Let’s add a couple of Sorting Layers for the Player GameObject and Scene elements we will be adding:
- With the Tags & Layers Manager open, click the drop-down to reveal the default Sorting Layer.
- Click the + icon to add a new layer. Rename this “Foreground.”
- By default Unity will create new layers below the selected one. Left-click and drag over the Layer 1 text and move this above the Layer 0 slot.
- Create the remaining three layers for Character, Midground, and Background.
Order in Layer
Another way of layering sprites is with the Order in Layer attribute in the Sprite Renderer. While we could make a bunch of Sorting Layers for each of our sprites, this can be tedious, very hard to work with, and costly for our game. You may have a sprite sheet that consists of elements that you wish to have sort with one another, but you need the entire sheet to sort with other elements. For this we use Order in Layer.
The only difference from a visual standpoint is that Order in Layer sorts based on a value. The higher the value, the later the sprite will draw, with higher values above everything else. You may also find as you create the game that you need to assign a sprite lower than 0. You can use negative values if needed.
We covered the Pixels To Units measurements for our sprites back in Chapter 3, “Creating 2D Sprites.” This ensures that the size of all of our game elements is comparable to that of our player, so that all of the GameObjects will be in scale with one another. Once we have our worlds built, enemies placed, and props added, this will make sense, but first we have to build these things.
Another benefit of setting the Pixels to Units size is that it will uniformly align all of the tile sprites, allowing us to easily snap the ends of one tile to the next.
The grid in our Scene View will help us “snap” pieces of our levels together easily. When we set the Pixels To Units size for the tile sprites (70), it made them equal to their actual dimensions (70 pixels by 70 pixels). This means our tile will fit exactly into a 1 × 1 Unity grid. Now we can easily “snap” one piece to the next.
The Snap Settings (Figure 4.10) work in relation to the grid units. Snap Settings allow you to position, rotate, and scale your objects with precise measurements. This tool will become invaluable when we start building our level.
Figure 4.10 Snap Settings with default values
- Move X (Y and Z): The number of units the object will move when using snapping
- Scale: The percentage an object will scale in size
- Rotation: The degree of rotation the object will make
While we do not have to adjust the Snap Settings, it is helpful to know where to locate them. They can be found under the Edit menu (Edit > Snap Settings).