通用库存Unity

时间:2013-12-27 21:16:18

标签: unity3d unityscript

编辑:我一直在考虑如何给予一个人;博士在这里。怎么样:Inspector正在寻找一个BaseObject。如何让检查器允许我分配派生自BaseObject的DerivedObject。

我正在尝试制作通用库存系统。我已经尝试过Brackey的库存系统,但是想要扩展它以包含除“物品”之外的东西。我希望有一个“Key”或“Weapon”类继承Item作为基础,而Brackey的Inventory有许多布尔字段,用于确定它是否能够装备或者它是否是武器。我可以这样做,我的问题是如何在编辑时创建这些项目,当我的脚本期望基类型:项目时。

从头开始我有一个Item(Fields:string ItemName),我有Key:Item(New Fields:string AuthorityLevel)

我有一个Pickup脚本,我将其作为组件应用于GameObjects。在该脚本中,我可以给它一个Item属性,当GameObject与之交互时,我可以调用Pickup.GetItem()方法。然后获取Item属性并将其添加到Inventory对象。

如何获取Item属性来保存对继承自Item的Key对象的引用? PickUp脚本的检查器只显示Item Property的“ItemName”,而不是Key Item的AuthorityLevel字段。

我有点失落。我发现在运行时很容易实现它,因为创建项目的脚本,知道要创建的特定项目,并可以将其分配给新创建的GameObject的PickUp脚本。但是在编辑时,很难告诉检查员我希望Pickup脚本保存对Key或继承自Item的任何其他对象的引用。

2 个答案:

答案 0 :(得分:1)

我知道这已经快 7 岁了,但对于任何搜索此内容的人来说:

我认为这里没有任何实际问题,List<Item> 可以存储对从 Item 继承的任何类的引用。

因此,拥有一个类类型的数组或列表允许引用派生类的任何对象。

示例:

public class Item
{
    //some attributes
}

public class Weapon : Item, IEquippable, IAttack //etc
{
    //weapon stuff
}

只能存储在

List<Item> items = new List<Item>();

答案 1 :(得分:0)

从基类B派生出D类

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