Структура объектов Unity C#

108
10 ноября 2019, 23:40

У меня есть игра, в которой есть разный муссор.
Они обладают полями типа:
- тип (как индикатор, который указывает на то какие параметры будут дальше)
- скорость (зависит от типа)
- урон (зависит от типа)
- скин (зависит от типа)

Я создал префаб з скриптом который подбирает необходимый скин и задает все параметры, но думаю как красиво и понятно все организовать? Возможно списком enum создать типы, а в скрипте класса определять поле с конкретным типом и методом что задают параметры в зависимости от типа? Но что тогда делать с колайдерами? Их тоже динамично подставлять? Где хранить информацию о всех типах и характеристиках?

Или проще сделать разные префабы с разными характеристиками но одним скриптом?
Подскажите, как правильно подобрать структуру к такому классу объектов? :)

Answer 1

100% imho

Кому как проще, я как программист больше полагаюсь на скрипты, чем на настройки через инспектор, потому что больше доверяю контролю версий исходников через git со всеми вытекающими.

Однако, если в проекте есть не программисты, им это не удобно, им удобно какраз как в юнити заведено, т.е. префабы, инспектор и т.д.

В проектах, которые я делаю один, я по минимому стараюсь использовать программирование мышкой как мы это называем, т.к. искать что то в сцене не люблю. мне проще в ide нажать ctrl+f

А как должны быть устроены обьекты - художнику (Вам) виднее, будь то enum или любая другая особенность c#/ооп , это сильно контекстно зависимо.

Answer 2

Согласен, ответ получился неконкретный и размыт. Но я придумал решение и обясню какое:
Для начала я создал два enum списка в генераторе объектов: (и да, я не использую здесь оригинальный код ;)

public enum OTypes {
    easy, //1
    normal, //2
    hard, //3
    ultraHard, //5
    danger //1
}
public enum FieldsToOTypes {
    score = 0,
    speed = 1,
    damageToLocation = 2,
    damageToPlayer = 3
}

Также в классе создал словарь:

Dictionary<OTypes, int[]> OTypesDictonary = new Dictionary<OTypes, int[]> {
        // rules to build difrent types of O
        { OTypes.easy, new int[] {1, 1, 1, 0} }, // meaning of array indexes can see in FieldsToOTypes
        { OTypes.normal, new int[] {1, 2, 2, 0} }, // score, speed, damageToLocation, damageToPlayer
        { OTypes.hard, new int[] {2, 3, 3, 0} },
        { OTypes.ultraHard, new int[] {3, 5, 5, 0} },
        { OTypes.danger, new int[] {0, 5, 0, 1} }
    };

Что это такое? Думаю, такой код позволит легко добавлять новые виды объектов, также создание и задание параметров будет похоже на фабрику и имеет понятный вид:

OEntity.score = OTypesDictonary[type][(int)FieldsToOTypes.score];
        OEntity.speed = OTypesDictonary[type][(int)FieldsToOTypes.speed];
        OEntity.damageToLocation = OTypesDictonary[type][(int)FieldsToOTypes.damageToLocation];
        OEntity.damageToPlayer = OTypesDictonary[type][(int)FieldsToOTypes.damageToPlayer];

Вседа рад советам и критике моего решения :)

READ ALSO
Создание библиотеки DLL на C++ по примеру C#

Создание библиотеки DLL на C++ по примеру C#

Есть инструкция по написании необходимой библиотеки на C#Она гласит следующее:

113
C++ clr Hosting - ICLRMetaHost GetRuntime уточнение версии до 4.7.2

C++ clr Hosting - ICLRMetaHost GetRuntime уточнение версии до 4.7.2

При использовании конфигурации appexe

97
Лишние папки после сборки

Лишние папки после сборки

После установки CefCharp в папке сборки появились папки "x64", "x86", "GPUCache", "blob_storage"

113
Не могу перевести код (вероятно JS) в C# [закрыт]

Не могу перевести код (вероятно JS) в C# [закрыт]

Код, который нужно перенести :

111