就上下文而言,我没有太多的 Unity 和 C# 经验,所以如果答案真的很简单,请不要责备我。我正在尝试使地牢的边缘瓷砖自动在其各自的边缘上创建墙壁(例如,最右边的瓷砖列在其右侧有墙壁)。我制作了一个图 block 预制件,它根据 4 个 bool 值更改其 Sprite ,每个 bool 值保存侧面是否有墙。预制件用于更改 Sprite ,因此预制件本身不是问题。我必须实例化预制件才能更改其 bool 值,并且在生成器脚本中将数据添加到新实例化的预制件中后,预制件的 Sprite 不会更新,而我只剩下默认 Sprite 。
我尝试将 Sprite 更改从图 block 预制件的 start() 方法中移动到一个单独的方法中,以尝试在实例化后更新它。
void spawnTile(int r, int c)
{
for(int i = 0; i < c; i++)
{
for(int j = 0; j < r; j++)
{
Instantiate(tile, new Vector3((float)(i * locationIncrement), (float) (-1 * j * locationIncrement), 0), transform.rotation);
if(i == 0)
{
tile.GetComponent<TileScript>().setLeftWall(true);
}
if(i == (c - 1))
{
tile.GetComponent<TileScript>().setRightWall(true);
}
if(j == 0)
{
tile.GetComponent<TileScript>().setTopWall(true);
}
if(j == (r - 1))
{
tile.GetComponent<TileScript>().setBottomWall(true);
}
tile.GetComponent<TileScript>().updateWalls();
}
}
}
这是我在生成器方法中使用的代码,即使实现了上述更改,代码仍然无法工作,并给我留下了所有默认的 Sprite ,而不是预期的更新 Sprite 。
最佳答案
嗨,您不应该更改预制件,您需要的是更改您创建的实例。
var newInstance = Instantiate(tile, new Vector3((float)(i * locationIncrement), (float) (-1 * j * locationIncrement), 0), transform.rotation);
Instantiate 是一种将返回创建的新实例的方法,您应该采用该新实例并对该对象进行更改。
关于c# - 在根据我输入的数据实例化 Unity 预制件后,如何更改它的 Sprite ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76258993/