У меня есть игра, в которой есть разный муссор.
Они обладают полями типа:
- тип (как индикатор, который указывает на то какие параметры будут дальше)
- скорость (зависит от типа)
- урон (зависит от типа)
- скин (зависит от типа)
Я создал префаб з скриптом который подбирает необходимый скин и задает все параметры, но думаю как красиво и понятно все организовать? Возможно списком enum создать типы, а в скрипте класса определять поле с конкретным типом и методом что задают параметры в зависимости от типа? Но что тогда делать с колайдерами? Их тоже динамично подставлять? Где хранить информацию о всех типах и характеристиках?
Или проще сделать разные префабы с разными характеристиками но одним скриптом?
Подскажите, как правильно подобрать структуру к такому классу объектов? :)
100% imho
Кому как проще, я как программист больше полагаюсь на скрипты, чем на настройки через инспектор, потому что больше доверяю контролю версий исходников через git со всеми вытекающими.
Однако, если в проекте есть не программисты, им это не удобно, им удобно какраз как в юнити заведено, т.е. префабы, инспектор и т.д.
В проектах, которые я делаю один, я по минимому стараюсь использовать программирование мышкой как мы это называем, т.к. искать что то в сцене не люблю. мне проще в ide нажать ctrl+f
А как должны быть устроены обьекты - художнику (Вам) виднее, будь то enum или любая другая особенность c#/ооп , это сильно контекстно зависимо.
Согласен, ответ получился неконкретный и размыт. Но я придумал решение и обясню какое:
Для начала я создал два 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];
Вседа рад советам и критике моего решения :)
Виртуальный выделенный сервер (VDS) становится отличным выбором
Есть инструкция по написании необходимой библиотеки на C#Она гласит следующее:
При использовании конфигурации appexe
После установки CefCharp в папке сборки появились папки "x64", "x86", "GPUCache", "blob_storage"