You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity2D运行时Tilemap绘制Tile:Scene视图可见,Game视图无显示

解决Unity运行时Tilemap绘制Tile在Game视图不显示的问题

核心问题分析

运行时通过代码绘制的Tile仅在Scene视图可见,Game视图不显示,但编辑模式手动放置的Tile正常,且已排除排序层问题,大概率是鼠标坐标转换时的Z轴偏差导致Tile被放置在Tilemap的渲染平面外。


解决方案

1. 修正鼠标世界坐标的Z轴(最可能解决问题)

ScreenToWorldPoint会使用屏幕坐标的Z值(默认0)转换世界坐标,而2D正交相机通常在Z轴负方向,导致转换后的世界坐标Z与Tilemap所在平面(通常Z=0)不一致,WorldToCell会计算到错误的Cell层,Game视图无法渲染该层的Tile。

修改代码中的坐标转换部分:

if (Input.GetMouseButton(0))
{
    Vector3 mouseWorldPos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
    // 强制将Z轴设置为Tilemap所在平面的Z值(根据你的Tilemap位置调整,通常为0)
    mouseWorldPos.z = tilemap.transform.position.z; 
    Vector3Int cellPos = tilemap.WorldToCell(mouseWorldPos);
    tilemap.SetTile(cellPos, tile);
    tilemap.RefreshTile(cellPos);
}

2. 确保Tile渲染数据被正确刷新

如果单块Tile刷新无效,尝试替换RefreshTile为全局刷新(仅在必要时使用,避免性能问题):

tilemap.SetTile(cellPos, tile);
// 替换单个刷新为全局刷新
tilemap.RefreshAll();

3. 检查Tilemap Renderer的设置

在Inspector中选中Tilemap的Tilemap Renderer组件:

  • 确保Use Per Tile Data选项处于勾选状态,保证运行时设置的Tile能读取自身渲染数据
  • 确认Tilemap组件的Cell Size与Tile的尺寸匹配,避免Tile被压缩或偏移

4. 显式设置Tile的渲染标志

部分情况下,Tile的默认标志会导致渲染异常,可添加代码强制开启渲染:

tilemap.SetTile(cellPos, tile);
// 清除所有可能限制渲染的Tile标志
tilemap.SetTileFlags(cellPos, TileFlags.None);
tilemap.RefreshTile(cellPos);

内容的提问来源于stack exchange,提问作者Bry793

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 06:55:06