Предпочтительный подход к реализации игровой паузы - PullRequest
0 голосов
/ 13 января 2019

Какой хороший способ реализовать паузу в игре?

Я могу придумать эти две идеи:

  1. Использование FindObjectsOfType<IPausable>()
  2. Имея действие паузы в классе Pauser и получая каждый объект, который может быть приостановлен, подпишитесь на него

Я понимаю, что оба подхода будут работать нормально, но я не знаю, к какому из них следует стремиться.

Спасибо

1 Ответ

0 голосов
/ 13 января 2019

Я думаю, что интерфейсы могли бы быть хорошим решением здесь.

Вы можете создать интерфейс IPauseable, и любая вещь, которую вы хотите приостановить, реализует интерфейс IPausable таким образом, что каждый объект, подписанный вами на PauseManager или тому подобное, может обрабатываться одинаково.

public interface IPausable{
  // interface members
  void Pause();
  bool isPaused();
  void UnPause();
 }

Затем вы можете перебирать список подписанных объектов и делать что-то вроде (псевдокод не проверен, чтобы показать идею)

   for (int i = 0; i< subScribedComponents.Length; i++)
   {
        if (subScribedComponents[i] is IPausable)
       {
            IPausable pauseInterface = subScribedComponents[i] as IPausable;

            pauseInterface .Pause();
        }
    }

Хорошая вещь в этом - то, что любой класс, который реализует IPausable, должен предоставить, как они будут сами выполнять эти методы, и все они могут обрабатываться одинаково, будь то символьный или экранный таймер, если он реализует интерфейс, который вы знаете, в какой-то момент предоставил способ приостановить этот конкретный объект.

Чтобы напрямую ответить на исходный вопрос, я бы проголосовал за метод подписчик / издатель (2) , потому что при первом варианте вы будете зацикливаться на каждом объекте, некоторые вообще не будут приостанавливаться, если вы выберете второй На маршруте вы будете работать только с вещами, которые хотите приостановить, и не повторять каждый объект на сцене.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...