ScriptableObject 摘要 class: 访问子变量

ScriptableObject abstract class: access child variable

我正在尝试为我的游戏创建一个物品系统,但我无法访问我的 Sriptable 对象中继承自同一抽象的不同变量 class。

我有一个从 SriptableObject 派生的抽象 class:

//ItemObject
public abstract class ItemObject : ScriptableObject
{
    public GameObject prefab;
    public ItemType type;
    public string itemName;
    [TextArea(15,10)]
    public string description;
}

//ItemType
    public enum ItemType
    {
        Potion,
        Weapon,
        Default
    }

我创建了一个位于 GameObject 上的 ItemController:

//ItemController
public class ItemController : MonoBehaviour
{
    public ItemObject item;
}

我创建了一个派生自 ItemObject 的脚本对象,并将创建的脚本对象挂接到 ItemController 脚本:

//WeaponObject
[CreateAssetMenu(fileName = "New Weapon Object", menuName = "Inventory System/Items/Weapon")]
public class WeaponObject : ItemObject
{
    public float atkBonus;
    public float defBonus;
    
    private void Awake()
    {
        type = ItemType.Weapon;
    }
}

我正在尝试对 ItemController 所在的对象执行 Raycast,并且我正在尝试从我的 WeaponObject 访问 atkBonus 变量。

//PlayerController
 private void Update()
    {
        RaycastHit hit;
        if (Physics.Raycast(this.transform.position, this.transform.forward, out hit, 2f))
        {
            var itemObject = hit.transform.GetComponent<ItemController>();
            if(itemObject)
            {
                Debug.Log(itemObject.item.atkBonus);
            }    
        } 
    }

这会抛出一个错误,我不明白为什么。 “错误:'ItemObject' 不包含 'atkBonus' 的定义并且没有可访问的扩展方法 'atkBonus'...”

我可以从父抽象class访问变量。

Debug.Log(itemObject.item.itemName);

有人知道怎么解决吗?

谢谢。

而不是

Debug.Log(itemObject.item.atkBonus);

尝试

WeaponObject wo = (WeaponObject) itemObject.item;
Debug.Log(wo.atkBonus);