2016-01-02 2 views
0

В моей игре есть оценка. Он также имеет несколько игровых объектов, которые при столкновении + = 10 на int score. Сценарий оценки привязан ко всем этим игровым объектам.Unity 3D останавливает физику на GameOver

Игровые объекты имеют силу, применяемую к ним случайным интервалом времени. Эта сила перемещает их вправо, а затем они останавливаются. У игрока есть таймфрейм, в котором они могут нажимать на объект. Если игрок щелкает вовремя, объект движется влево и останавливается событием столкновения, которое добавляет +10 к счету. Если этот таймфрейм истекает, игровой объект имеет силу, применяемую в левом направлении в любом случае, но это вызывает создание экземпляра игры над текстом.

Предположим, что срок действия клика истекает, прежде чем игрок сможет нажать. Игровой объект движется влево, и поскольку таймер, а не клик игроков, вызвал это движение, происходит GameOver, который является только экземпляром GameOver.

** Вот проблема. ** Поскольку сценарий оценки прикреплен ко всем этим игровым объектам, предположим, что объект 1 раз и вызывает игру, объекты с 2 по 10 находятся на одном таймере, как объект 1, и будут по-прежнему остаются нажатыми на тайм-аут. Кроме того, игрок все равно может щелкнуть по ним и продолжить игру после игры.

Мой вопрос в том, как я могу остановить эти игровые объекты от перемещения по игре?

Я не могу отключить коллайдеры или уничтожить твердое тело. Создание thrust = 0 на играх GameOver, но только после того, как остальные 9 игровых объектов тайм-аут и выбейте еще раз. Я не могу сделать int score = 0, потому что я хочу, чтобы итоговый результат отображался. Я не могу уничтожить счет по той же причине. Дежурная очередь ничего не делает, он снова запускает таймеры.

Мне просто нужен счет, чтобы остановить приращение на GameOver. Если бы я мог остановить физику на других 9 игровых объектах, это тоже было бы хорошо.

Надеюсь, я предоставил достаточно информации, чтобы получить обратную связь.

Благодаря

+0

, возможно, вы можете отправить «оценка сценария», который вызывает у вас проблему, так как вы не хотите, чтобы увеличить разрыв в счете, когда 'происходит GameOver'. – Ian

+0

Хорошо, я отправлю его, когда вернусь домой –

+0

Отлично, довольно сложно представить, с чем вы столкнулись, гораздо сложнее предложить какое-либо решение. – Ian

ответ

1

Вы можете остановить физику, установив шкалу времени 0:

Когда Timescale установлен на ноль игру в основном приостановлена, если все ваши функции частоты кадров независимой

FixedUpdate функции не будет вызываться, если значение timeScale установлено на ноль

http://docs.unity3d.com/ScriptReference/Time-timeScale.html

Других вариантов: - Можно установить объект физико- rigidbodies к [х] кинематическому, так что они остановятся - Иметь Ий GameOver-varible и установить его на истинный после тайм-аута, то внутри бигованных скриптов, если переменная GameOver верно, Dont добавить новый счет больше - Отключить скрипты скоринга, когда время истекло - есть глобальный ScoreManager скрипт, который добавляет/вычисляет оценку, вместо нескольких отдельных сценариев скоринга, легче обрабатывать, когда остановить/включить его

1

Если я правильно поймите, это должно остановить всю физику на объектах, которые вы хотите по всей оси:

gameobject.find("object").getcomponent<Rigidbody2D>().constraints = RigidbodyConstraints2D.FreezeAll; 

или

GameObjects[] ObjectsToFreeze = GameObject.FindGameObjectsWithTag("object") 

foreach(gameobject obj in objectsToFreeze) 

{ 

obj.getcomponent<Rigidbody2D>().constraints = RigidbodyConstraints2D.FreezeAll; 

} 
Смежные вопросы