我正在尝试为我的游戏创建一个项目系统,但我无法访问从同一个抽象类继承的 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);
有谁知道如何解决这个问题?
谢谢你。