如何根据我输入的数据实例化 Unity 预制件后更改它的精灵?

问题描述 投票:0回答:1

对于上下文,我没有太多的Unity和C#经验,所以如果答案真的很简单,请不要责备我。我试图让地牢的边缘瓷砖自动在各自的边缘创建墙壁(例如,最右边的一列瓷砖在其右侧有墙壁)。我制作了一个瓷砖预制件,它根据 4 个布尔值更改其 sprite,每个布尔值表示侧面是否有墙。预制件用于更改精灵,因此这不是预制件本身的问题。我必须实例化预制件以更改其布尔值,并且在将数据添加到生成器脚本中新实例化的预制件后,预制件的精灵不会更新,我只剩下默认精灵。

我尝试将 sprite 更改从 tile prefab 的 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();
            }
        }
    }

这是我在 spawner 方法中使用的代码,即使实施了上述更改,代码仍然无法正常工作,给我留下了所有默认精灵,而不是预期的更新精灵。

c# unity-game-engine instantiation prefab
1个回答
1
投票

您好,您不应该更改预制件,您需要的是更改您创建的实例。

var newInstance = Instantiate(tile, new Vector3((float)(i * locationIncrement), (float) (-1 * j * locationIncrement), 0), transform.rotation);

Instantiate 是一种将返回创建的新实例的方法,您应该获取该新实例并对该对象进行更改。

© www.soinside.com 2019 - 2024. All rights reserved.