Как мне организовать вложенные классы, чтобы они были ссылками в Unity? - PullRequest
1 голос
/ 07 марта 2019

Итак, я работаю над игрой, и мне хотелось бы дать несколько рекомендаций о том, как сортировать элементы, чтобы они были легко читаемыми, справочными по кодированию в 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 Ответ

4 голосов
/ 07 марта 2019

Я рекомендую использовать ScriptableObjects для создания ваших предметов, доспехов и оружия. Вам придется потратить час или два на их изучение, , но я думаю, вы будете намного счастливее с вашим дизайном, если вы пойдете по этому пути.

Представьте объект ScriptableObject как набор свойств (имя элемента, стоимость, сила атаки, сила защиты и т. Д.).Для каждого элемента в вашей игре вы создаете экземпляр объекта ScriptableObject.Эти экземпляры ScriptableObject затем становятся активами в вашем проекте Unity, как префаб или спрайт.Это означает, что вы можете перетащить их в свой проект и назначить их полям в MonoBehaviours.В результате вы сможете назначать снаряжение персонажу, перетаскивая его из представления проекта в Инспектор.

Вот пример того, как это будет выглядеть

Элемент.cs

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

Снаряжение .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 приятными, это то, что вы можете редактировать их в инспекторе, а не делать это с помощью кода (хотя вы можете сделать это тоже).

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 усиливают это.

...