Не видит данные скрипта, который наследуется от другого (scriptableobject) C# UNITY

Рейтинг: 0Ответов: 3Опубликовано: 10.01.2023

Делаю инвентарь. Есть основной скрипт Item, где указаны основные общие параметры предметов. От него наследуется скрипт Equipment, в котором указаны параметры, присущие только отдельным предметам (чтобы удобнее было создавать различные типы) и реализуется он через ScriptableObject. После создания предмета я пытаюсь обратиться к параметру (который есть только в скрипте Equipment) через Item - но мне пишет, что в Item нет таких переменных! Т.е. получить я могу только те переменные, которые хранятся именно в Item, а все, что в Equipment я не вижу, хотя он наследуется от Item. Как же мне тогда получить нужные мне переменные?

Ответы

▲ 0Принят

Это называется инкапсуляция, при апкасте к родительскому классу, все состояния и поведение дочерного скрывается. Насчёт решения, можешь пробывать даункастить объект обратно к Equipment. Допустим так:

if (object1 is Equipment equipment)
    equipment.нужные_поля
▲ 2
Item foo = new Equipment(); // условно
foo.slot // "Item" не содержит определения "slot"

Equipment наследуется от Item, но не на оборот, поэтому с чево бы Item знать не то что о полях Equipment, а вообще о существовании этого класс.

if (foo is Equipment efoo)
    rightSlot = efoo.slot == targetSlot;
▲ 0

Вариант выше оказался правильным, только я сделал немного по другому и это называется даункастинг (Downcasting):

// item это производная от Item
Equipment equipment = (Equipment)item; //Downcasting
int needstat = equipment.damagePoints; //damagePoints - это один из параметров у Equipment

Всем остальным тоже спасибо за ответы!