2017-02-14 15 views
0

Если, например, у меня есть игра, состоящая всего из одной сцены, и в этой сцене я делаю выбор пользователем между обычным режимом воспроизведения или режимом учебного воспроизведения. В игре есть 4 разных объекта: мяч, 4 квадрата и квадратный контроллер. В режиме обучения я хочу предоставить пользователю стрелку с указателем при приостановке игры и продолжить после нажатия пользователем объекта, на который указывает. Должен ли я сделать сценарий для обычного режима, а другой для режима учебника, сделать один скрипт и проверить, является ли логическое значение boolean истинным или ложным в каждой функции (логическое значение должно быть истинным, если пользователь нажал кнопку учебника) или сделать какой-то Предварительная обработка?Как работать с двумя игровыми режимами в одном скрипте?

В squarescript, например:

void OnCollisionEnter2D() { 
if (isTutorial) { 
    PauseGame(); 
    arrow.position = GetRelativePosition(); 
    arrow.setActive(true); 
} else { 
    if (canCollide) { 
    score++; 
    } else { 
    GameOver(); 
    } 
} 

В ballscript:

void OnMouseDown() { 
    if (!isTutorial) { 
     return; 
    } 

    ResumeGame(); 
} 

ответ

1

Структурируя такого поведения внутри, если заявления, это делает код трудно понять и работать. Представьте себе, как это будет выглядеть, если вы решите, что хотите, чтобы один из квадратов увеличил счет игроков и показал стрелку учебника.

Разделить поведение на отдельные объекты. Для площади это может быть что-то вроде TutorialCollisionHandler, ScoreCollisionHandler и HazardCollisionHandler. Затем вы можете создавать разные квадраты, просто изменяя, какие обработчики столкновений добавляются к ним, вам даже не нужно писать код!

Теперь в зависимости от того, в каком режиме пользователь выбирает, вы можете просто использовать другое сочетание квадратов. Тот же принцип можно использовать с другим поведением в учебнике или игре.

+0

Итак, TutorialCollisionHandler, ScoreCollisionHandler и HazardCollisionHandler - это отдельные скрипты, которые могут быть добавлены кодом? – user24028

+0

MonoBehaviours, которые вы можете добавить в Square GameObject, как коллайдер или жесткий диск и т. Д. – CaTs

3

Мы ничего не знаем о вашей игре, так что трудно ответить. Но как правило: чем меньше вы должны печатать, тем лучше. Также подумайте, что произойдет, если вам нужно добавить новые функции в игру, вам нужно будет вернуться и сменить тонны вашего кода? Если это так, вы, скорее всего, не пишите good code.

В попытке дать конкретный ответ, который я бы сказал, вы должны сделать наследование, создать класс Level и сделать вложенные классы Tutorial и FreePlay или подобные, которые наследуются от Level.

Затем вы можете добавить все «общие» функции в базовом классе и конкретные вещи, идет в суб классы

+0

Моя игра довольно простая, содержит 4 разных типа объектов и около 6 сценариев. Мне очень нужно, чтобы скрипты действовали по-разному, если они находятся в режиме обучения или в обычном режиме. – user24028

+0

ОК, так что поставьте его в переменную, в каком режиме игра есть, а затем в зависимости от игрового режима вы можете делать разные вещи. Как говорится в этом ответе, вы не предоставляете много, и трудно понять, чего вы хотите. – jdmdevdotnet

+0

Я добавил дополнительную информацию, сообщите мне о какой-либо дополнительной информации, которая вам может понадобиться. – user24028