【问题标题】:How do I organize nested classes to be references in Unity?如何将嵌套类组织为 Unity 中的引用?
【发布时间】:2019-07-28 19:16:48
【问题描述】:

所以我正在开发一款游戏,我想要一些关于如何对项目进行排序的建议,以便在 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。

我愿意彻底改变一切,我只是想要一些提示。谢谢。

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

我找到的答案是,在我的情况下,最好使用命名空间将项目分成类别,而不是嵌套类。谢谢一百万。

【问题讨论】:

  • 为什么不使用 namespaces 或者这在 Unity 中是不可能的?
  • 您在寻找什么结果?您是否有特定的原因希望每个项目都成为自己独特的类别?您想要一种方法在您的嵌套类示例中完成这项工作,还是想要整体建议?
  • 是的,我在 Unity 中使用它时遇到了一些困难。也许我只是做错了。
  • 嵌套类只是为了组织获取项目,无论如何。所以最终我希望能够使用这些项目。我希望能够做类似 Player.Inventory.addItem(Items.Equipment.Weapons.Sword);
  • 你可以使用c#属性来实现你想要的。

标签: c# unity3d scripting items


【解决方案1】:

我建议使用 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;
}

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

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

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

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

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

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

Unity 的优势之一是它允许您通过编辑器而不是通过代码进行大量设计和配置,而 ScriptableObjects 强化了这一点。

【讨论】:

  • 这太棒了。正是我需要的!我觉得这对我有很大帮助。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多