gpt4 book ai didi

unity3d - 如何在tilemap中动态设置tile?

转载 作者:行者123 更新时间:2023-12-01 08:45:35 30 4
gpt4 key购买 nike

我正在使用 Isometric Tilemap 来制作我的游戏 map 。
我正在使用统一 2018 3.5f 版本。

但是每个指南都说只使用调色板,但是我的游戏tilemap有点
动态的。所以我可以在运行时(动态地)在 tilemap 中添加、更改和删除图 block 。
而且我必须从 map xml 文件中读取平铺数据。所以我可以通过编程方式添加瓷砖。
在引用中有一个'setTile()'方法。但是没有关于使用它的适当示例。
我是否应该先创建平铺游戏对象并将其拖到预制文件夹以使其成为平铺预制件。我必须像这样使用?

setTile(position , TilePrefab.Instantiate());

我可以得到一些关于如何使用 setTile 以编程方式添加图 block 的示例。
我是一个团结的新手,所以如果你介意,请提供更多关于 tilemap 的提示或建议(随便什么)。

最佳答案

这似乎根本不是一个“新手”问题。很明显,您只想以编程方式而不是通过编辑器来放置图 block 。

我遇到了同样的问题,因为我想根据地形生成器填充我的图 block 。令我惊讶的是,文档在这方面如此缺乏,而且那里的每个教程似乎都假设您正在手工创作您的磁贴布局。

这对我有用:

第一个片段没有回答您的问题,但这是我的测试代码,用于以棋盘图案放置交替的瓷砖(我只有两个瓷砖,“水”和“土地”)

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)属性:
public Tile water;
public Tile land;

然后在 Unity Inspector 中,会出现这些字段。如果您按下这些属性旁边的小靶心,它将打开一个“选择瓷砖”窗口,您应该能够在其中看到您之前添加到瓷砖调色板中的任何瓷砖

方法 2:以编程方式从 Resources 文件夹中的纹理创建 Tile

如果您有很多不同的图 block 类型,如上所述手动连接属性可能会变得乏味和烦人。

此外,如果您有一些想要在代码中利用的磁贴的智能命名方案,那么使用第二种方法可能更有意义。 (例如,也许您有四种水和四种土地,分别称为 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
);

关于unity3d - 如何在tilemap中动态设置tile?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54888987/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com