如何组织嵌套类作为Unity中的引用?

时间:2019-03-07 01:30:52

标签: c# unity3d scripting items

因此,我正在开发一个游戏,我希望获得一些有关如何对项目进行排序的建议,以便在Unity中轻松,清晰地编写代码参考。我知道我目前的方法有缺陷,确实我想要一些指导。

所以我正在做的是使用类来分隔项目类别及其项目。 例如,这是一个脚本设置的想法:

public class Items {
    public class Equipment {
        public class Weapons {
            public Item Sword = new Item();
            Sword.name = "Sword";
            Sword.cost = 1;
        }
    }
}

然后是基本的Item类

public class Item {
    public string name;
    public int cost;
}

我可以说这是一种糟糕的做法,尤其是基于我遇到的问题,但是我喜欢使用诸如Items.Equipment.Weapons.Sword之类的引用的想法,而且我已经习惯了从我以前使用过的API。

我愿意完全改变一切,我只想一些提示。谢谢。

我想我的主要问题是(是),组织嵌套类的最佳方法是什么,以便可以轻松地从其他脚本中引用它们?

我找到的答案是,对于我而言,与其嵌套类,不如使用名称空间将项目分成类别更好。谢谢你一百万。

1 个答案:

答案 0 :(得分:3)

我建议使用ScriptableObjects创建物品,盔甲和武器。 You'll have to spend an hour or two learning them,,但我认为,如果您走那条路,将会对您的设计更加满意。

将ScriptableObject视为一组属性(项目名称,成本,攻击能力,防御能力等)。对于游戏中的每个项目,您都会创建一个ScriptableObject实例。然后,这些ScriptableObject实例就变成了Unity项目中的资产,就像预制或精灵。这意味着您可以将它们拖到项目中,然后将其分配给MonoBehaviours上的字段。通过将角色从“项目”视图拖到检查器中,您可以为该角色分配设备。

这是它的外观示例

Item.cs

public class Item : ScriptableObject
{
    public string name;
    public int cost;
    public Sprite image;
}

Equipment.cs

public class Equipment : Item
{
    public Slots slot;
}

public enum Slots
{
    Body,
    DoubleHanded,
    Hands,
    Head,
    Feet,
    Legs,
    LeftHand,
    RightHand
}

Weapon.cs

// CreateAssetMenu is what lets you create an instance of a Weapon in your Project
// view.  Make a folder for your weapons, then right click inside that folder (in the 
// Unity project view) and there should be a menu option for Equipment -> Create Weapon
[CreateAssetMenu(menuName = "Equipment/Create Weapon")]
public class Weapon : Equipment
{
    public int attackPower;    
    public int attackSpeed;
    public WeaponTypes weaponType;
}

public enum WeaponTypes
{
    Axe,
    Bow,
    Sword
}

Armor.cs

[CreateAssetMenu(menuName = "Equipment/Create Armor")]
public class Armor : Equipment
{
    public int defensePower;
}

现在在您的项目中创建一堆武器和盔甲。

enter image description here

使ScriptableObjects美观的一件事是,您可以在Inspector中对其进行编辑,而不必通过代码进行编辑(尽管您也可以这样做)。

enter image description here

现在,在“角色” MonoBehaviour上,为该角色的装备添加一些属性。

public class Character : MonoBehaviour
{
    public Armor bodyArmor;
    public Armor headArmor;
    public Weapon weapon;
}

现在您可以在检查器中为自己的角色分配武器和装甲

enter image description here

您可能想要比我的示例更符合您的需求的东西,但这只是基础。我建议花一些时间研究ScriptableObjects。阅读我之前链接的Unity文档,或在YouTube上观看一些视频。

Unity的优势之一是,它使您可以通过编辑器(而不是通过代码)进行大量的设计和配置,而ScriptableObjects可以对此进行增强。