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

Unity报错:Image类型无texture定义及对应可访问扩展方法

错误排查与解决:Unity Image组件无"texture"属性

错误核心原因

Unity UI的Image组件没有texture属性,它通过sprite属性控制显示的图像;此外代码还存在两处次要问题:

  • Label变量声明为Image类型,但实际获取的是Text组件,类型不匹配
  • GetComponent<Rect>()调用错误,UI元素的矩形信息需通过RectTransform获取

修复步骤

  1. 替换texture为sprite
    将原Texture类型的变量改为Sprite类型,赋值时使用Image.sprite属性,符合Unity UI的设计逻辑。
  2. 修正Label变量类型
    将private Image Label;改为private Text Label;,与实际获取的组件类型匹配。
  3. 修正矩形获取逻辑
    使用RectTransformUtility工具类,通过RectTransform获取UI元素的屏幕空间矩形。

完整修复代码

using UnityEngine;
using UnityEngine.UI;

public class CFX_Demo_GTToggle : MonoBehaviour
{
    public Sprite Normal;
    public Sprite Hover;

    public Color NormalColor = new Color32(128, 128, 128, 128);
    public Color DisabledColor = new Color32(128, 128, 128, 48);

    public bool State = true;
    public string Callback;
    public GameObject Receiver;

    private Rect CollisionRect;
    private bool Over;
    private Text Label;

    private void Awake()
    {
        RectTransform rectTransform = GetComponent<RectTransform>();
        RectTransformUtility.ScreenPointToRectangleInRectangle(rectTransform, Vector2.zero, Camera.main, out CollisionRect);
        Label = GetComponentInChildren<Text>();
        UpdateTexture();
    }

    private void Update()
    {
        if (CollisionRect.Contains(Input.mousePosition))
        {
            Over = true;
            if (Input.GetMouseButtonDown(0))
            {
                OnClick();
            }
        }
        else
        {
            Over = false;
            GetComponent<Image>().color = NormalColor;
        }
        UpdateTexture();
    }

    private void OnClick()
    {
        State = !State;
        Receiver.SendMessage(Callback);
    }

    private void UpdateTexture()
    {
        Color color = !State ? DisabledColor : NormalColor;
        Image image = GetComponent<Image>();

        image.sprite = Over ? Hover : Normal;
        image.color = color;

        if (Label != null)
        {
            Label.color = color * 1.75f;
        }
    }
}

额外优化提示

  • 缓存Image组件引用,避免在Update和UpdateTexture中重复调用GetComponent<Image>(),减少性能开销
  • 建议用UnityEvent替代SendMessage,后者性能较差且缺乏类型校验

内容的提问来源于stack exchange,提问作者Dr Chamyoung

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 14:05:23