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
相关产品推荐
相关产品推荐

