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

Unity中C#脚本无法识别Scriptable Object内Sprite的问题

问题:访问Scriptable Object的public字段时提示未定义

我创建了多个作为治理策略的Scriptable Object(Policy类),每个实例包含public Sprite类型的icon字段、分类及多个浮点属性。在一个MonoBehaviour脚本中,尝试将Image的sprite设置为该icon时,编辑器提示“Policy不包含icon的定义”,但其他属性均可正常访问。

Policy Scriptable Object代码

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

[CreateAssetMenu(fileName = "New Policy", menuName = "Colony/Policy")]
public class Policy : ScriptableObject
{
    public string policyName;
    public string description;
    public enum Category { Health, Happiness, Control, Espionage, Defense, PopulationGrowth, Production, Research, Agriculture, FactionSpecific }
    public Category category;
    public float happinessModifier;
    public float healthModifier;
    public float controlModifier;
    public float espionageModifier;
    public float defenseModifier;
    public float productionModifier;
    public float researchModifier;
    public float agricultureModifier;
    public float populationGrowthModifier;
    public float diplomacyModifier;
    public Faction.FactionID factionID; // FactionID of faction that can use this policy (if faction-specific)
    public Sprite icon;
}

调用icon的代码

void ApplyPolicyFromDropdown(TMP_Dropdown dropdown)
{
    int selectedIndex = dropdown.value;
    if (selectedIndex > 0) // Ignore "Select Policy"
    {
        Policy selectedPolicy = dropdownPolicies[dropdown][selectedIndex - 1]; // Offset by 1
        policyImages[selectedPolicy.category].sprite = selectedPolicy.icon;   // 此处报错:Policy不包含icon的定义
        policyManager.ApplyPolicy(selectedPolicy);
    }
}
解决方案

以下是几个实用的排查和解决方向:

  • 检查命名空间冲突:确保调用脚本和Policy类在同一命名空间,或已通过using语句引入Policy所在命名空间。如果存在同名的Policy类(比如其他插件或自定义代码),编辑器会引用错误的类,导致找不到icon字段。

  • 刷新编译缓存:Unity可能存在编译缓存问题,即使代码修改也未同步。可以尝试:

    • 点击顶部菜单栏Assets -> Refresh
    • 重启Unity编辑器
    • 先修复Console窗口中的其他编译错误,编译失败会导致代码更新不生效。
  • 验证Scriptable Object实例:确认dropdownPolicies中的Policy实例是基于添加icon字段后的类创建的。若实例是之前创建的,需重新创建实例,或在Inspector窗口点击Reset按钮重置实例数据,确保字段同步。

  • 检查字段访问权限:确认icon字段确实是public修饰,没有被误改访问权限,也没有特殊属性限制访问。

内容的提问来源于stack exchange,提问作者Jacob Jackson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 21:33:14