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在地图上的显示图片的。

相关文章:

  • 2021-11-17
  • 2021-11-17
  • 2021-06-03
  • 2022-01-04
  • 2022-01-13
  • 2021-08-04
  • 2022-01-03
  • 2021-09-18
猜你喜欢
  • 2022-12-23
  • 2021-06-15
  • 2021-10-27
  • 2021-06-20
  • 2022-12-23
  • 2022-01-13
相关资源
相似解决方案