【问题标题】:Dynamic Type in Unity?Unity中的动态类型?
【发布时间】:2016-05-29 00:37:46
【问题描述】:

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

public enum Slot { Primary, Secondary };

public enum Primary {RocketLauncher, SniperRifle };

public enum Secondary { MachineGun };

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

public Slot slot;

public Primary equipable;

这将在编辑器中生成以下内容:

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

注意:

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

谢谢!

【问题讨论】:

    标签: class unity3d types enums


    【解决方案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 会报错。

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

    【讨论】:

      【解决方案2】:

      要将插槽从Primary 更改为Primary

      slot = Slot.Secondary;
      

      对于equipable,您不能将其更改为MachineGun,因为MachineGun 未在Primary 枚举中定义。

      本来可以使用

      equipable 更改为 MachineGun
      equipable = Primary.MachineGun; 
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-29
        • 2017-12-12
        • 1970-01-01
        • 1970-01-01
        • 2021-01-04
        • 1970-01-01
        相关资源
        最近更新 更多