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);
我正在尝试为我的游戏创建一个物品系统,但我无法访问我的 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);