我目前正在尝试找到一种在Unity中绘制平铺地图的有效方法。我的系统工作方式是我通过将一堆由瓷砖组成的房间粘在一起来建立一个水平。我按照my solution的本教程。
现在,我为每个房间生成一个新网格,然后将我想要的纹理放在材质的正确位置上。但是,我目前使用一个所有房间都使用的材料预制件。这意味着因为所有房间都覆盖了相同的材料,所以这些瓷砖不再适合其他房间。
这就是我的意思。这是我只有一个房间,你可以看到,因为这是修改材料的唯一房间,瓷砖都是正确的:
但是当我制作几个房间时,它们都会修改相同的纹理。这意味着修改纹理的最后一个房间正确放置了其瓷砖,而其余房间不正确:
这是该材料适用的实际房间:
我的问题是,有没有办法保存我为没有它们的房间建造的网格取决于相同的材料?当然,只为每个房间分别制作100种材料,但这只是无稽之谈。我想保存我为一个房间建造的网格"就像#34;或者使我创建的所有不同网格不依赖于单一材质。
(粗略地)我现在用来为房间制作正确材料的代码:
public void BuildTextures(Room room)
{
Sprite ground = Resources.Load<Sprite>("Background Sprites/Tile 2");
int texWidth = (room.Width + 1) * (int)ground.textureRect.width;
int texHeight = (room.Height + 1) * (int)ground.textureRect.height;
int tileWidth = (int)ground.textureRect.width;
int tileHeight = (int)ground.textureRect.height;
Texture2D texture = new Texture2D(texWidth, texHeight);
texture.SetPixels(x * (int)ground.textureRect.width, y * (int)ground.textureRect.height, (int)ground .textureRect.width, (int)ground .textureRect.height, ground.GetPixels()); //ground.GetPixels technically doesn't exist for a sprite, but I created a function which yields the same result. This is not important
texture.filterMode = FilterMode.Point;
texture.wrapMode = TextureWrapMode.Clamp;
texture.Apply();
MeshRenderer meshRenderer = GetComponent<MeshRenderer>();
meshRenderer.sharedMaterials[0].mainTexture = texture;
}