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

Unity 2021.3 2D中无法调用Tilemap类方法的问题求助

Unity 2021.3自定义Tilemap类引发CS1061错误的解决办法

问题场景

在Unity 2021.3开发2D游戏时,自定义了Tilemap类,调用WorldToCell和SetTile方法时触发CS1061错误,提示'Tilemap'没有这些方法的定义。已尝试重装Unity、更换版本、检查拼写,均未解决,代码与教程一致。

问题代码

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Tilemaps;

public class Tilemap : MonoBehaviour
{
[SerializeField]
private Tilemap floorMap;

private TileBase floorTile;

public void PaintFloorTiles(IEnumerable<Vector2Int> floorPositions)
{
    PaintTiles(floorPositions, floorMap, floorTile);
}

private void PaintTiles(IEnumerable<Vector2Int> floorPositions,                     Tilemap floorMap, TileBase floorTile)
{
    foreach (var position in floorPositions)
    {
        PaintSingleTile(floorMap, floorTile, position);
    }
}

private void Start()
{
    Vector2 position = new Vector2Int(1, 2);
    Debug.Log(position);
    Debug.Log((Vector3)position);
}

private void PaintSingleTile(Tilemap tileMap, TileBase tile, Vector2Int position)
{
    var tilePosition = tileMap.WorldToCell((Vector3Int)position);
    tileMap.SetTile(tilePosition, tile);
}
}

错误信息(翻译后)

Assets\Scripts\Environment\LevelCreation\Tilemap.cs(29,37): error CS1061: 'Tilemap' 不包含 'WorldToCell' 的定义,也找不到接受第一个类型为 'Tilemap' 参数的可访问扩展方法 'WorldToCell'(是否缺少 using 指令或程序集引用?)

问题原因

自定义类名Tilemap和Unity内置的UnityEngine.Tilemaps.Tilemap类完全重名,导致编译器将所有Tilemap类型引用都指向你自己写的自定义类,而自定义类中并没有WorldToCell和SetTile这两个方法,因此触发错误。

解决方法

方法1:重命名自定义类(推荐)

直接把自定义的Tilemap类改成其他不冲突的名称,比如LevelTilemap,这样编译器就能正确识别Unity内置的Tilemap类:

// 修改类名
public class LevelTilemap : MonoBehaviour
{
[SerializeField]
private Tilemap floorMap; // 现在这里的Tilemap会自动指向Unity内置类

// 其余代码保持不变...
}

方法2:使用完整命名空间限定Unity内置Tilemap

如果不想修改自定义类名,就在所有引用Unity内置Tilemap的地方,加上完整的命名空间UnityEngine.Tilemaps.Tilemap,明确告诉编译器要调用的是Unity的内置类:

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Tilemaps;

public class Tilemap : MonoBehaviour
{
[SerializeField]
// 加上完整命名空间
private UnityEngine.Tilemaps.Tilemap floorMap;

private TileBase floorTile;

public void PaintFloorTiles(IEnumerable<Vector2Int> floorPositions)
{
    PaintTiles(floorPositions, floorMap, floorTile);
}

// 参数类型加上完整命名空间
private void PaintTiles(IEnumerable<Vector2Int> floorPositions, UnityEngine.Tilemaps.Tilemap floorMap, TileBase floorTile)
{
    foreach (var position in floorPositions)
    {
        PaintSingleTile(floorMap, floorTile, position);
    }
}

private void Start()
{
    Vector2 position = new Vector2Int(1, 2);
    Debug.Log(position);
    Debug.Log((Vector3)position);
}

// 参数类型加上完整命名空间
private void PaintSingleTile(UnityEngine.Tilemaps.Tilemap tileMap, TileBase tile, Vector2Int position)
{
    var tilePosition = tileMap.WorldToCell((Vector3Int)position);
    tileMap.SetTile(tilePosition, tile);
}
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 04:45:32