Я пытаюсь создать систему предметов для своей игры, но не могу получить доступ к различным переменным в моих Sriptable Objects, которые наследуются от одного и того же абстрактного класса.
У меня есть абстрактный класс, производный от 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
}
Я создаю ItemController, который находится на GameObject:
//ItemController
public class ItemController : MonoBehaviour
{
public ItemObject item;
}
Я создаю Scriptable Object, производный от ItemObject
, и подключаю созданный Scriptable Object к ItemController
Script:
//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;
}
}
Я пытаюсь выполнить Raycast для объекта, на котором находится ItemController
, и я пытаюсь получить доступ к переменной 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);
Кто-нибудь знает, как это решить?
Спасибо.
Разве он не создает еще один экземпляр этого ScriptableObject, в то время как вся их цель заключалась в том, чтобы уменьшить количество клонов и получить доступ к его свойствам из любого места? Так что это в основном похоже на одноэлементный объект, который я должен создавать еще одну копию всякий раз, когда я хочу получить доступ к его свойствам?