unity的Tilemap學習筆記

  1,如果要實現當tilemap裏面的格子與其他的對象發生碰撞後,消除碰撞的那個格子,使用如下代碼。

void OnCollisionEnter2D(Collision2D collision)
    {
        Vector3 hitPosition = Vector3.zero;
        if (tilemap != null && tilemapGameObject == collision.gameObject)
        {
            foreach (ContactPoint2D hit in collision.contacts)
            {
                hitPosition.x = hit.point.x - 0.01f * hit.normal.x;
                hitPosition.y = hit.point.y - 0.01f * hit.normal.y;
                tilemap.SetTile(tilemap.WorldToCell(hitPosition), null);
            }
        }
    }

  其中,tilemap就是發生碰撞的tilemap對象,代碼來自,unity的github https://github.com/Unity-Technologies/2d-techdemos/tree/2018.2

2,如何給unity的tileMap裏的cell添加特定的屬性。

做法就是寫一個類,繼承至TileBase,然後這個類你可以寫任何你可以自定義的函數。

但值得注意的是,這裏創建的是一個模板,我們依然無法讓2個一樣模板的tile狀態不同。

代碼如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Tilemaps;

[CreateAssetMenu]
public class MarkTile : TileBase
{
    public string markType = "";
    public Sprite look;

    public override void GetTileData(Vector3Int position, ITilemap tilemap, ref TileData tileData)
    {
        tileData.sprite = look;
        base.GetTileData(position, tilemap, ref tileData);
    }
}

  加完之後,就可以在遊戲界面的Assets--create 裏面看到這個叫做markTile的資源創建選項了。

tileData.sprite = look;

  這句很關鍵,是可以讓你設置你這個自定義的tile在地圖上的顯示圖片的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章