无法修改子GameObject的Sprite问题求助
问题原因与解决方案
核心问题
你当前的代码只是把top变量赋值为了SpriteRenderer组件中sprite的副本,修改这个变量的值不会影响组件本身的sprite属性——因为Sprite是值类型,赋值时会创建独立副本,而非引用关联。
修正代码
把保存Sprite的变量改成保存SpriteRenderer组件的引用,直接修改组件的sprite属性:
public class maker : MonoBehaviour { public Sprite[] part; SpriteRenderer topRenderer; SpriteRenderer midRenderer; SpriteRenderer botRenderer; void Start() { // 获取SpriteRenderer组件引用,而非Sprite副本 topRenderer = transform.Find("top").GetComponent<SpriteRenderer>(); midRenderer = transform.Find("middle").GetComponent<SpriteRenderer>(); botRenderer = transform.Find("bottom").GetComponent<SpriteRenderer>(); Debug.Log(topRenderer.sprite); // 输出当前Sprite名称 topRenderer.sprite = part[5]; // 直接修改组件的sprite属性,生效 } }
额外检查点
- 确认
part数组在Inspector中已经正确赋值,且索引5对应的Sprite不为空 - 确保子对象"top"确实存在于父对象的层级中,没有拼写错误(比如大小写不一致)
- 子对象Inspector视图:显示名为"top"的GameObject,带有SpriteRenderer组件并指定了初始Sprite
- 父对象Inspector视图:挂载了maker脚本,part数组已填充多个Sprite资源
内容的提问来源于stack exchange,提问作者Rzempol
相关产品推荐
相关产品推荐

