2013-12-27 3 views
1

Редактировать: Я думал о том, как дать tl; dr здесь. Как насчет этого: инспектор ищет BaseObject. Как я могу заставить инспектора разрешить мне присваивать DerivedObject, полученный из BaseObject.Generic Inventory Unity

Я пытаюсь создать общую систему инвентаризации. Я опробовал систему инвентаря Brackey, но хотел расширить ее, включив в нее вещи, выходящие за рамки «предмета». Я хотел бы иметь классы «Key» или «Weapon», которые наследуют Item как базу, тогда как в Inventory Brackey есть несколько булевых полей, которые определяют, может ли он быть экипированным или если это оружие. Я могу это сделать, моя проблема заключается в том, как создавать эти элементы во время редактора, когда мой скрипт ожидает базы. Тип: Item.

Начиная с нуля у меня есть пункт (поля: строка ITEMNAME) и у меня есть ключ: Предмет (New Fields: строка AuthorityLevel)

У меня Pickup сценарий, который я применяю в качестве компонента к геймобжектам. В этом скрипте я могу дать ему свойство Item, и когда объект GameObject взаимодействует, я могу вызвать метод Pickup.GetItem(). Затем он берет свойство Item и добавляет его в мой объект Inventory.

Как мне получить свойство Item для хранения ссылки на объект Key, который наследуется от Item? Инспектор сценария PickUp будет показывать только ItemName Item Item, а не поле KeyLevel ключевого элемента.

Я немного потерян. Мне было легко реализовать это во время выполнения, поскольку скрипты, которые создают элементы, знают, какой конкретный элемент создавать и могут назначить его новому скрипту PickUp в GameObject. Но во время редактора сложно сказать инспектору, что я хочу, чтобы сценарий Pickup содержал ссылку на Key или любой другой объект, который наследует от Item.

+0

Вы смогли найти ответ на свой вопрос еще? :) Я ищу то же самое. –

+0

Эй, Рой. Я еще не нашел решение. Проект, над которым я работал, был только тем, что я пытался поиграть с некоторыми идеями, поэтому я поставил его на backburner для работы над простыми вещами. Однако я недавно видел то, что, как я думал, может решить эту проблему. Я положил это в глубину своего воображения, полагая, что я попробую его когда-нибудь по дороге. Возможно, вы найдете это как можно интереснее: http://www.reddit.com/r/Unity3D/comments/1xu0bg/release_full_inspector_inspector_serialization/ – Dszordan

+0

Спасибо за ссылку, совершенно совпадение, поскольку я только что заметил ее, прежде чем вы прокомментировали здесь ! Это выглядит очень хорошо, и автор, кажется, тоже отвечает на вопросы. :) –

ответ

0

производный класс D от базового класса B

class D : public B 
{ 
//staff or nothing 
} 
+0

На какой вопрос вы отвечаете? – Jerdak

+1

Привет, Java. Я знаю, как вывести класс из другого. В моем примере выше: (Изменить, потому что, видимо, вы не можете нажать здесь.) ключ класса: item {} Проблема заключается в том, что у меня есть компонент, который ожидает объект типа Item. Я хочу передать ему объект Key, который является Item, но я не могу сделать это во время редактора. Это легко сделать во время выполнения. – Dszordan

+0

Можете ли вы опубликовать код или код, с которым вы столкнулись? – JavaGrassHopper