為每種類型的MapChip實現命中檢測

更新頁 :
頁面創建日期 :

驗證環境

窗戶
  • 視窗 11
統一編輯器
  • 2021.3.3f1
輸入系統包
  • 1.3.0

此提示的先決條件

作為此提示描述的前提,已預先進行了以下設置。

此提示的先決條件是什麼?

關於借用地圖材質

我們處理從以下網站借來的。

起先

這一次,MapChips被放置在一個TileMap中,並根據放置的MapTip的類型決定是否執行命中確定。

由於此提示與另一個提示「使用磁貼地圖實現命中檢測」大致相同, 有關詳細說明,請參閱那裡。 在這裡,僅對相同的內容解釋了該過程,並且僅添加了差異。

行走字元的實現

首先,準備一個精靈圖像,玩家將控制該圖像來執行命中檢測操作,並將其添加到專案中。 這一次,地圖提示的大小為32圖元,因此我將使圖像大小相同。

這次我將省略步行動畫,因為如果實現該過程會很長。 如果要實現它,請參閱以下提示。

選擇添加到專案中的圖像。 由於我們要將單位與地圖晶片匹配,因此將「每單位像素數」設置為“32”。

配置完成後,按下下面的“應用”按鈕。

設置圖像后,將圖像拖放到視圖中並添加物件。

設置角色的移動過程。 新增文稿並將保留為 Player .

文稿如下所示: 這是一個簡單的移動過程,用鍵盤移動精靈。

using UnityEngine;
using UnityEngine.InputSystem;

public class Player : MonoBehaviour
{
  // 一定時間ごとに呼ばれます
  void FixedUpdate()
  {
    // キーボードの情報を取得
    var keyboard = Keyboard.current;

    // スプライトの移動処理
    if (keyboard.leftArrowKey.isPressed)
    {
      transform.Translate(-0.1f, 0, 0, Space.World);
    }
    if (keyboard.rightArrowKey.isPressed)
    {
      transform.Translate(0.1f, 0, 0, Space.World);
    }
    if (keyboard.upArrowKey.isPressed)
    {
      transform.Translate(0, 0.1f, 0, Space.World);
    }
    if (keyboard.downArrowKey.isPressed)
    {
      transform.Translate(0, -0.1f, 0, Space.World);
    }
  }
}

您建立的文稿附加到字元物件。

運行遊戲並檢查角色是否隨鍵盤移動。

準備地圖提示

準備地圖提示圖像並將其添加到工程中。 隨著地圖晶元數量的增加,設置變得麻煩,所以這次我們只準備了兩個方塊,一個可以走,一個不能走。

選擇您添加到專案中的圖像並設定 MapChip 的設定。 有關詳細資訊,請參閱以下提示:

配置完成後,按兩下「應用」按鈕,然後按下「精靈編輯器」按鈕。

除以 32 圖元。

選擇「平鋪」調色板選項卡以創建調色板。 如果沒有選項卡,您可以使用“視窗> 2D -> Tile Palette”從功能表中顯示它們。 調色板名稱可以是任何東西,但這裡是“MapChipPalette”。

由於我們將它保存在一個資料夾中,因此在場景資料夾中創建一個新的“MapChipPalette”資料夾並指定它。

MapChipPalette 資料夾已添加到專案中。

接下來,您將地圖提示添加到選項板。 將拆分的地圖提示圖像拖放到調色板上。

地圖提示已添加到調色板中。

創建地圖

將命中檢測設置放在一邊,先創建地圖。 您可以稍後設置命中檢測。 首先,將磁貼地圖添加到層次結構。

添加后,選擇“磁貼圖”。 視圖將顯示一個網格。

首先,設置一個不會在視圖中成為牆的地圖晶片。

暫時,我把它放在了所有地方。

接下來,放置將用作牆壁的石製地圖尖。

這次沒有問題,但是如果您的角色要在地圖上後面,請將圖層順序設置為大於圖塊地圖的數位。

當然,即使此時移動遊戲,也會從牆上溜走。

地圖晶元命中檢測設置

從這裡開始,我們將設置是否為每種類型的地圖晶元輸入命中判斷。 首先,打開您在創建調色板時創建的“MapChipPalette”資料夾。

裡面的調色板中設置了一個地圖提示,因此首先選擇一個可以行走的地圖提示。

在檢查器中,將「碰撞體類型」值設置為「無」。 稍後,您將向 Tilemap 添加碰撞檢測設置,但將其設置為“無”將防止此地圖晶片發生衝突。

另一個石材地圖提示設置為「網格」。。 由於這次不是透明地圖提示,所以「精靈」沒有問題,但如果將其設置為「精靈」,則不會通過點擊圖像的透明部分來判斷。

這就是MapTip的全部內容。 這很容易,因為這次只有兩個,但是如果你有大量的地圖晶片,你需要設置那麼多。

碰撞檢測設置

從這裡開始,它與“使用瓦片地圖實現命中檢測”的內容幾乎相同。

首先,為字元衝突檢測進行必要的設置。 添加「物理 2D -> 圓形對撞機 2D」作為元件。 這次,精靈是圓形的,所以我把它做了一個圓形,但請根據形狀選擇盒子或膠囊。

我們還將添加「物理 2D -> 剛體 2D」。

將重力刻度設置為0以防止重力下降。 此外,檢查 Z 中的「修復旋轉」以防止角色旋轉。

對於瓦片地圖,添加瓦片地圖 -> 瓦片地圖碰撞體 2D 元件。

您可以看到檢視中的石材地圖提示周圍添加了一條綠線。 這意味著命中檢測僅針對寶石設置。 您可以看到上面調色板中地圖提示的碰撞體類型設置已反映出來。

嘗試運行遊戲並走向牆壁。 我認為你可以確保角色正確地停在牆前。 您可以看到,無需編寫任何與命中檢測相關的程式即可輕鬆實現它。

結合地圖晶元命中檢測

如下面的提示所述,當您實際移動它時,牆壁撞擊檢測的行為有點奇怪。 下面的提示中介紹了原因和解決方法。

但是,通過組合地圖晶元的命中檢測部分,奇怪的行為將得到糾正,同時將減少處理負載,因此讓我們至少這樣做。

首先,在 Tilemap Collider 2D 中選中“在複合中使用”。

在“添加元件”下,選擇“物理場 2D-> 複合碰撞體 2D”。

還將添加「剛體2D」,因此將「車身類型」設置為「靜態」。。

然後,我想你可以確認石頭的命中判斷不是針對每個地圖晶元的,而是組合在一起的。

現在運行遊戲並確保它正常工作。