c# - 在根据我输入的数据实例化 Unity 预制件后,如何更改它的 Sprite ?

标签 c# unity-game-engine instantiation prefab

就上下文而言,我没有太多的 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/

相关文章:

python - Python 中的实例变量不像我想象的那样

c# - 日志不会保存到日志表中

C# Unity onClick 事件中函数的参数错误

c++ - 构造函数必须显式初始化没有默认构造函数的成员

android - Firebase Auth 和 Unity3D - 无法找到 FirebaseCppApp-5.1.1

git - git 子模块上的云构建失败

php - 如何定义一个只有在没有参数传递给构造函数时才能实例化的类?

c# - 预留实例模式下适用于 Azure 网站的新 Azure 分布式缓存

c# - 根据分组删除列表中除 1 个对象以外的所有对象

c# - c#什么时候需要async和await?