• Unity-Tilemap 瓦片地图


    1. 平铺调色板
    1. 用来在瓦片地图上进行绘制的调色板,里面装有预制好的瓦片。
    2. 使用吸管框选范围来仿制图章。
    2. 瓦片
    1. 由图片精灵或2D纹理构建的瓦片,可以直接将图像拖入进行预制。
    2. 为了保证每个精灵填满瓦片,需要将每单位像素数和单位精灵大小保持一致
    3. 若瓦片碰撞器类型为精灵,那么单位碰撞会与图像边缘严丝合缝,若为网格,碰撞器将为单元格大小,若为无,该单位不会参与碰撞运算
    3. 地形绘制
    1. 将在调色板中的瓦片选中,便可直接在场景的地图上绘制。
    2. Grid中单元格重排,以及 Tilemap中的方向 两项,可以决定地形排列是三维空间的哪个平面。默认是xyz和xy平面
    3. 同Grid多个瓦片地图,可以在调色板中直接切换快捷上色
    4. 添加Tilemap Collider 2D;来让地形具有单位碰撞的能力。
      如果勾选了由效果复合使用,碰撞会变成固定大小的一个整体,即便地形被破坏了单位碰撞也不会改变。

    扩展:2d-extras

    下载链接:https://github.com/Unity-Technologies/2d-extras
    直接装入Assets

    1. RuleTile

    让瓦片以一定的规则进行上色
    设置默认瓦片以及瓦片规则:

    符号描述
    X这个位置没有物体
    <- ->这个方向有物体
    output选项:
    符号描述
    单一单一精灵瓦片
    动画随机选中一个精灵作为瓦片
    动画设置动画瓦片
    2. PrefabBrush
    1. 生成一个预制体笔刷,方便地将预制体放入Tilemap
      值得注意的是,预制体并不会真的装入Tilemap。而是作为它的子集
    2. 预制体笔刷的选用在下方调色板下方的笔刷中选择
    3. 其他笔刷
    笔刷描述特殊
    Coordinate Brush可以显示坐标的笔刷-
    Line直线笔刷FillGaps: 填充空隙
    Tint Bush给2d-extras瓦片上色-
    Tint Bush(smooth)给瓦片上一个发光点需要给地形添加 TintedTilemap 材质
    4. 相关函数
    // 清空全部瓦片
    // tm.ClearAllTiles();
    
    // 根据坐标获取瓦片
    TileBase tile1 = tm.GetTile(new Vector3Int(-1, -4, 0));
    
    // 根据坐标设置瓦片
    // tm.SetTile(new Vector3Int(-1, -3, 0), tile1);
    
    // 根据坐标列表设置瓦片列表
    // tm.SetTiles(new Vector3Int []{ new Vector3Int(-1, -3, 0) }, new TileBase []{ tile1 });
    
    // 根据坐标删除瓦片
    // tm.SetTile(new Vector3Int(-1, -4, 0), null);
    
    // 将地图内一种瓦片替换成另一种瓦片
    // tm.SwapTile(tile1, tb);
    
    // 克隆一块地形到另一个地方
    // TileBase[] tileArray = tm.GetTilesBlock(new BoundsInt(new Vector3Int(-1, -4, 0), new Vector3Int(2, 3, 1)));
    // tm.SetTilesBlock(new BoundsInt(new Vector3Int(1, 4, 0), new Vector3Int(2, 3, 1)), tileArray);
    
    
    void Update()
        {
        if (Input.GetMouseButton(0))
        {
            // 转换成游戏内的世界坐标
            Vector3 worldPos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            // 转换成格子的坐标
            Vector3Int cellPos =  grid.WorldToCell(worldPos);
    
            // Debug.Log(worldPos);
            // Debug.Log(cellPos);
            ExplosionLogic(cellPos);
        }
    }
    
    void ExplosionLogic(Vector3Int cellPos)
    {
        tm.SetTile(cellPos, null);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
  • 相关阅读:
    vue实现刷新页面随机切换背景图【适用于登陆界面】
    【JavaEE初阶】 线程安全的集合类
    【MySQL】深入了解索引的底层逻辑结构
    linux之jq命令
    等保主机测评防骗指南(资产调研)
    ThreadLocal:线程中的全局变量
    Stable Diffusion中的embedding
    2025汤家凤考研数学,基础视频课程+百度网盘+PDF真题讲解
    【注入电子邮件】SMTP命令漏洞查找、注入、防止
    抖音短视频实操:为什么我的作品一直是几百个播放?黄金3秒解决方案
  • 原文地址:https://blog.csdn.net/qq_50682713/article/details/117024044