Общие вопросы о архитектуре проекта
- Если у меня есть несколько видов кораблей (или чего то еще) - как я понимаю, было бы правильным создать для них родительский класс А с общей для всех кораблей логикой, от которого можно было бы создавать новые виды кораблей. Как правильно в таком случае реализуется наследование? Делаются разные скрипты для кораблей Б и В и они оба наследуются от класса А, каждый скрипт вешается на соответствующий префаб или это делается как то по другому?
- У меня есть метод, в котором с помощью метода Instantiate в двух позициях создаются объекты. Для каждой позиции у меня написана отдельная строка кода. Это не очень удобно. Можно ли в одной строке указать несколько позиций? Единственная мысль, которая у меня есть - с помощью массива трансформов. Только как это дальше прорабатывать - идей нет.
- В будущем нужно будет создавать пул объектов. Смотрела/читала различные видео, статьи - везде они делаются по разному. Общую идею поняла, но помимо простого отключения объектов люди делали что то еще. Как реализовать пул объектов правильно и, желательно, не очень замороченно? Как он должен взаимодействовать с объектами помимо простого отключения, включения, добавления?
Ответы (1 шт):
Автор решения: KraGen.Games
→ Ссылка
- Делаете базовый абстрактный класс Ship. В нём делаете методы Движения и ещё что то что должо быть у ВСЕХ кораблоей. Потом просто наследуете этот класс в других скриптах и если на каком то типе корабля что то новое по типу "Оружие" то дописываете уже в скрпте этого корабля.
2.Да.. делаете масив Векторов3 и через poolName[int] берёте нужную позицию. Вообще по словам не понятно каким образом вы вписываете координаты было бы лучше увидеть код.
3.Пул объектов. Лучше юзать не Масив а Список List тобишь ибо если будете юзать масив то там длинну масива нужно указать в инспекторе. А лист он динамический. ну в общем
public GameObject prefab;
public List<GameObject> objects;
private int idObject = 0;
//Наполняем пул
public void Start(){
for(int i = 0;i < objects.Count;i++){
objects.Add(prefab);
object[i].SetActive(false);
}
}
public void GetObject(){
if(idObject < objects.Count){
objects[idObject].SetActive(true);
}
else{
idObject = 0;
}
}
В общем сначала мы заполнили пул объектами которые указали как prefab и вырубили их а потом замутили метод в котором мы врубаем один объект из пула.