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在地圖上的顯示圖片的。