Четверг, 14 Ноября 2024, 07:50

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
(Unity) (2d) Spawn противников по карте.
gamedevloginДата: Воскресенье, 24 Июня 2018, 13:46 | Сообщение # 1
был не раз
Сейчас нет на сайте
Создается 2d игра под android.

Нужен совет и пару ответов.

1) Что более эффективно, спавнить врагов по мере прохождения карты главным персонажем(т.е персонаж прошел какую-нибудь часть карты и чуть дальше(за пределами камеры) спавнятся противники и так до конца уровня) или заранее расставить всех врагов по карте. (Помните что игра под мобильные устройства)

Просто я начал задумываться, такие функции как Instantiate() и Destroy() медлительны и вызов их во время игры(т.е спавн противников) влечет за собой упадок fps (Опять же, игра создается под мобильные устройства, ресурсы ограничены).

А если расставить заранее, то , как я прочитал на одном форуме, объекты действуют за пределами камеры и также сжирают ценные ресурсы. И там советовали отключать все, что находится вне камеры.

У так называемых "противников" есть компонент Rigidbody2D, Animator, несколько box collider и скрипт, который собственно и контролирует AI. Этот скрипт содержит ссылку на объект на сцене(например, на главного персонажа(чтобы вычислять свое положение относительно его)). И проблема в том, что если из "противников" делать prefab'ы, то ссылка на главного персонажа теряется.Заранее спасибо.
InsaneSystemsДата: Воскресенье, 24 Июня 2018, 13:56 | Сообщение # 2
участник
Сейчас нет на сайте
gamedevlogin, изучите Object Pooling. Является решением вашей проблемы. Если "некогда", то просто ввключайте объекты по мере прохождения уровня.
drcrackДата: Понедельник, 25 Июня 2018, 00:04 | Сообщение # 3
старожил
Сейчас нет на сайте
Цитата
Этот скрипт содержит ссылку на объект на сцене(например, на главного персонажа(чтобы вычислять свое положение относительно его)). И проблема в том, что если из "противников" делать prefab'ы, то ссылка на главного персонажа теряется.Заранее спасибо.

в скрипте контроллера игрока:
Код
public class Player: MonoBehaviour {

  public static Player player;

  void Start(){
    player = this;
  }
}


и ссылка вообще не нужна, она теперь глобальная:

Код
public class EnemyAI: MonoBehaviour {
  void Update(){

    if(Player.player == null) return; // игрока нет, например, умер

    Debug.Log("Позиция игрока: " + player.transform.position.ToString());

  }
}


Сообщение отредактировал drcrack - Понедельник, 25 Июня 2018, 00:15
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг