Jump to content
  • Advertisement
Sign in to follow this  
  • entries
  • comments
  • views

About this blog

Game Development with Unity 3D

Entries in this blog


Prepare 2D tile set for Rotorz Tile System

[color=#555555][font=Arial, Tahoma, Verdana] I recently received a question asking if [/font][/color]Rotorz Tile System[color=#555555][font=Arial, Tahoma, Verdana] could be used to paint 2D tiles. A tile is a three-dimensional object that is represented by a prefab. So the answer was yes, because a plane can be created and mapped to the tile texture. When working with tile sets it is generally a good idea to pack tiles into a texture atlas in order to keep the number of draw calls low. [/font][/color]

[color=#555555][font=Arial, Tahoma, Verdana]The process of creating such tiles manually is not an overly complicated procedure, but can easily become time consuming. A plane mesh must be created for each texture atlas mapping with varying UVs for each tile. A tile brush must then be created for painting with. So I decided that it would be useful to add a utility window to ease the process of creating 2D tile brushes. [/font][/color]

[color=#555555][font=Arial, Tahoma, Verdana]The following video demonstrates the process of creating a 2D tile set. The video then proceeds to demonstrate the creation of an oriented tile brush using the automatically generated tile brushes. [/font][/color]

[media] [/media]

[color=#555555][font=Arial, Tahoma, Verdana] Credit for demo atlas artwork: http://mapledev.tumb...35/howtotileset [/font][/color]

[color=#555555][font=Arial, Tahoma, Verdana] 1. Ensure that Mip-Mapping is disabled for texture atlas from image import options. [/font][/color]

[color=#555555][font=Arial, Tahoma, Verdana] [/font][/color]

[color=#808080]Example of a 3x3 tile set for a grassy platform[/color]

[color=#555555][font=Arial, Tahoma, Verdana] 2. Open "Brush Designer" window and select "Create Brushes from Atlas" button from lower left of user interface. This should display the following window: [/font][/color]

[color=#555555][font=Arial, Tahoma, Verdana] [/font][/color]

3. Click "Select" button to right of "Texture Atlas" and select the tile texture atlas. Alternatively you can simply drag the texture from the project panel into the "Texture Atlas" field.

4. Specify 3 rows and 3 columns to define individual tiles.

5. Tick "Add Collider" checkbox to automatically add a box collider to each generated tile. This will reveal a "No Collider" option for each brush that will be generated which allows you to exclude specific brushes from having a collider added. This is useful for inner tiles that cannot be collided with.

6. Tick "Static" checkbox to indicate that tiles will be optimized when tile system is built.

7. You can then name brushes as desired or use "Auto Name" to name brushes automatically. Do not specify a name for brushes that you do not want to create.

8. Click "Create Brushes" and then you should be able to easily paint with 2D tiles:




Creating levels with Unity 3D

Developers who are creating a game for the first time may find the idea of creating levels a daunting task. Unity is an extremely powerful engine and editor which gives the developer a lot of freedom, but with so much freedom where should a developer begin? This post covers some of my experiences and opinions of the level creation process. Please comment with your own experiences, techniques and criticism!

Here are some of the concerns that I had when starting out with my first game:
Should I create the entire level in a modelling package?
What advantages would there be to composing the levels in Unity?
Which techniques would be most suitable for mobile development?

The truth is that there is no single "correct" approach. It all depends upon the type of game that you are making, the platforms that you are targeting, the version of Unity that you are using (Indie / Pro), and of course the level of skill that you posses!

Level Creation

Create bulk of scene using modelling package
With the modelling package of your choice you can create the bulk of your scene with tones of flexibility.

When taking this route I would strongly recommend creating an appropriate scene hierarchy (when supported) because this will make things a lot easier when working in Unity. I have also found it particularly useful to group objects using named empty objects; this avoids having to scroll through a very long list of objects in Unity!

Whilst levels created using this approach will generally require more memory at runtime, this can lead to improved rendering performance.

The only major problem that I found with this approach was with regards to changing and re-exporting the level. I found that on several occasions components (and component properties) that were assigned to sub-objects with the Unity editor get lost. This may have been something that I was doing wrong though...

Compose scene in Unity
Instead of creating and mapping the whole scene in a modelling package, create a selection of parts that can be reused. Compose your scene using the Unity editor by making the most of prefabs.

This will often use less memory than the previous approach, however the dynamic batching of objects may be more intensive.

When using this approach I did not encounter problems when updating meshes and re-exporting them.

Use specialized extension
There are a number of extension available from the Unity asset store that can make it considerably easier to create levels. It is well worth taking a look at what is available because there are some fantastic tools that can save a lot of time and hard work!

Here are just a few that are relevant to level design:
Rotorz Tile System - This is an extension that I created which aims to make it easier to design levels using 3D tiles. You can create tiles using your favourite modelling software and then import them into Unity for use within tile systems. You can control how painted tiles are transformed and can optionally be automatically oriented.

UniTile (2D Map Editor) - Another fantastic tile based editor which specialises with 2D graphics. Easily create tiles from texture atlases and build highly optimized levels.
RageSpline - Create and edit smooth 2D vector-style graphics. This is ideal for creating both levels and various other graphics. This tool can lead to some visually stunning effects with a similar look to Flash-type games.

Procedural Generation
This is an extremely complex topic, but in some scenarios it may be beneficial to dynamically build scenes. Scenes could be composed of predefined meshes or from procedurally generated meshes.

Performance Considerations

When modelling for games it is useful to keep the idea of draw calls in mind (especially for mobile development!). The number of draw calls increases for each mesh that is rendered (one for each material applied to mesh). There are a number of ways in which the number of draw calls can be reduced.

Reduce the number of materials
Use the fewest number of materials possible to achieve the visual quality that you are after. Where possible reduce the number of similar materials by combining multiple textures into a single image (often referred to as a texture atlas). In many cases this can significantly reduce the number of draw calls. The "Angry Bots" demo project that is included with Unity is an excellent example of this!

Both Unity and Unity Pro support dynamic batching which attempts to reduce the number of draw calls by submitting multiple objects that share the same material at the same time. Unity Pro includes the additional option of static batching which takes this a step further by combining objects that share the same material into a single object. Whilst static batching does require more memory, it can lead to significantly better performance.

It is also possible to create a custom script that combines meshes at runtime, or a custom editor script.

Number of triangles and vertices
Keeping the number of triangles and vertices in a mesh to a minimum will improve performance, especially on mobile devices. More often than not additional detail can be added to a texture instead. Custom shaders can also be created to add detail to an otherwise flat object using special textures like bump and height maps (for example).

For those who are interested in getting started with their own shaders, I would strongly recommend watching JessyUV's videos on YouTube!



Sign in to follow this  
  • Advertisement

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!