unity的Tilemap学习笔记

  1,如果要实现当tilemap里面的格子与其他的对象发生碰撞后,消除碰撞的那个格子,使用如下代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
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状态不同。

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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的资源创建选项了。

1
tileData.sprite = look;

  这句很关键,是可以让你设置你这个自定义的tile在地图上的显示图片的。

posted @   bigasa  阅读(5740)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
点击右上角即可分享
微信分享提示