【零基礎入門unity游戲開發——2D篇】2D 游戲場景地形編輯器——TileMap的使用介紹

考慮到每個人基礎可能不一樣,且并不是所有人都有同時做2D、3D開發的需求,所以我把 【零基礎入門unity游戲開發】 分為成了C#篇、unity通用篇、unity3D篇、unity2D篇

  • 【C#篇】:主要講解C#的基礎語法,包括變量、數據類型、運算符、流程控制、面向對象等,適合沒有編程基礎的同學入門。
  • 【unity通用篇】:主要講解unity的基礎通用的知識,包括unity界面、unity腳本、unity資源管理、unity動畫、unity攝像機等,適合unity初學者入門。
  • 【unity3D篇】:主要講解unity3D的知識,unity3D角色、unity3D物理系統、unity3D光照等,適合只想做2D游戲的開發者學習。
  • 【unity2D篇】unity2D篇:主要講解unity2D的知識,包括unity2D角色、unity2D物理系統、unity2D光照等,適合只想做3D游戲的開發者學習。

這樣方便大家按需選擇性的去學習,比如有編程基礎的大概率可以直接從unity通用篇開始入門,沒有編程基礎的建議從C#篇開始學習。只想做2D游戲的話,可以直接從unity2D篇開始學習,3D篇大概率就不需要看了,節約學習時間成本。

文章目錄

  • 前言
    • 1、什么是Tilemap
    • 2、Tilemap和SpriteShape的異同
    • 3、3D中使用TileMap
  • 一、Tilemap的使用
    • 1、準備工作
      • 1.1 從PackageManager中引入Tilemap包
      • 1.2 導入素材圖片
      • 1.3 切割圖片
    • 2、創建瓦片畫板
      • 2.1 創建文件夾存放畫板文件
      • 2.2 打開平鋪調色板
      • 2.3 創建瓦片調色板
      • 2.4 創建瓦片調色器相關參數
        • (1) Name:瓦片調色器的名稱
        • (2) Grid:瓦片的網格布局
        • (3) Cell Size:瓦片繪制到單元格的大小
    • 3、創建瓦片
      • 3.1 創建文件夾存放瓦片文件
      • 3.2 生成瓦片文件
      • 3.3 單獨保存某張瓦片
      • 3.4 生成的瓦片文件參數介紹
        • (1) Preview:預覽圖
        • (2) Sprite:瓦片關聯的精靈紋理
        • (3) Color:瓦片色調顏色
        • (4) Collider Type:碰撞器類型
        • (5) unity6新增的屬性
    • 4、TilePalette瓦片調色板窗口基本操作技巧
      • 4.1 單擊瓦片——選擇瓦片
      • 4.2 在多個瓦片上移動——選擇多個瓦片
      • 4.3 Alt+鼠標左鍵拖動、按住鼠標右鍵、`按住滾輪鍵拖動`——平移
      • 4.4 旋轉滾輪鍵——放大/縮小
      • 4.5 編輯瓦片
    • 5、創建網格
      • 5.1 創建
      • 5.2 Grid參數介紹
        • (1) Cell Size:網格單元格的大小
        • (2) Cell Gap:網格之間的間隔大小
        • (3) Cell Layout:網格單元的形狀和排列
        • (4) Cell Swizzle:Unity 將 XYZ 單元格坐標重新排序為你選擇的類型
      • 5.3 Tilemap參數介紹
        • (1) Animation Frame Rate 動畫幀速率
        • (2) Color 顏色
        • (3) Tile Anchor 平鋪錨
        • (4) Orientation 方向
      • 5.4 Tilemap Renderer參數介紹
        • (1) Sort Order 排序次序
        • (2) Mode 模式
        • (3) Detect Chunk Culling Bounds 檢塊剔除邊界
    • 6、在網格上刷瓦片
      • 6.1 畫出瓦片
      • 6.2 解決瓦片沒有占滿格子的問題
      • 6.3 解決瓦片之間有縫隙的問題
        • 方法一 像素風素材
        • 方法二 非像素風素材
      • 6.5 旋轉和翻轉瓦片快捷鍵
    • 7、擦除瓦片
    • 8、區域瓦片繪制
    • 9、瓦片吸取
    • 10、填充瓦片
    • 11、瓦片分層(渲染順序)
    • 12、添加碰撞體
      • 12.1 添加Tilemap Collider 2D碰撞體
      • 12.2 合并碰撞體
      • 12.3 自定義編輯圖片的物理碰撞區域
      • 12.4 去除部分瓦片碰撞效果
    • 13、瓦片透視排序
  • 三、 Isometric Z as Y 的等距瓦片調色板
    • 1、什么是等距瓦片?
    • 2、 創建模式為 Isometric Z as Y 的瓦片調色板
    • 3、導入等距瓦片素材及配置
    • 4、創建等距瓦片地圖網格
    • 5、繪制等距瓦片
      • 5.1 直接繪制
      • 5.2 自定義排序模式
      • 5.3 修改瓦片渲染器模式
      • 5.4 效果
    • 6、繪制更改瓦片z軸位置
  • 三、Tilemap Extras官方拓展包
    • 1、安裝Tilemap Extras擴展包
    • 2、規則瓦片 Rule Tile(`重要`)
      • 2.1 Default Sprite:默認圖片
      • 2.2 Default GameObject:默認游戲對象
      • 2.3 Default Collider 默認碰撞器規則
      • 2.4 Tiling Rules:平鋪規則,可以自己添加刪除
        • (1) 單一瓦片
        • (2) 隨機瓦片
        • (3) 動畫效果瓦片
    • 2、動畫瓦片 Animated Tile
    • 3、規則覆蓋瓦片 Rule Override Tile
    • 4、高級規則覆蓋瓦片 Advanced Rule Override Tile
  • 四、筆刷類型
    • 1、GameObject Brush 游戲對象筆刷
    • 2、Group Brush 組合筆刷
    • 3、Random Brush 隨機筆刷
    • 4、Line Brush 線性筆刷
  • 四、代碼管理 Tilemap
  • 源碼
    • https://gitcode.net/unity1/unity2d-tilemap ![在這里插入圖片描述](https://i-blog.csdnimg.cn/blog_migrate/77745630a26fad034790a3c5d59e5594.png)
  • 專欄推薦
  • 完結

前言

1、什么是Tilemap

Unity的Tilemap 一般稱之為瓦片地圖或者平鋪地圖,是 Unity2017 中新增的功能,主要用于快速編輯 2D 游戲中的場景,通過復用資源的形式提升地圖多樣性。

Tilemap工作原理就是用一張張的小圖排列組合為一張大地圖。
在這里插入圖片描述

總結起來,Unity的Tilemap是一個強大的工具,可以幫助開發者創建和管理2D地圖。它提供了一系列易于使用的編輯器功能和組件,讓你能夠更快速地建立自己的游戲世界。無論是初學者還是有經驗的開發者,都可以通過Tilemap輕松地構建出具有豐富內容的游戲地圖。

2、Tilemap和SpriteShape的異同

前面我們介紹過【SpriteShape】,也可以創建2D 地形或路徑。

  • 共同點
    • 他們都是用于制作2D游戲的場景或地圖的。
  • 不同點
    • SpriteShape可以讓地形有弧度,TileMap不行。
    • TileMap可以快捷制作有偽“Z”軸的地圖,SpriteShape不行。

3、3D中使用TileMap

TileMap主要是用在2d游戲中,但是在3D游戲中其實也可以應用,參考:【unity實戰】實現一個放置3d物品建造裝修系統
在這里插入圖片描述

一、Tilemap的使用

1、準備工作

1.1 從PackageManager中引入Tilemap包

如果你創建的不是2Dunity項目,可能需要自己手動去安裝Tilemap包
![外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=https%3A%2F%2Fi-blog.%E3%80%81csdnimg.cn%2Fdirect%2F40f8188a34154ce2b795f514d098d1f4.png&pos_id=img-gQFlyJgI40f8188a34154ceb995f2614d098d1f4.png6
在這里插入圖片描述

1.2 導入素材圖片

我們要制作關卡,得先有關卡的圖片素材,以地形素材為例:
在這里插入圖片描述
把素材圖片導入到Unity工程中,如下,放在Sprites目錄中

素材來源:Sunny Land

1.3 切割圖片

參考:【零基礎入門unity游戲開發——2D篇】SpriteEditor圖片編輯器

  • 先檢查一下你是否安裝了2D Sprite,如果沒有,則先安裝它。

  • 現在,我們需要把整圖的素材圖片切割成一個個小格子圖片,用于后面制作Tilemap的瓦片。

  • 注意設置一下圖片的類型為Sprite (2D and UI),將圖片的Sprite Mode設置為Multiple(多個),然后點擊Apply(應用)按鈕保存。
    在這里插入圖片描述

  • 接著,點擊Sprite Editor按鈕,打開編輯工具。

  • 在彈出的Sprite Editor窗口中,點擊切片按鈕,然后選擇類型為Grid By Cell Size,設置切割尺寸,比如我這里設置了16x16(因為最小格瓦片就是16x16),最后點擊切片按鈕。

  • ps:你也可以選擇然后選擇類型為Grid By Cell Count,設置列數和行數,比如可以這里設置了25 23,這里的列數行數需要根據你自己整圖的排版而定
    在這里插入圖片描述

  • 我們可以看到,整圖生成了一張張小格子紋理圖:
    在這里插入圖片描述

2、創建瓦片畫板

2.1 創建文件夾存放畫板文件

先創建一個TipleMap文件夾,用于下面存放畫板文件。
在這里插入圖片描述

2.2 打開平鋪調色板

接著點擊菜單:窗口>2D ->Tile Palette(平鋪調色板)
在這里插入圖片描述

2.3 創建瓦片調色板

此時會打開平鋪調色板窗口,點擊創建新調色板按鈕,輸入畫板名字,比如New Palette,點擊創建按鈕,就保存在剛才創建的TipleMap文件夾下。

注意:后面會單獨介紹每種瓦片的具體使用,這里先用矩形網格舉例。
在這里插入圖片描述
瓦片調色板我們可以創建多個,然后在這里進行切換
在這里插入圖片描述

2.4 創建瓦片調色器相關參數

在這里插入圖片描述

(1) Name:瓦片調色器的名稱
(2) Grid:瓦片的網格布局

在這里插入圖片描述

  • Rectangle:矩形瓦片

  • Hexagon:六邊形瓦片。選擇這個下面會多出一個參數。Hexagon Type:六邊形瓦片地圖類型,決定了六邊形的旋轉位置。
    在這里插入圖片描述

    • Point Top:點朝頂部的六邊形
      在這里插入圖片描述

    • Flat Top:面朝頂部的六邊形
      在這里插入圖片描述

  • Isometric:等距瓦片,單元格為菱形
    在這里插入圖片描述

  • Isometric Z as Y:等距瓦片并且將單元格 Z 軸轉換為局部 Y 坐標
    在這里插入圖片描述

(3) Cell Size:瓦片繪制到單元格的大小

這里unity的翻譯有點問題
在這里插入圖片描述

  • Automatic:基于瓦片資源的精靈大小自動設置
  • Manual:自定義大小

3、創建瓦片

3.1 創建文件夾存放瓦片文件

先創建一個Tiles文件夾,用于存放下面的瓦片文件。
在這里插入圖片描述

3.2 生成瓦片文件

將整圖拖入Tile Palette窗口中,選擇瓦片保存目錄為Tiles,即可將圖片添加到畫板中,并且生成瓦片文件。
在這里插入圖片描述

3.3 單獨保存某張瓦片

我們也可以只拖某張小圖到畫板中,單獨保存某張瓦片,像這樣子:
在這里插入圖片描述

3.4 生成的瓦片文件參數介紹

在這里插入圖片描述

(1) Preview:預覽圖
(2) Sprite:瓦片關聯的精靈紋理
(3) Color:瓦片色調顏色
(4) Collider Type:碰撞器類型

在這里插入圖片描述

  • None:不生成碰撞器
  • Sprite:基于精靈輪廓生成碰撞器形狀
  • Gird:基于瓦片單元格生成碰撞器形狀
(5) unity6新增的屬性
  • GameObject to Instantiate 要實例化的GameObject:置于瓦片地圖上時要實例化的GameObject。
  • Flags 標志:現在我也不清楚是干什么用的,官方文檔也沒寫,后面有用到了再來補充
    在這里插入圖片描述

4、TilePalette瓦片調色板窗口基本操作技巧

4.1 單擊瓦片——選擇瓦片

在這里插入圖片描述

4.2 在多個瓦片上移動——選擇多個瓦片

在這里插入圖片描述

4.3 Alt+鼠標左鍵拖動、按住鼠標右鍵、按住滾輪鍵拖動——平移

在這里插入圖片描述

4.4 旋轉滾輪鍵——放大/縮小

在這里插入圖片描述

4.5 編輯瓦片

注意:點亮Edit編輯按鈕才能編輯
在這里插入圖片描述
復制刪除
在這里插入圖片描述
移動
在這里插入圖片描述

在這里插入圖片描述

  • 選擇工具(S)
  • 移動工具(M)
  • 畫筆工具(B):使用選取器吸了一個圖后,會自動切換到畫筆工具,單個填充。點擊格子會放置吸收的圖。
  • 框填工具(U):使用選取器吸了一個圖后,再切換到框填工具,畫一個框框進行范圍填充
  • 選取器工具(I):選取填充樣本,相當于吸管吸一個圖
  • 橡皮擦工具(D)或者使用畫筆工具時按住Shift,按住ctrl批量框這清除:單個擦除
  • 填充工具(G):使用選取器后再切換到填充工具,批量填充

5、創建網格

5.1 創建

在Hierarchy視圖空白處右鍵鼠標,點擊菜單2D對象 -> 瓦片地圖

ps:可以看到這里的參數是和前面瓦片畫板的Grid(網格)參數類型是對應的,因為前面我們創建的是矩形畫板,這里也選擇矩形。
在這里插入圖片描述

此時就會在場景中創建一個Grid / Tilemap節點,此時在Scene場景中就可以看到一個個網格了。
在這里插入圖片描述

5.2 Grid參數介紹

在這里插入圖片描述

(1) Cell Size:網格單元格的大小

改成2x2效果
在這里插入圖片描述

在這里插入圖片描述

(2) Cell Gap:網格之間的間隔大小

間隙改成1x1
在這里插入圖片描述

在這里插入圖片描述

(3) Cell Layout:網格單元的形狀和排列

如果前面創建時選錯了類型,可以在這修改
在這里插入圖片描述

  • Rectangle:矩形瓦片
  • Hexagon:六邊形瓦片
  • Isometric:等距瓦片,單元格為菱形
  • Isometric Z as Y:等距瓦片并且將單元格 Z 軸轉換為局部 Y 坐標
(4) Cell Swizzle:Unity 將 XYZ 單元格坐標重新排序為你選擇的類型

在這里插入圖片描述

5.3 Tilemap參數介紹

在這里插入圖片描述

(1) Animation Frame Rate 動畫幀速率

播放瓦片動畫的速率,相當于倍速

(2) Color 顏色

瓦片色調顏色

(3) Tile Anchor 平鋪錨

瓦片的錨點偏移

(4) Orientation 方向

瓦片地圖上瓦片的方向,相當于 2D 平面使用的是 Unity 中的哪兩個軸
在這里插入圖片描述

5.4 Tilemap Renderer參數介紹

在這里插入圖片描述

(1) Sort Order 排序次序

設置所選瓦片地圖上的瓦片排序方向,其實就是選擇原點在哪。

(2) Mode 模式

選擇渲染器的渲染模式。
在這里插入圖片描述

  • Chunk:按位置對瓦片進行分組,并將瓦片精靈一起批處理進行渲染,性能較好。
  • Individual:單獨渲染每個瓦片,會考慮它們的位置和排序順序。會讓瓦片精靈和場景中其他渲染器或自定義排序軸進行交互。
  • SRP Batch:選擇此模式可以使瓦片渲染器組件與可腳本渲染管線批處理程序兼容,一旦滿足兼容性要求。注意:此模式僅在通用渲染管線版本 15 及以上版本中受支持。此渲染模式按瓦片的位置和它們精靈使用的紋理對瓦片進行分組,然后批量渲染。只有當具有相同紋理的組按照渲染器排序順序選擇的方位順序排列時,才會動態地將它們批量在一起。
(3) Detect Chunk Culling Bounds 檢塊剔除邊界

渲染器如何剔除瓦片地圖的邊界,就是超出瓦片的范圍不渲染的方式。
在這里插入圖片描述

  • Auto 自動:渲染器會自動檢查瓦片使用的精靈,以確定要使用的擴展剔除邊界。
  • Manual 手動:用于擴展瓦片地圖塊裁剪邊界的值是手動設置的,而不是使用編輯器的自動檢測。
    • Chunk Culling Bounds 區塊剔除邊界
      僅當將檢測塊裁剪邊界設置為手動時,此屬性才可見。

其他參數都和SpriteRenderer組件一樣,具體可以參考:【零基礎入門unity游戲開發——2D篇】SpriteRenderer精靈渲染器組件

6、在網格上刷瓦片

6.1 畫出瓦片

打開剛剛的Tile Palette畫板窗口,點擊畫筆(頂部第三個按鈕,快捷鍵B),然后選中你要繪制的瓦片,在場景的格子中按住鼠標拖動即可在網格中連續畫出瓦片了,如下:
在這里插入圖片描述
不過這里我們發現了一個問題,瓦片圖片并沒有鋪滿一個格子,這是為什么呢?
在這里插入圖片描述

6.2 解決瓦片沒有占滿格子的問題

瓦片圖片沒有鋪滿格子的問題,是因為在Unity中,一個單元格繪制多少像素是由圖片本身設置決定的,我們選擇瓦片整圖,可以看到Pixels Per Unit是100,它表示一個單元格顯示100個像素。
在這里插入圖片描述
而我們一個瓦片圖片的尺寸是16 x 16,
在這里插入圖片描述
所以,想要讓瓦片鋪滿一個格子,我們把Pixels Per Unit設置為16即可。
在這里插入圖片描述
可以看到,現在瓦片剛好鋪滿一個格子了。
在這里插入圖片描述

6.3 解決瓦片之間有縫隙的問題

方法一 像素風素材

雖然瓦片鋪滿了格子,但是它們之間是有縫隙的,而且圖片模糊,我們在Game視圖中觀察可能會更清楚一點,如下:
在這里插入圖片描述

解決辦法是把瓦片整圖的Filter Mode設置為點(無過濾器),
在這里插入圖片描述
可以看到現在沒有縫隙了,圖片也清晰了
在這里插入圖片描述

方法二 非像素風素材

使用Tilemaps時的一個常見問題是圖塊之間顯示的間隙
在這里插入圖片描述
如果你不是像素風的素材,我們還可以創建了一個Sprite Atlas來將Spritesheet拖入其中
在這里插入圖片描述
把你的瓦片素材拖入
在這里插入圖片描述
效果
在這里插入圖片描述

6.5 旋轉和翻轉瓦片快捷鍵

旋轉瓦片:[ ]
在這里插入圖片描述
翻轉瓦片:shift + [ ]
在這里插入圖片描述

7、擦除瓦片

畫瓦片的時候,可能不小心畫錯了,需要擦除。

我們只需在畫板工具上點擊橡皮擦按鈕(快捷鍵D),然后在網格中點擊即可擦除對應的瓦片,如下:
在這里插入圖片描述

8、區域瓦片繪制

我們可以在畫板找那個選中一個區域的瓦片,就可以直接在網格中一次畫出來了,如下:
在這里插入圖片描述

9、瓦片吸取

我們可以在畫板中選擇瓦片然后在網格中畫,我們也可以直接在網格中通過吸取工具(快捷鍵I)選擇對應的瓦片,如下:
在這里插入圖片描述

10、填充瓦片

我們可以給一個閉包的區間填充瓦片(快捷鍵G),選中瓦片,然后在一個閉包的區域點擊一下即可填充,如下:
在這里插入圖片描述

11、瓦片分層(渲染順序)

瓦片地圖中有多層時,可以再這里選擇層級進行繪制
在這里插入圖片描述
我們可以創建多個Tilemap,比如我創建了一個Tilemap2用來繪制柱子,
在這里插入圖片描述
我們可以看到柱子的層與地面的層的渲染順序不對
在這里插入圖片描述
我們希望地面的層在前面,只需要選擇地面的Tilemap把Order in Layer調大即可,比如調成1。(柱子層的Order in Layer是0)。
在這里插入圖片描述
現在渲染順序就對了,
在這里插入圖片描述

12、添加碰撞體

12.1 添加Tilemap Collider 2D碰撞體

注意:想要生成碰撞器的瓦片 Collider Type(及前面每個瓦片的碰撞器類型) 類型要進行設置,不能為 None
在這里插入圖片描述

我們的主角需要能夠站在地面上,所以地面層的Tilemap需要添加碰撞體,我們給地面層的Tilemap節點添加Tilemap Collider 2D組件,如下:
在這里插入圖片描述
我們可以看到地面層的瓦片都帶上了碰撞體。
在這里插入圖片描述

12.2 合并碰撞體

我們可以看到,碰撞體是一格一格的,為了提升性能,建議把碰撞體進行合并,只需要在地面層的Tilemap節點再掛一個Composite Collider 2D組件(它會自動再掛一個Rigidbody 2D組件)。
在這里插入圖片描述
將Rigidbody 2D組件的Body Type設置為Static(靜態),否則地面會受到重力往下掉。

將Tilemap Collider 2D組件的Used By Composite(使用復合)勾選上,這樣碰撞體格子會進行合并。
在這里插入圖片描述
合并后的碰撞體如下:
在這里插入圖片描述

12.3 自定義編輯圖片的物理碰撞區域

默認的瓦片碰撞可能并不是你想要的,這時候就需要去編輯圖片的物理形狀了
在這里插入圖片描述
調整完選刷新才會生效
在這里插入圖片描述

效果
在這里插入圖片描述

12.4 去除部分瓦片碰撞效果

有些瓦片我們可能不需要碰撞效果,比如花草等,這時我們可以打開對應的tile修改碰撞類型為none即可
在這里插入圖片描述

13、瓦片透視排序

參考:【unity小技巧】unity排序問題的探究

我想要站在它后面的選項,以給人一種深度的錯覺。

為此,我們將使用Y軸而不是Z軸排序。這樣,屏幕上的資產越高,它就會渲染到最后面

根據您的渲染管線,打開它的渲染首選項,將透明度排序模式設置為自定義軸并切換Z和Y值。
在這里插入圖片描述
如果是URP項目,URP項目的配置和前面其實類似,只不過配置文件信息被放到Renderer 2D Data文件中了而已
在這里插入圖片描述

在最右邊的Tilemap Renderer:將Mode設置為Individual
在這里插入圖片描述
把對應圖片的軸心放在底部
在這里插入圖片描述
為了使其更加準確,我們可以更改角色的軸心位置也在底部
在這里插入圖片描述
并修改角色的精靈排序點為軸心
在這里插入圖片描述
效果,可以看到,角色在柵欄上角色在后,角色在柵欄前角色在前
在這里插入圖片描述

三、 Isometric Z as Y 的等距瓦片調色板

素材來源:https://github.com/Unity-Technologies/2d-techdemos

1、什么是等距瓦片?

等距瓦片地圖為六邊形瓦片,但是它將瓦片分為了兩部分,一部分用于表示地面,一部分用于表示高度。
在這里插入圖片描述
像是上圖這種形式的瓦片,白色部分用于表示地面,而棕色部分則是代表高度,并且這些瓦片的高度可以進行堆疊,實現類似2.5d的效果。
在這里插入圖片描述
這是Unity給出的示例,實際上是用下面這種等距瓦片繪制的。
在這里插入圖片描述

2、 創建模式為 Isometric Z as Y 的瓦片調色板

在這里插入圖片描述

3、導入等距瓦片素材及配置

將資源拖入其中,拖拽資源進去,會發現資源和瓦片格子不適配。
在這里插入圖片描述
原因是在調色板中默認會將圖片的中心點和菱形的中心點重合,我們這里需要在 Sprite Editor 窗口中調整 Sprite 的中心點(軸心)的位置在菱形的中心即可
在這里插入圖片描述

調整好后,方塊的上表面即可與菱形平面對齊
在這里插入圖片描述

4、創建等距瓦片地圖網格

在Hierarchy視圖空白處右鍵鼠標,點擊菜單2D 對象 -> 瓦片地圖 -> 等距z作為Y
在這里插入圖片描述

5、繪制等距瓦片

5.1 直接繪制

直接把等距的瓦片進行繪制上去,會發現有點奇怪。
在這里插入圖片描述

5.2 自定義排序模式

因為 Unity 內部設置的原因,我們需要修改URP項目的配置文件,修改透明度排序模式為自定義渲染,調整透明度排序軸為(0, 1, -0.26)(這是一個固定的數值)。
在這里插入圖片描述
如果是非URP項目,則在項目設置里修改
在這里插入圖片描述

5.3 修改瓦片渲染器模式

改了之后還是不起作用,因為我們還把瓦片地圖的瓦片渲染器中修改模式為individual。渲染順序就會作用生效了。
在這里插入圖片描述

5.4 效果

可以看到渲染表現正常了
在這里插入圖片描述

6、繪制更改瓦片z軸位置

假如不改變瓦片原始精靈圖片的軸心點的話。

可以把下方的框拉起。取消勾選鎖定z軸位置,為每一張圖片手動設置高度。
在這里插入圖片描述
吸住瓦片丟到場景中去的時候,按+號或者-號調整其中的位置。藍色的框代表當前瓦片z的位置。
在這里插入圖片描述
這樣我們就可以完全不改變瓦片原始精靈圖片的軸心點,而是在繪制時動態的去手動設置高度,或者在瓦片調色板為每一張圖片手動設置高度。
在這里插入圖片描述
這里加入了一個模擬z軸的概念。可以在同一個磚塊,放不同z軸的瓦片。相當于在同一磚塊中,是存在z軸的。在同一個磚塊的不同z軸是可以同時渲染的。橡皮擦也會受z軸影響。比如擦z=0的平面的時候擦不到z=1的平面的瓦片。

三、Tilemap Extras官方拓展包

1、安裝Tilemap Extras擴展包

如果沒有安裝的,先去安裝Tilemap Extras擴展包,并導入相關示例,方便我們后面學習使用。
在這里插入圖片描述
拓展包為 Tilemap 添加新的瓦片類型,幫助我們更加方便的編輯 2D 場景
在這里插入圖片描述
記得使用都是拖入我們配置的瓦片進入調色板,就可以和前面一樣繪制了
在這里插入圖片描述

2、規則瓦片 Rule Tile(重要

在這里插入圖片描述
實戰參考:

  • 【實現100個unity游戲之20】制作一個2d開放世界游戲,TileMap+柏林噪聲生成隨機地圖
  • 【unity實戰】手戳一個類似星露谷物語的建筑系統
  • 【用unity實現100個游戲之13】復刻類泰瑞利亞生存建造游戲——包括建造系統和庫存系統

2.1 Default Sprite:默認圖片

不滿足任何四面八方規則時顯示的圖片。

2.2 Default GameObject:默認游戲對象

默認瓦片可以關聯游戲對象,但是一般不會關聯。

實戰參考:【unity實戰】2d血液飛濺噴射到墻上和TileMap上,留下血跡的效果
在這里插入圖片描述

2.3 Default Collider 默認碰撞器規則

在這里插入圖片描述

  • None:不生成碰撞器
  • Sprite:基于精靈輪廓生成碰撞器形狀
  • Gird:基于瓦片單元格生成碰撞器形狀

2.4 Tiling Rules:平鋪規則,可以自己添加刪除

在這里插入圖片描述

(1) 單一瓦片

瓦片規則的設置特別簡單,就是設置那個九宮格。

當整個九宮格都滿足自己設置的條件時,九宮格中央區域將顯示最右方選擇的圖片

在右邊的九宮格內左鍵單擊可以選中 ??,表示這個九宮格位置有圖片;右鍵單擊可以選中 ?,表示這個九宮格位置沒有圖片,雙擊可以切換選中形態

九宮格中間可以設置旋轉,這樣我們就不用自己設置旋轉之后的規則了。

例如下面的規則,當該瓦片上邊和左邊沒有瓦片,且下邊和右邊有瓦片時,顯示右側精靈圖。如果旋轉該瓦片之后也符合規則,則旋轉精靈圖并顯示。
在這里插入圖片描述

再比如下面的規則,如果四邊都沒有瓦片,就顯示該精靈圖。并且沒有設置旋轉。
在這里插入圖片描述
實例
在這里插入圖片描述
效果演示,繪制會按配置的九宮格自動選擇對應的瓦片填充區域
在這里插入圖片描述

(2) 隨機瓦片

適合做一些地圖加工,比如隨機添加花草樹木
在這里插入圖片描述
繪制效果
在這里插入圖片描述

(3) 動畫效果瓦片

這個和下面的Animated Tile,實現的效果其實是一樣的,比如下面做的形成2d水流瀑布的效果
在這里插入圖片描述
在這里插入圖片描述

2、動畫瓦片 Animated Tile

可以指定序列幀,產生可以播放序列幀動畫的瓦片,比如下面做的形成2d水流瀑布的效果。其實前面RuleTile的動畫效果瓦片實現一樣的效果。
在這里插入圖片描述

  • Number of Animated Sprites:動畫有多少張圖構成
  • Minimum Speed:最小播放速度
  • Maximum Speed:最大播放速度
  • Start Time:開始播放的時間
  • Start Frame:從哪一幀開始播放
  • Collider Type:碰撞器規則
    • None:不生成碰撞器
    • Sprite:基于精靈輪廓生成碰撞器形狀
    • Gird:基于瓦片單元格生成碰撞器形狀

效果演示
在這里插入圖片描述
運行,我們流動的瀑布效果就實現啦!
在這里插入圖片描述

3、規則覆蓋瓦片 Rule Override Tile

在規則瓦片的基礎上,改變已經設置的規則對應的圖片
在這里插入圖片描述

4、高級規則覆蓋瓦片 Advanced Rule Override Tile

在規則瓦片的基礎上,改變已經設置的規則與對應的圖片,可以通過選擇已有Rule Tile,啟動禁用進行批量替換,是上面的更高級用法
在這里插入圖片描述

四、筆刷類型

在這里插入圖片描述

1、GameObject Brush 游戲對象筆刷

可以在場景中選擇和擦除游戲對象,僅限于選定的游戲對象的子級。
在這里插入圖片描述

  • 勾選改變z軸的選項后按+或-也可以改變z軸。

遇到比較大的瓦片,如何繪制呢?比如房子,樹等等
在這里插入圖片描述
當然,把房子分成幾部分,分開繪制也是可以的,但是我建議是先把它弄成一個預制體
在這里插入圖片描述
并將瓷磚Pallete的筆刷更改為GameObject筆刷
在這里插入圖片描述
效果
在這里插入圖片描述

2、Group Brush 組合筆刷

可以設置參數,當點擊一個瓦片樣式時,會自動取出一個范圍內的瓦片。
在這里插入圖片描述

  • 吸取的范圍根據Gap和Limit確定。
    • Gap決定x、y、z遇到幾個空格之后就不繼續擴充吸取的范圍。
    • Limit決定最大的吸取范圍,從0開始。

比如下圖,Limit xyz填3會x和y最多吸4個格子,Gap空格數滿足x小于1y小于2就會被連接起來納入吸收的范圍。
在這里插入圖片描述
在這里插入圖片描述

3、Random Brush 隨機筆刷

可以指定瓦片進行關聯,隨機刷出對應瓦片。
在這里插入圖片描述

  • Tile Set Size瓦片大小,是設置刷瓦片時一次刷幾個格子。

設置隨機圖片數量和格子數量。選擇關聯的圖片。假如XY填22的話下面每個TileSet就有4個圖要關聯,一次性畫四個。
在這里插入圖片描述

4、Line Brush 線性筆刷

決定起點和終點畫一條線出來。
選擇線性筆刷后點擊畫筆可以在瓦片地圖中點擊確定起點和終點,會用選擇的瓦片連成線。
在這里插入圖片描述

在這里插入圖片描述

  • Line Start Active 是否以上一次繪制的起點作為新的起點。
  • Fill Gaps 自動填充,會把線畫的更粗。
    在這里插入圖片描述
  • 勾選改變z軸的選項后按+或-也可以改變z軸。

四、代碼管理 Tilemap

  • Tilemap 組件:用于管理瓦片地圖

  • TileBase 組件:瓦片資源對象基類

  • Grid 組件:用于坐標轉換

  • 使用它們需要引用命名空間:using UnityEngine.Tilemaps;

using UnityEngine;
using UnityEngine.Tilemaps;public class TileMap : MonoBehaviour
{// 瓦片地圖信息 可以通過它得到瓦片格子public Tilemap map;// 格子位置相關控制 可以通過它 進行坐標轉換public Grid grid;// 瓦片資源基類通過它可以得到瓦片資源public TileBase tileBase;void Start(){// 1.清空瓦片地圖// map.ClearAllTiles();// 2.獲取指定坐標格子TileBase tmp = map.GetTile(new Vector3Int(-2, 0, 0));// 3.設置刪除瓦片map.SetTile(new Vector3Int(0, -4, 0), tileBase); // 設置map.SetTile(new Vector3Int(-2, 0, 0), null);     // 刪除// 4.替換瓦片map.SwapTile(tmp, tileBase); // tmp 的所有瓦片將變成 tileBase// 5.世界坐標轉格子坐標// 傳入的參數是世界坐標Debug.Log(grid.WorldToCell(new Vector3(0, 1, 0)));}
}

運行效果
在這里插入圖片描述

源碼

https://gitcode.net/unity1/unity2d-tilemap
在這里插入圖片描述

專欄推薦

地址
【零基礎入門unity游戲開發——C#篇】
【零基礎入門unity游戲開發——unity通用篇】
【零基礎入門unity游戲開發——unity3D篇】
【零基礎入門unity游戲開發——unity2D篇】
【制作100個Unity游戲】
【推薦100個unity插件】
【實現100個unity特效】
【unity框架/工具集開發】

完結

好了,我是向宇,博客地址:https://xiangyu.blog.csdn.net,如果學習過程中遇到任何問題,也歡迎你評論私信找我。

贈人玫瑰,手有余香!如果文章內容對你有所幫助,請不要吝嗇你的點贊評論和關注,你的每一次支持都是我不斷創作的最大動力。當然如果你發現了文章中存在錯誤或者有更好的解決方法,也歡迎評論私信告訴我哦!
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/76556.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/76556.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/76556.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【易訂貨-注冊/登錄安全分析報告】

前言 由于網站注冊入口容易被機器執行自動化程序攻擊,存在如下風險: 暴力破解密碼,造成用戶信息泄露,不符合國家等級保護的要求。短信盜刷帶來的拒絕服務風險 ,造成用戶無法登陸、注冊,大量收到垃圾短信的…

GLPI 未授權SQL注入漏洞(CVE-2025-24799)

免責申明: 本文所描述的漏洞及其復現步驟僅供網絡安全研究與教育目的使用。任何人不得將本文提供的信息用于非法目的或未經授權的系統測試。作者不對任何由于使用本文信息而導致的直接或間接損害承擔責任。如涉及侵權,請及時與我們聯系,我們將盡快處理并刪除相關內容。 0x0…

基于Deepface的情緒識別c++

基于Deepface的情緒識別c 文章目錄 基于Deepface的情緒識別c簡介下載模型并轉為onnx(facial_expression_model_weights.h5)測試取出照片的人臉部分并處理成模型輸入格式用模型推理一下看看結果 用onnxruntime的c庫推理 簡介 DeepFace是一個基于深度學習…

Java的數據庫編程——JDBC基礎

JDBC編程 一、概述1.1 概念介紹1.2 驅動包下載1.3 導入驅動包 二、通過Java程序操作數據庫2.1 通過 JDBC 進行 插入數據 操作2.1.1 創建“數據源(DataSource)——描述要操作的數據庫、數據是在哪”2.1.2 與服務器建立連接2.1.3 構造sql語句,并且對字符串類型的sql進…

DeepSeek-R1 面試題匯總

Deepseek-r1 面試寶典 原文地址:https://articles.zsxq.com/id_91kirfu15qxw.html DeepSeek-R1 面試題匯總 DeepSeek-R1 面試題匯總 GRPO(Group Relative Policy Optimization)常見面試題匯總篇 DeepSeek-R1 DeepSeek-R1-Zero 常見面試題匯總…

SSL/TLS

http ssl傳輸層 -> https 安全套接層 SSL/TLS 1、核心角色與文件2、證書生成流程2.1、生成CA根證書2.2、生成服務端證書2.3 生成客戶端證書(雙向認證) 3、SSL/TLS 認證模式3.1、單向認證(默認 HTTPS)3.2、雙向認證&#xff0…

HTML 音頻(Audio)學習筆記

一、HTML 音頻概述 在 HTML 中&#xff0c;音頻可以通過多種方式播放&#xff0c;但要確保音頻在不同瀏覽器和設備上都能正常播放&#xff0c;需要掌握一些技巧。HTML5 引入了 <audio> 元素&#xff0c;為音頻播放提供了一種標準方法&#xff0c;但在 HTML4 中&#xff…

php開發rest api,哪個框架最好

在 2025 年&#xff0c;選擇適合開發 REST API 的 PHP 框架需要根據項目需求、性能要求和團隊技術棧進行權衡。以下是一些推薦的 PHP 框架及其適用場景&#xff1a; 1. Laravel 特點&#xff1a;功能豐富&#xff0c;生態系統強大&#xff0c;內置 API 資源&#xff0c;支持 …

前端入門之CSS

CSS: HTML負責定義頁面結構;JS負責處理頁面邏輯和點擊事件;CSS負責用于描述 HTML 元素的顯示方式,通過 CSS 可以控制顏色、字體、布局等。 核心語法: 選擇器: 類選擇器主要用于選中需要添加樣式的 HTML 元素。主要分為:類選擇器(.class-name { ... })、標簽選擇器(…

MCP協議的Streamable HTTP:革新數據傳輸的未來

引言 在數字化時代&#xff0c;數據傳輸的效率和穩定性是推動技術進步的關鍵。MCP&#xff08;Model Context Protocol&#xff09;作為AI生態系統中的重要一環&#xff0c;通過引入Streamable HTTP傳輸機制&#xff0c;為數據交互帶來了革命性的變化。本文將深入解讀MCP協議的…

MySQL - 索引原理與優化:深入解析B+Tree與高效查詢策略

文章目錄 引言一、BTree索引核心原理1.1 索引數據結構演化1.2 BTree的存儲結構通過主鍵查詢&#xff08;主鍵索引&#xff09;商品數據的過程通過非主鍵&#xff08;輔助索引&#xff09;查詢商品數據的過程 MySQL InnoDB 的索引原理 二、執行計劃深度解析三、索引失效的六大陷…

《K230 從熟悉到...》識別機器碼(AprilTag)

《K230 從熟悉到...》識別機器碼&#xff08;aprirltag&#xff09; tag id 《廬山派 K230 從熟悉到...》 識別機器碼&#xff08;AprilTag&#xff09; AprilTag是一種基于二維碼的視覺標記系統&#xff0c;最早是由麻省理工學院&#xff08;MIT&#xff09;在2008年開發的。A…

Linux驅動復習

應用層調用內核層函數稱為系統調用 1.硬件設備管理 1&#xff0c;字符設備驅動&#xff08;一個一個字節&#xff09;——芯片內部外設 &#xff1a;WDT,Timer&#xff0c;adc,iic&#xff0c;SPI,R,UART,LCD,CAMERA,USB,Keyboard&#xff0c;Mouse 2&#xff0c;塊設備驅動&a…

【FAQ】HarmonyOS SDK 閉源開放能力 —Account Kit(3)

1.問題描述&#xff1a; PC場景&#xff0c;青少年模式系統API不支持嗎&#xff1f; 解決方案&#xff1a; PC場景&#xff0c;青少年模式系統API不支持&#xff0c;另外文檔上的幾個API也不支持。 2.問題描述&#xff1a; 華為一鍵登錄 Beta7本地運行到手機可以拿到匿名手…

【gdutthesis模板】論文標題太長導致換頁問題解決

標題太長導致換頁問題解決方案如下&#xff1a; 調小下方數值即可

SAP學習筆記 - 豆知識18 - (TODO)Msg 番號 ME154 構成品目無法決定

1&#xff0c;現象 構成品目の決定は不可能です Msg 番號 ME154 構成品目無法決定 2&#xff0c;到Deepseek里找一下解決方案 SAP ME21N中錯誤「組件物料的確定不可行&#xff08;ME154&#xff09;」的解決步驟 此錯誤在創建分包采購訂單時出現&#xff0c;通常由于系統無…

10.多線程

預備知識 預備知識一 預備知識二 預備知識三 如何理解進程和線程的關系&#xff0c;舉一個生活中的例子 家庭&#xff1a;進程家庭成員&#xff1a;線程 每個家庭成員都會為這個家庭做貢獻&#xff0c;只不過大家都在做不同的事情&#xff08;比如&#xff1a;我們在上學&…

Python入門(8):文件

1. 文件基本概念 文件&#xff1a;存儲在計算機上的數據集合&#xff0c;Python 通過文件對象來操作文件。 文件類型&#xff1a; 文本文件&#xff1a;由字符組成&#xff0c;如 .txt, .py 二進制文件&#xff1a;由字節組成&#xff0c;如 .jpg, .mp3 2. 文件打開與關閉…

市場交易策略優化與波動管理

市場交易策略優化與波動管理 在市場交易中&#xff0c;策略的優化和波動的管理至關重要。市場價格的變化受多種因素影響&#xff0c;交易者需要根據市場環境動態調整策略&#xff0c;以提高交易的穩定性&#xff0c;并有效規避市場風險。 一、市場交易策略的優化方法 趨勢交易策…

HTTP數據傳輸的幾個關鍵字Header

本文著重針對http在傳輸數據時的幾種封裝方式進行描述。 1. Content-Type(描述body內容類型以及字符編碼) HTTP的Content-Type用于定義數據傳輸的媒體類型&#xff08;MIME類型&#xff09;&#xff0c;主要分為以下幾類&#xff1a; (一)、?基礎文本類型? text/plain? …