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

无法修改子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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 12:52:06