这根本不像是一个“新手”问题。很明显,您只想以编程方式而不是通过编辑器来放置图块。
我遇到了同样的问题,因为我想根据地形生成器填充我的图块。令我惊讶的是,在这方面的文档如此缺乏,而且那里的每个教程似乎都假设您正在手工创作您的磁贴布局。
这对我有用:
第一个 sn-p 没有回答你的问题,但这是我的测试代码,用于以棋盘格图案放置交替的瓷砖(我只有两个瓷砖,“水”和“土地”)
for (int x = 0; x < 10; x++)
{
for (int y = 0; y < 10; y++)
{
Vector3Int p = new Vector3Int(x,y,0);
bool odd = (x + y) % 2 == 1;
Tile tile = odd ? water : land;
tilemap.SetTile(p, tile);
}
}
为了获得Tile 的实例,我发现有两种不同的方法起作用:
方法 1:使用编辑器将 Tiles 连接到属性
在MonoBehaviour 类中,您正在编写代码以编程方式生成平铺布局,公开一些公共属性:
public Tile water;
public Tile land;
然后在 Unity Inspector 中,会出现这些字段。如果您按下这些属性旁边的小靶心,它将打开一个“选择瓷砖”窗口,您应该能够在其中看到您之前添加到瓷砖调色板中的任何瓷砖
方法 2:以编程方式从 Resources 文件夹中的 Texture 创建 Tile
如果您有很多不同的图块类型,如上所述手动连接属性可能会变得乏味和烦人。
此外,如果您想在代码中利用一些智能的磁贴命名方案,那么使用第二种方法可能更有意义。 (例如,也许您有四种水和四种土地,分别称为 water_01、water_02、water_03、water_04、land_01 等,那么您可以轻松编写一些代码来加载所有纹理 "water_"+n for n 从 1 到numVariants)。
以下是我从保存为Assets/Resources/Textures/water.png 的 128x128 纹理加载和创建 Tile 的方法:
Tile water = new Tile();
Texture2D texture = Resources.Load<Texture2D>("Textures/water") as Texture2D;
water.sprite = Sprite.Create(texture,
new Rect(0, 0, 128, 128), // section of texture to use
new Vector2(0.5f, 0.5f), // pivot in centre
128, // pixels per unity tile grid unit
1,
SpriteMeshType.Tight,
Vector4.zero
);