Как зафризить объект в unity
Перейти к содержимому

Как зафризить объект в unity

  • автор:

Заморозка движения объектов в unity3d [закрыт]

Вопросы с просьбами помочь с отладкой («почему этот код не работает?») должны включать желаемое поведение, конкретную проблему или ошибку и минимальный код для её воспроизведения прямо в вопросе. Вопросы без явного описания проблемы бесполезны для остальных посетителей. См. Как создать минимальный, самодостаточный и воспроизводимый пример.

Закрыт 4 года назад .

Нужно при соприкосновении заморозить движение объектов.
С заморозкой движения одного объекта я бы и сам справился , но вот есть ли возможность заморозить движения всех объектов , но не их скрипты + изменение цвета с анимацией также должны работать . Думал над Time.timeScale = 0 , но не уверен будет ли работать ,то что описано выше.
Если же нет легкого способа так сделать , то лучше уж просто заморозить движение объекта. Будет ли работать Time.timeScale = 0 так как нужно , если же нет то что стоит здесь сделать?

Отслеживать
задан 3 июн 2019 в 16:19
Merry_Train Merry_Train
269 6 6 серебряных знаков 25 25 бронзовых знаков
Проверил, Time.timeScale = 0 не работает так как нужно.
3 июн 2019 в 16:29
Попробуйте Time.fixedDeltaTime .
3 июн 2019 в 17:17
У rigidbody есть набор атрибутов для заморозки положения и вращения
3 июн 2019 в 17:31
@Stranger in the Q А если у объекта нету rigidbody , а только collider.
3 июн 2019 в 17:52

@Veudd вы ищете объект на сцене ( GameObject.Find )? если так, то, мне кажется, это неверно и есть гораздо более лучший способ «поиска»

3 июн 2019 в 18:09

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Решение:
1. в скрипте, который висит на объекте, что останавливает все Move-объекты (объекты которые двигаются), объявите событие:

public static event OnCollisionEvent = delegate < >; 

(«static» позволит обращаться напрямую к этому событию из любого места)
2. в Move, где-нибудь сделайте метод, который будет содержать логику «остановки» данного объекта
3. в том же Move, где-нибудь в методе Start() вы должны будете подписать ваш Move-объект на глобальное событие остановки. Сделать это можно с помощью следующей строчки:

НазваниеВашегоСкрипта.OnCollisionEvent += НазваниеВашегоМетодаОстановки; 

Таким образом, на этот момент, все ваши Move-объекты с момента отработки метода Start будут «слушать» и ждать события OnCollisionEvent
следовательно, вам осталось только вовремя вызвать это событие — а вместе с ним и всех «подписчиков», который следят за событием
4. вызываем событие в том самом скрипте, в методе столкновения (OnCollisionEnter2D) так:

OnCollisionEvent(); 

как мне остановить время в юнити для всех объектов, скриптов и т.д. кроме игрока ?

как мне остановить время в юнити для всех объектов, скриптов и т.д. кроме игрока ?

#1
21:53, 14 ноя 2021

А какое это имеет отношение к физике?

#2
2:01, 15 ноя 2021
#3
7:36, 15 ноя 2021

Если ты используешь для игрока и замедляемых объектов юнитёвую физику (rigidbody с массой, силы, джоинты и тд), то никак.
Если физики кроме коллайдеров нет, то делаешь игрока работающим на unscaledTime и меняешь Time.timeScale

#4
17:42, 16 ноя 2021

meekobold
игрок работает на физике — остальные объекты нет

#5
21:09, 16 ноя 2021

meekobold
а можно использовать unscaledTime +Time.timeScale если игрок завязан на Rigidbody2D??

#6
23:06, 16 ноя 2021

Scarabus
а оно с transform.Translate() работает ?
я в туториале просто не нашел

#7
1:35, 17 ноя 2021

EmDan
> а оно с transform.Translate() работает ?
Не помню. Даже если нет, дописать не сложно.

#8
6:56, 17 ноя 2021

EmDan
Нет, RigidBody работают только в scaled time

#9
12:26, 17 ноя 2021

Scarabus
каким образом ?я не понял

#10
12:30, 17 ноя 2021

using System.Collections; using System.Collections.Generic; using UnityEngine; using Chronos; public class BulletScript : BaseBehaivior < public GameObject explosionEffect; public LayerMask collisionMask; [HideInInspector] public float normalSpeed; public float speed; public float lifeTime; Rigidbody2D rb; Vector3 targetVector; void Start() < rb = GetComponent(); normalSpeed = speed; Invoke("Explosion", lifeTime); > // Update is called once per frame void Update() < transform.Translate(Vector2.right * speed * Time.deltaTime); Ray2D ray = new Ray2D(transform.position, transform.right); RaycastHit2D hit = Physics2D.Raycast(ray.origin, ray.direction, Time.deltaTime * speed + .2f , collisionMask); if (hit.collider != null)< if (hit.collider.CompareTag("Player")) < Debug.Log("damaged!!"); Explosion(); //do damage stuff >Vector2 reflectDir = Vector2.Reflect(ray.direction, hit.normal); float rotation = Mathf.Atan2(reflectDir.y, reflectDir.x) * Mathf.Rad2Deg; transform.eulerAngles = new Vector3(0, 0, rotation); > > void Explosion() < GameObject effect = Instantiate(explosionEffect, transform.position, Quaternion.identity); Destroy(effect, 1f); Destroy(gameObject); >>

#11
16:32, 17 ноя 2021

EmDan
> каким образом ?
Посмотри как написан Timeline.

Как временно остановить анимацию?

Т.е. анимимация 4-х объектов. Мне нужно временно «заморозить» два из них для поднастройки двух других.
Как это можно сделать?

Терен Тамабрахама
Мастер

Рейтинг 199

что значит заморозить.
пчела махает руками например и сделать так чтоб не махала и при этом поанимировать усики,
а потом чтоб опять махала но уже с санемироваными усиками??

что вы делаете?
лучше конкретно задачу описать,
ато придумали что то замарозку какую то, а вдруг это вообще не нужно и проще можно сделать совсем иначе,,

Зелич
Пользователь сайта

Окно c шторой. Штору уже проанимировал. Сейчас понадобилось открытию окна сделать анимацию.
Мне надо:
«Обездвижить» штору, и поработать с окном. НО чтоб в любой момент можно было опять включить анимацию шторый

Терен Тамабрахама
Мастер

Рейтинг 199

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

а как у вас штора анимированна?
там сейчас массФХ ом можно симуляции прикольно тканей делать, и сделать так чтоб с открывающимся окном взаимодействовало

Арт.К
Знаток

Рейтинг 65
Окно c шторой.

Трудно понять по этому объяснению цель, то есть зачем анимацию шторы останавливать. Вы ее запекли? Тем не менее один из простых способов (после запекания) — поинт кеш и затем в режиме плейбек граф можно анимировать по кадрам, например из 50 кадров анимации сначала первые десять, а затем через нужный промежуток остальные, да все что надо в общем, даже местами поменять кадры и перетасовать., то есть обычная анимация ключей, где каждый кадр ключ и его можно переместить, то есть анимацию растянуть, ускорить, остановить и т.д.

Арт.К
Знаток

Рейтинг 65

Или Вы не запекли анимацию шторы, не знаете что это такое и думаете как симуляцию, типа, заморозить? Тогда многое еще надо узнать, но в данном случае хватит просто запечь симуляцию «бэйк».

Unity 3D Проникновение ) Заморозка всех осей до входа во внутрь коллайдера

на камере бокс колайдер
я подлетаю к объекту и ударяюсь, кубики разлетаются
но до этого момента если подлететь и присмотреться то виден микрошов между стыками.
Почему так происходит? всё из-за Rigidbody. если его убрать то всё отлично но мне нужен именно Rigidbody.

Что требуется от вас? мне нужен скрипт который заморозит все видимые и невидимые оси данного кубика, до момента столкновения коллайдера камеры с коллайдером кубика
я думаю это решит мою проблему

(Примечание данный баг работает не со всеми кубиками) и еще одна «фига» если выделить кубик в редакторе и запустить игру то можно увидеть как его положение меняется из 0 на 0,00123123 условно рандомно
как такое возможно? кто-то щас скажет так ведь колайдеры давят друг на друга не соглашусь! со второй стороны данной модели так же не произошло.

Голосование за лучший ответ

Они не давят друг на друга. Т. е обычно давят, но в твоём случае — выталкивают. Потому что есть offsetCollision, который по умолчанию равен 0.01. Причём да, поскольку расстояние маленькое, выталкнуться может только один.
Заморозить оси:
GetComponent < RigidBody >().constraints = RigidbodyConstraints.FreezeAll;
Разморозить:
void OnCollisionEnter(Collision collision) GetComponent < RigidBody >().constraints = RigidbodyConstraints.None;
>

Intel Pentium III KatmaiОракул (74046) 3 года назад

Чел, ты же хорошо разбираешься в Unity?
Поможешь придумать алгоритм навигации юнита по карте?
Если играл в EU4, CK2 или HOI4, поймёшь, как выглядит моя игра.
Сцена выглядит так:
На плоскости XY лежат страны — спрайты с 2D коллайдерами.
На них стоят 3D юниты. Юнитам надо как-то бегать по XY только по разрешённым им странам и обходить неразрешённые страны.
NavMesh Agent не работает в 2D, да и помечать обходимые и разрешённые страны никак не получится, поэтому надо свой алгоритм.
Как работает алгоритм А* я ваще не вдупляю.

XttxМыслитель (8073) 3 года назад

Сложно он работает. Pathfinding не получится вот так быстро написать в комментарии. Если честно, я бы всё таки копал в сторону navMeshgent (не работает в 2д, так можно невидимый плейн добавить. Почему не получится страны помечать я не понял. Их всё равно надо будет как-то помечать, даже если написать свои скрипты). Ну или смотреть готовые решения в ассетсторе.

Анчи КудриУченик (99) 3 года назад

Анчи КудриУченик (99) 3 года назад

Анчи КудриУченик (99) 3 года назад

Анчи КудриУченик (99) 3 года назад

Друзья благодарю за ответы, но оказывается проблема крылась в sketchup( когда я там собирал из одной плоскости много маленьких сгруппированных получилось что-то типо неправильной привязки оси на этих группах и их компонентах, следствие чего вот такой артефакт, но я любопытный заморочился, за 5-10 минут сделал из кубика такую стенку только в юнити, через префабы, оказалось коллайдеры вовсе спокойные в состоянии без чекбокса use gravity

Анчи КудриУченик (99) 3 года назад

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

Анчи КудриУченик (99) 3 года назад

Раз тут хорошие умные люди проходят мимо, может кто поможет? с обучением, а именно: нужны точные формулировки, я строю блок схемы визуальное представление о скриптинге и работе в Unity которые послужат как учебник в первую очередь для меня, а в будущем и для других, главное на этапе обучения законспектировать с какими проблема сталкиваешся чтоб потом идеальный туториал вышел, хотя бы подскажите где копать, есть ли ресурс какой-то? которой в идеале обучает, а не так ак бы как

XttxМыслитель (8073) 3 года назад

Материалы есть для новичков и для не новичков :). На каком уровне ты знаком с C# в данный момент?
Блок схемы. ну, такое. сильно сомневаюсь, что это хоть как-то поможет с юнити. Это не маткад, тут сложные алгоритмы редко попадаются. Хотя и бывают — лабиринт сгенерить, pathfinding тот же. Но это не часто. А вот тригонометрия да, может пригодится.

В любом случае, начинать программить для юнити лучше всего без юнити. Серьёзно, легче выучить просто чистый C#, и уже потом лезть в юнити. Там всего лишь кучка API добавляется, ничего особенного. А вот информации по программированию в среде unity, на порядок меньше чем просто для C#. На русском, так вообще не видел ничего адекватного.

Анчи КудриУченик (99) 3 года назад

Вот скрин я потратил пару часов чтоб узнать всего лишь ничего всё что я узнал из форумов это то что такое переменная

Анчи КудриУченик (99) 3 года назад

для себя конспектировал это конечно всё с ошибками я уверен но таким методом я могу зайти в любой момент и найти то что мне нужно

Анчи КудриУченик (99) 3 года назад

а вот вопрос к знатокам мне нужна диаграмма её заголовок последовательные составляющие написания скрипта в юнити

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

я не просто заглядываю к ютюбером я смотю и на документации по чистому c# но хочется всё же както это всё практиковать сразу в юнити )))

Анчи КудриУченик (99) 3 года назад

нам еще в школе пытались преподать с++
мы как те бараны, сидели и херней страдали, ладно если бы это было в юнити, то я бы пережил но мы реально делали бесполезные вещи делали, учитель тогда преподавал как обычные уроки так и уроки вне программы, олимпиады всё такое,
было пару челов которым в кайф это было, а я вот так и не пошел туда потому как я просто не понимал, как мне пригодится, складывание чисел и прочее извращение с консолью, в один момент, я подошел к учителю и спросил, возможно ли сейчас обучаться на юнити, там с# он что-то там пробормотал точно уже и не вспомнить, и всё забылось, я понял что с++ мне нафиг не нужен, с таким мотивирующим учителем, а про юнити пора забыть, у меня тогда ни то что пк не было, я даже интернет в глаза не видел, пука на тот момент умер)))

Анчи КудриУченик (99) 3 года назад

окончив школу, и поработав не на одной работе, понял как трудно зарабатываются деньги, но желание работать в юнити меня не покидало, на тот момент я уже купил пк, потом пришла затяжная полоса онлайн компьютерных игр, длиною в 2 года, стриминг и прочая туфта, и в итоге депресуха, четкое осознание того, что я серое авно, которое нихрена не добилось, точнее добилось, музыку научился писать, и задротом стал, а вот программировать под юнити так и не начал даже не пробовал

Анчи КудриУченик (99) 3 года назад

буду очень благодарен если кто что подскажет, и посоветует
мой твич канал www.twitch.tv/akaziwa
в общем, тут ничего интересного
(Я обычный деградант пытающийся что-то сделать)
а когда я что-то делаю, то запускаю трансляцию, заходите, пишите, ругайтесь, я всем рад)

XttxМыслитель (8073) 3 года назад

Обычно, новичкам, которые хотят C# я рекомендую вот это: https:// vk.com/scriptobot это обучающая игра. Даёт базу — переменные, типы данных, массивы, и всё вот это. Но главное — даёт понимание, как оно всё вообще работает. Насколько это уместно в твоём случае — не знаю. Решать тебе.
Второй вариант: https:// metanit.com/sharp/tutorial/ — это достаточно суровый учебник. Там всё расписано досконально. Но, как мне кажется, что бы начать учится по нему, какие-то основы уже нужно знать, хотя он и учит всему с нуля, но сложно будет понимать.

XttxМыслитель (8073) 3 года назад

«Первым делом мы подключаем библиотеки. «, вторым — объявляем класс. Третьим — функции и методы в нём. Но это всё очень условно, на самом деле, нельзя написать инструкцию «как за 11 простых шагов написать call of duty». Тебе, конечно, виднее, как лучше материал усваивается, но я бы отказался от всех этих блок схем и диаграмм. Не всегда они работают, не всегда их вообще можно сделать. А польза от них сомнительная. :/

XttxМыслитель (8073) 3 года назад
На стрим попробую заглянуть. Если по времени совпадёт. Знать бы ещё твоё расписание.
Анчи КудриУченик (99) 3 года назад

Благодарю за инфу очень полезная, а вот стримить некоторый период не смогу, стройка в общем, думаю подтянусь немного в плане понимания основ, и буду дальше транслировать

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *