1

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

我有一个派生自 SriptableObject 的抽象类:

//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;
}

我创建了一个派生自 的 Scriptable Object ItemObject,并将创建的 Scriptable Object 挂接到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,并且我正在尝试atkBonus从我的WeaponObject.

//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’......”

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

Debug.Log(itemObject.item.itemName);

有谁知道如何解决这个问题?

谢谢你。

4

1 回答 1

1

代替

Debug.Log(itemObject.item.atkBonus);

尝试

WeaponObject wo = (WeaponObject) itemObject.item;
Debug.Log(wo.atkBonus);
于 2021-08-08T17:32:13.780 回答