Unity 2D中如何实现Tilemap特定瓦片的缩放?
解决Unity 2D Tilemap单个瓦片缩放问题
Unity里的Tile是共享资源,直接修改它的transform或者操作Sprite的缩放都不可行——前者会影响所有使用该Tile的瓦片,后者本身就不生效(Sprite没有localScale属性,那是GameObject的专属属性)。
正确的做法是利用Tilemap.SetTransformMatrix方法,单独为目标单元格设置变换矩阵,这样只会改变该位置的瓦片显示效果,不会影响其他实例。
修改后的代码示例
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Tilemaps; public class SnowTaking : MonoBehaviour { public Tilemap tilemap; public Tile whiteTile; public Tile redTile; public Tile greenTile; public Tile blueTile; // 记录目标瓦片的原始变换矩阵,用于恢复 private Matrix4x4? originalTileMatrix; private Vector3Int targetTilePos; void OnTriggerStay2D(Collider2D other) { if (other.gameObject.tag == "Snow") { Vector3Int tilePosition = tilemap.WorldToCell(transform.position); Tile currentTile = tilemap.GetTile<Tile>(tilePosition); if (Input.GetKey(KeyCode.LeftShift)) { // 仅当目标瓦片是我们需要的类型时执行缩放 if (currentTile == whiteTile || currentTile == redTile || currentTile == greenTile || currentTile == blueTile) { // 第一次按下时记录原始矩阵 if (!originalTileMatrix.HasValue) { originalTileMatrix = tilemap.GetTransformMatrix(tilePosition); targetTilePos = tilePosition; } // 设置缩放矩阵(这里缩放到0.5倍,可调整) Matrix4x4 scaleMatrix = Matrix4x4.Scale(new Vector3(0.5f, 0.5f, 1f)); // 结合原始矩阵的位移,避免偏移 tilemap.SetTransformMatrix(tilePosition, originalTileMatrix.Value * scaleMatrix); } } else { // 松开Shift时恢复原始矩阵 if (originalTileMatrix.HasValue) { tilemap.SetTransformMatrix(targetTilePos, originalTileMatrix.Value); originalTileMatrix = null; } } } } // 离开触发器时也要恢复原始矩阵,避免残留 void OnTriggerExit2D(Collider2D other) { if (other.gameObject.tag == "Snow" && originalTileMatrix.HasValue) { tilemap.SetTransformMatrix(targetTilePos, originalTileMatrix.Value); originalTileMatrix = null; } } }
关键说明
SetTransformMatrix是针对单个单元格的,所以只会修改该位置的瓦片显示,不会影响其他使用同一Tile的单元格。- 必须记录原始矩阵,否则无法恢复到初始状态。
- 如果需要动态渐进式缩放(比如按住Shift时逐渐缩小),可以把缩放逻辑放到
Update里,在OnTriggerStay里标记需要缩放的瓦片位置,然后在Update中根据按键状态逐步调整缩放比例。
额外注意
确保Tilemap的Tile Anchor设置合理(比如中心锚点),否则缩放时瓦片可能会出现偏移。可以在Tilemap组件的Inspector里调整Tile Anchor参数。
内容的提问来源于stack exchange,提问作者SlimeChannel
相关产品推荐
相关产品推荐

