Unity中的动态类型?

时间:2016-05-29 00:37:47

标签: class unity3d types enums

因此,假设我的Equipable类中有以下数据类型:

public enum Slot { Primary, Secondary };

public enum Primary {RocketLauncher, SniperRifle };

public enum Secondary { MachineGun };

我声明它们可以在编辑器中使用,如下所示:

public Slot slot;

public Primary equipable;

这将导致编辑器中出现以下内容:

enter image description here

我怎样才能动态更改equipable类型才能看到类似的内容?

enter image description here

注意:

我正在重写一个游戏并试图让它保持整洁。我能够通过一点额外的努力来解决这个问题,但我主要想知道是否可以使用数据类型和使用声明来玩游戏。

谢谢!

2 个答案:

答案 0 :(得分:1)

您可以创建自定义类型而不是枚举,然后使用这样的多态:

public class WeaponInventory : MonoBehaviour
{
    public Equipable primarySlot;
    public Equipable secondarySlot;
}

public abstract class Equipable : MonoBehaviour
{
    public Slot slot;

    public enum Slot
    {
        Primary,
        Secondary
    }
}

Equipable 现在是一个抽象的 MonoBehaviour 组件,需要具体实现:

[System.Serializable]
public class PrimaryEquipable : Equipable
{
    public Type type;

    public enum Type
    {
        RocketLauncher,
        SniperRifle,
    }
}

[System.Serializable]
public class SecondaryEquipable : Equipable
{
    public Type type;

    public enum Type
    {
        MachineGun,
        UnderwaterPulseRifle
    }
}

请注意,具体的 MonoBehaviour 组件需要放在他们自己的.cs文件中,该文件与该类名称相同,否则Unity会抱怨。

enter image description here

现在,如果将其中一个组件的标题拖到检查器字段上,则可以切换两个插槽。所以主要武器进入辅助插槽。 (在这种情况下,我会重新考虑 primary secondary 的双重使用,也许可以解决武器插槽阵列和主要的武器类型等)

答案 1 :(得分:0)

要将广告位从Primary更改为Primary

slot = Slot.Secondary;

对于equipable,您无法将其更改为MachineGun,因为MachineGun枚举中未定义Primary

可以使用

equipable更改为MachineGun
equipable = Primary.MachineGun; 

如果您的Primary枚举为public enum Primary { RocketLauncher, SniperRifle, MachineGun };