Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском.
Закрыт 1 год назад.
Нужно при соприкосновении заморозить движение объектов.
С заморозкой движения одного объекта я бы и сам справился , но вот есть ли возможность заморозить движения всех объектов , но не их скрипты + изменение цвета с анимацией также должны работать .
Думал над Time.timeScale = 0 , но не уверен будет ли работать ,то что описано выше.
Если же нет легкого способа так сделать , то лучше уж просто заморозить движение объекта.
Будет ли работать Time.timeScale = 0 так как нужно , если же нет то что стоит здесь сделать?
Решение:
1. в скрипте, который висит на объекте, что останавливает все Move-объекты (объекты которые двигаются), объявите событие:
public static event OnCollisionEvent = delegate { };
("static" позволит обращаться напрямую к этому событию из любого места)
2. в Move, где-нибудь сделайте метод, который будет содержать логику "остановки" данного объекта
3. в том же Move, где-нибудь в методе Start() вы должны будете подписать ваш Move-объект на глобальное событие остановки. Сделать это можно с помощью следующей строчки:
НазваниеВашегоСкрипта.OnCollisionEvent += НазваниеВашегоМетодаОстановки;
Таким образом, на этот момент, все ваши Move-объекты с момента отработки метода Start будут "слушать" и ждать события OnCollisionEvent
следовательно, вам осталось только вовремя вызвать это событие - а вместе с ним и всех "подписчиков", который следят за событием
4. вызываем событие в том самом скрипте, в методе столкновения (OnCollisionEnter2D) так:
OnCollisionEvent();
Если будут непонятки с синтаксисом, т.е. с самим написанием кода - погуглите про "события C#" или, например, тут простым языком описано и показано - https://metanit.com/sharp/tutorial/3.14.php.
Ответ был дан пользователем Mikhail Deyman.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей