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