mirror of
https://github.com/godotengine/godot-docs.git
synced 2026-01-04 14:11:02 +03:00
Merge pull request #3630 from PeterJSFChaplin/autotile-tutorial
Add autotile tutorial
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
.. _doc_using_tilemaps:
|
||||
|
||||
Using tilemaps
|
||||
~~~~~~~~~~~~~~
|
||||
==============
|
||||
|
||||
Introduction
|
||||
------------
|
||||
@@ -127,8 +127,10 @@ Atlas tiles
|
||||
-----------
|
||||
|
||||
Rather than adding individual tiles one at a time, you can define a group of
|
||||
tiles all at once using an atlas. Click "New Atlas" and drag to select the
|
||||
entire tile sheet.
|
||||
tiles all at once using an atlas. This also allows you to randomly generate
|
||||
tiles from the group.
|
||||
|
||||
Click "New Atlas" and drag to select the entire tile sheet.
|
||||
|
||||
.. image:: img/tileset_atlas.png
|
||||
|
||||
@@ -150,6 +152,121 @@ tiles it contains:
|
||||
In addition to saving time when defining the tiles, this can help by grouping
|
||||
similar tiles together when you're working with a large number of tiles.
|
||||
|
||||
Random tile priorities
|
||||
~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
When drawing with atlas tiles, enabling the "Use priority" option causes tiles
|
||||
to be selected at random. By default, each tile in the tileset has an equal
|
||||
likelihood of occurring. You can change the likelihood by setting different
|
||||
priorities for each tile. For example, a tile with priority 2 is twice as
|
||||
likely to be selected as a tile with priority 1, and a tile with priority 3 is
|
||||
50% more likely to be selected than a tile with priority 2.
|
||||
|
||||
Autotiles
|
||||
---------
|
||||
|
||||
Autotiles allow you to define a group of tiles, then add rules to control which
|
||||
tile gets used for drawing based on the content of adjacent cells.
|
||||
|
||||
Click "New Autotile" and drag to select the tiles you wish to use. You can add
|
||||
collisions, occlusion, navigation shapes, tile priorties, and select an icon
|
||||
tile in the same manner as for atlas tiles.
|
||||
|
||||
Tile selection is controlled by bitmasks. Bitmasks can be added by clicking
|
||||
"Bitmask", then clicking parts of the tiles to add or remove bits in the mask.
|
||||
Left-clicking an area of the tile adds a bit, right-click removes "off",
|
||||
and shift-left-click sets an "ignore" bit.
|
||||
|
||||
Whenever Godot updates a cell using an autotile, it first creates a pattern
|
||||
based on which adjacent cells are already set. Then, it searches the autotile
|
||||
for a single tile with a bitmask matching the created pattern. If no matching
|
||||
bitmask is found, the "icon" tile will be used instead. If more than one
|
||||
matching bitmask is found, one of them will be selected randomly, using the
|
||||
tile priorities.
|
||||
|
||||
The rules for matching a bitmask to a pattern depend on the tileset's autotile
|
||||
bitmask mode. This can be set in the "Inspector" tab, under the "Selected Tile"
|
||||
heading. Allowed values are "2x2", "3x3 (minimal)", and "3x3".
|
||||
|
||||
All "on" and "off" bits must be satisfied for a bitmask to match, but "ignore"
|
||||
bits are ignored.
|
||||
|
||||
2x2
|
||||
~~~
|
||||
|
||||
In 2x2 mode, each bitmask contains four bits, one for each corner.
|
||||
|
||||
Where a bit is "on", all cells connected to that corner must be filled using
|
||||
the same autotile, in order for the bitmask to match.
|
||||
For example, if the top-left bit is set, the cell directly above,
|
||||
directly left, and diagonally above-left must be filled.
|
||||
|
||||
Where a bit is "off", at least one cell connected to that corner must not be
|
||||
set using the same autotile.
|
||||
|
||||
At least one bit must be set for the tile to be used, so a total of 15 tiles
|
||||
would be needed to provide exactly one tile for each arrangement that this mode
|
||||
can test for.
|
||||
|
||||
2x2 mode can only match cells that are part of a 2-by-2 block - cells with no
|
||||
neighbors and lines only one cell wide are not supported.
|
||||
|
||||
3x3 (minimal)
|
||||
~~~~~~~~~~~~~
|
||||
|
||||
In 3x3 (minimal) mode, each bitmask contains 9 bits (4 corners, 4 edges,
|
||||
1 center).
|
||||
|
||||
The 4 corner bits work the same as in 2x2 mode.
|
||||
|
||||
When an edge bit is "on", the cell which shares that edge must be filled.
|
||||
When an edge bit is "off", the cell which shares that edge must be empty.
|
||||
|
||||
The center bit should be "on" for any tile you wish to use.
|
||||
|
||||
Note that in this mode, it makes no sense for a corner bit to be "on" when
|
||||
either edge bit adjacent to it is not "on".
|
||||
|
||||
A total of 47 tiles would be needed to provide exactly one bitmask for each
|
||||
arrangement that this mode can test for.
|
||||
|
||||
|
||||
3x3
|
||||
~~~
|
||||
|
||||
In 3x3 mode, each bitmaks contains 9 bits (4 corners, 4 edges, 1 center)
|
||||
|
||||
Each bit checks a single adjacent cell. Corner bits only check diagonally
|
||||
adjacent cells. The center bit should be "on" for any tile you wish to use.
|
||||
|
||||
A total of 256 tiles would be needed to provide exactly one bitmask for each
|
||||
arrangement that this mode can test for.
|
||||
|
||||
|
||||
Disabling autotile
|
||||
~~~~~~~~~~~~~~~~~~
|
||||
|
||||
When using an autotile, it is possible to turn of the autotile behaviour and
|
||||
select tiles manually, by clicking "Disable Autotile" at the top of the tile
|
||||
selection window.
|
||||
|
||||
Autotile binding
|
||||
~~~~~~~~~~~~~~~~
|
||||
|
||||
By default, autotile only checks for adjacent cells filled using the same
|
||||
autotile. This behaviour can be overridden in order to have autotiles bind to
|
||||
each other, or even bind to empty cells. At present, this can only be done
|
||||
through scripting. You will need to add a script to your tileset, and define
|
||||
a function named "_is_tile_bound(drawn_id, neighbor_id)". This function will
|
||||
be called for each adjacent cell that does not contain the same autotile, and
|
||||
should return true if you want the drawn cell to "bind" to the neighbor cell.
|
||||
You can find the id of an autotile using "find_tile_by_name(name)", empty cells
|
||||
are given an id of -1.
|
||||
|
||||
Note that to use this in the editor, the script should start with a "tool"
|
||||
declaration, and you may need to close and reload the scene for these changes
|
||||
to take effect.
|
||||
|
||||
Tips and tricks
|
||||
---------------
|
||||
|
||||
|
||||
Reference in New Issue
Block a user