Class 统一的动态类型?

Class 统一的动态类型?,class,unity3d,types,enums,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; 这将导致编辑器中出现以下内容: 如何动态更改equi

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

public enum Slot { Primary, Secondary };

public enum Primary {RocketLauncher, SniperRifle };

public enum Secondary { MachineGun };
我声明它们在编辑器中可用,如下所示:

public Slot slot;

public Primary equipable;
这将导致编辑器中出现以下内容:

如何动态更改
equitable
类型以查看类似的内容

注:

我正在改写一个游戏,并试图保持它非常整洁。我可以通过一点额外的努力来实现这一点,但我最想知道的是,我是否可以通过使用数据类型和使用声明玩游戏来实现这一点


谢谢

将插槽从
更改为

slot = Slot.Secondary;
对于
equitable
,您不能将其更改为
MachineGun
,因为
MachineGun
未在
枚举中定义

可以将
装备
更改为
机枪

equipable = Primary.MachineGun; 

如果您的
Primary
enum是
public enum Primary{RocketLauncher,sniperifle,MachineGun}

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

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

public abstract class Equipable : MonoBehaviour
{
    public Slot slot;

    public enum Slot
    {
        Primary,
        Secondary
    }
}
Equipable现在是一个抽象的单行为组件,需要有一个具体的实现:

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

    public enum Type
    {
        RocketLauncher,
        SniperRifle,
    }
}

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

现在,如果将其中一个组件的标题拖到inspector字段上,两个插槽都可以切换。因此,主武器进入辅助插槽。(在这种情况下,我会重新考虑主要和次要武器的双重使用,可能会选择一系列武器槽和主要武器类型等。)

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

    public enum Type
    {
        MachineGun,
        UnderwaterPulseRifle
    }
}