You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity实例化Tile预制体后,设置墙体参数无法更新Sprite求助

问题解决

你的核心问题是操作错了对象——你在实例化瓦片后,一直修改的是原始预制体tile,而不是场景中刚生成的那个瓦片实例,所以场景里的瓦片根本没接收到你的墙体设置,自然还是默认Sprite。

修正后的代码

void spawnTile(int r, int c) 
{
    for(int i = 0; i < c; i++)
    {
        for(int j = 0; j < r; j++)
        {
            // 捕获实例化出来的新瓦片对象
            GameObject newTile = Instantiate(tile, new Vector3((float)(i * locationIncrement), (float)(-1 * j * locationIncrement), 0), transform.rotation);
            // 获取新瓦片上的TileScript组件
            TileScript tileScript = newTile.GetComponent<TileScript>();
            
            if(i == 0)
            {
                tileScript.setLeftWall(true);
            }
            if(i == (c - 1))
            {
                tileScript.setRightWall(true);
            }
            if(j == 0)
            {
                tileScript.setTopWall(true);
            }
            if(j == (r - 1))
            {
                tileScript.setBottomWall(true);
            }  
            tileScript.updateWalls();
        }
    }
}

关键说明

  • Instantiate方法会返回一个新生成的GameObject实例,你必须把这个实例存下来,才能对场景中的具体瓦片进行操作。
  • 原代码中直接调用tile.GetComponent<TileScript>(),修改的是Project面板里的预制体,不是场景里刚生成的瓦片,所以完全没作用。
  • 如果你担心重复调用GetComponent影响性能,可以像上面代码一样,提前获取一次组件再复用。

内容的提问来源于stack exchange,提问作者2Mult

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 11:45:15