Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / Создание игры подобной Plant vs Zombie. Вопросы

Создание игры подобной Plant vs Zombie. Вопросы

Поделиться
bretbasПостоялецwww17 авг. 201710:12#0
Доброго времени суток, Господа. Хочу написать игрушку на unity3d в стиле Plant vs Zombie.
Хотел бы поинтересоваться, как лучше сделать:
1. Создание/Уничтожение врагов? Instantiate/Destroy? Или все-таки пул объектов? Если пул, то есть ли готовые бесплатные решения, или придется самому писать?
2. Генерация врагов должна быть случайной или постоянной? В данное время имею скрипт-генератор, который каждый interval времеми создает Instantiate всех врагов из массива GameObject[] префабов в рандомных позициях, которые не выходят за определенные границы.
Он работает, но на экране мясо, хочется конечно более "умной" генерации врагов:) Да и + постоянный вызов Instantiate просто тормоз...
3. Я не могу понять, Plant vs Zombie - это 2d игра или все-таки 3d?:) Я не собираюсь делать копию этой игры, но некоторые характеристики с нею схожи; пока я создаю в 2d, вроде все работает...
kvakvsПостоялецwww17 авг. 201711:55#1
1. Создавай и удаляй безо всяких пулов. Пулы нужны когда у тебя десятки сотни в секунду. А в pvz такого нет.
2. Генерация должна быть случайной но по конфигу уровня. Первый уровень - случайно скажем 2 вида врагов. Десятый уровень скажем 10 видов врагов и трудные с шансом не менее 1 и не более 2 штук за игру, итд. Для начала можно конечно просто всё случайно, на будущее заскриптуешь и добавишь ограничения.
3. 2д но можно изобразить сцену под некоторым углом камеры. Это может прокатить с 2д спрайтами если угол подходящий.

Правка: 17 авг. 2017 11:55

bretbasПостоялецwww17 авг. 201717:46#2
kvakvs, блин, странно, при создании по таймеру врагов, начинает притормаживать...может я что-то не правильно сделал
kvakvsПостоялецwww17 авг. 201718:53#3
bretbas
> kvakvs, блин, странно, при создании по таймеру врагов, начинает
> притормаживать...может я что-то не правильно сделал
Первая мысль возможно какой-то ресурс подгружается и освобождается каждый раз. Текстура или звук или модель.

https://forum.unity3d.com/threads/is-instantiate-bad-for-performa… -slow.182560/

Как проверить не уверен. Может есть какие-то советы для юнити как загрузить ресурс и не выгружать.
Попробуй создай невидимых монстров по 1 штуке и не пускай их на поле, они тогда удержат ресурс от освобождения. Попробуй вдруг забегает быстрее.

Пулы советуют использовать когда много одинаковых объектов вроде пуль.
Используй профайлер.

Правка: 17 авг. 2017 18:57

MisanthropeПостоялецwww17 авг. 201719:03#4
bretbas
танки забросил?
DenBraunПостоялецwww17 авг. 201721:51#5
bretbas
> странно, при создании по таймеру врагов, начинает притормаживать...может я
> что-то не правильно сделал
к такому вопросу обычно хотяб листинг кода нужен, на кофейной гуще гадают немного на другом форуме:)

а что касается вопроса, скорее всего где то накосячил сам, я делаю игру с подобной механикой в 2d сейчас, делал краш тесты, выводил по таймеру до 500 мобов, все норм, ФПС не проседал, он начинал проседать только когда обработка коллизий начиналась, все в юньке делаю, после самописного движка, прям рай)

kvakvs
> 1. Создавай и удаляй безо всяких пулов. Пулы нужны когда у тебя десятки сотни в
> секунду. А в pvz такого нет.
> 2. Генерация должна быть случайной но по конфигу уровня. Первый уровень -
> случайно скажем 2 вида врагов. Десятый уровень скажем 10 видов врагов и трудные
> с шансом не менее 1 и не более 2 штук за игру, итд. Для начала можно конечно
> просто всё случайно, на будущее заскриптуешь и добавишь ограничения.
+, все примерно так и делаю

Правка: 17 авг. 2017 21:53

bretbasПостоялецwww18 авг. 20178:21#6
kvakvs, DenBraun, Разобрался:) Спасибо всем. В одном месте просто незакэшировался и вызывал GetComponent<>

Misanthrope,

танки забросил?

Ну я написал, что хотел...вот они:
Ссылка
надо двигаться дальше:)

Ребят, а что вообще скажете по поводу Plant vs Zombie?:) У меня есть враги, они по разному могут перемещаться по сцене, с разной скоростью и т.п; но в любом случае они двигаются влево. Я включаю анимацию хотьбы(состояние Walk), при ударе, я переключаю анимацию на смерть(состояние Die). Скрипт перемещения влево для врага-солдата:

public class SoldierEnemyMoveScript : EnemyMove
{
  public override void Update()
  {
    transform.Translate( Vector3.left * speed * Time.deltaTime );  
  }
}
Он наследует от EnemyMove, и все классы, которые перемещают врагов влево, должны наследоваться от EnemyMove.

Теперь, я написал вот такой класс:

public class EnemyAnimationDieState : StateMachineBehaviour
{
  override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
  {
    EnemyMove moveEnemy = animator.gameObject.GetComponentInParent<EnemyMove>();
    moveEnemy.enabled = false;
  }
}
Этот класс наследует от StateMachineBehaviour и такие скрипты можно вешать только на состояния(State) AnimationController'а. Я вешаю этот скрипт на все состояния анимации врагов Die, чтобы при входе в это состояние отключался компонент EnemyMove.
После этого, все враги, у которых есть передвижение влево, и это передвижение реализовано в классе-наследнике от EnemyMove, и есть состояние анимации Die(смерть), при входе в это состояние, перестанут двигаться влево.

Хотелось бы узнать, не запутанно ли это?:)

DenBraunПостоялецwww18 авг. 201711:34#7
bretbas
> Хотелось бы узнать, не запутанно ли это?:)
запутанно:) и у тебя будут проблемы при расшерении, когда количество состояний увеличится например, рекомендую почитать набор статей тут http://websketches.ru/blog/2d-igra-na-unity-podrobnoye-rukovodstvo-p1
должно помочь во многих начальных вопросах:)

Правка: 18 авг. 2017 11:35

bretbasПостоялецwww18 авг. 201719:24#8
DenBraun,
запутанно:) и у тебя будут проблемы при расшерении, когда количество состояний увеличится например

А в чем именно запутанность? В том, что лучше не стоит на состояния анимации вообще скрипты вешать? По идее, мне должно быть по барабану на расширяемость состояний - меня всегда волнует только состояние смерти и все.
рекомендую почитать набор статей тут

Читал это. Не особо много вынес от туда полезного...

/ Форум / Программирование игр / 2D графика и изометрия

2001—2017 © GameDev.ru — Разработка игр