2 круговых коллайдера, вызывающих отставание в движении игрока

Я делаю игру в Unity 2d, в которой, если вы находитесь в радиусе действия магнита, он вас притягивает. К игроку прикреплены 2 круговых коллайдера: один установлен как триггер, радиус которого может увеличиваться или уменьшаться, чтобы изменить диапазон магнита, а другой не настроен как триггер, чтобы позволить ему опираться на платформы. Я использую этот код: transform.Translate(3 * Time.deltaTime, 0, 0); для перемещения игрока вперед. Движение игрока очень медленное, когда он касается земли, но более плавное, когда он находится в воздухе. После экспорта проекта движение камеры становится плавным, как шелк, поэтому я не думаю, что это связано с тем, что у меня медленный компьютер, потому что лагает только плеер. Может ли кто-нибудь помочь мне решить эту проблему? Также важно отметить, что при удалении любого кругового коллайдера движение становится плавным, поэтому это не проблема с кодом.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
318
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я думаю, что основная проблема в том, что столкновение с землей вызывает проблемы с transform.Translate. Предлагаю некоторые изменения:

ИЗМЕНЕНИЕ ТРИГГЕРА Вы должны переместить столкновение с триггером на магните, это намного проще на будущее, если вы хотите добавить новые магниты, и вы также увидите приложение с моими изменениями.

ДОПОЛНИТЕЛЬНАЯ СИЛА Вместо того, чтобы делать transform.Translate, вы должны добавить силу, чтобы физика работала хорошо, и она не выглядела глючной! Ты должен сделать:

FixedUpdate()
{
   rb.AddForce(Vector2.Distance(transform.position, player.position) * 2);
   
}

Мы используем FixedUpdate(), потому что он обеспечивает хорошую работу физики, а rb — это твердое тело игрока, а Vector2.distance может быть Vector2.right, это зависит от того, что вы себе представляете. Если вы работаете на расстоянии, сила будет увеличиваться, если вы подойдете ближе.

Спасибо. Мне было интересно, как бы я изменил диапазон игрока, если обнаружение столкновений на магнитах. Я сделал это изначально, но подумал, что было бы лучше, если бы я увеличил диапазон игрока, а не увеличивал диапазон всех магнитов. Будет то же самое, но проще. Еще раз большое спасибо, я дам вам знать, если это работает или нет.

RAW_tech 11.12.2020 10:51

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

RAW_tech 11.12.2020 10:58

@RAW_tech, если у вас есть несколько магнитов, чем использовать AddForce для твердого тела игрока (вы можете получить к нему доступ, указав тег для игрока, а затем GameObject player = GameObject.FindGameObjectWithTag("Tag")), а затем поместите значение, подобное расстояние и поэтому, если вы приблизитесь к магнитам, сила будет более мощной, чем на границе

Leoverload 11.12.2020 11:04

Мне очень жаль, я думаю, что я все еще не объяснил это правильно. Мой игрок постоянно движется вперед, как в Geometry Dash. За это отвечает скрипт transform.Translate(3 * Time.deltaTime, 0, 0);. Я думаю, что ваш первый ответ был правильным, но когда я попытался запустить его, он выдал мне ошибку: Аргумент 1: невозможно преобразовать из «плавающего» в «UnityEngine.Vector2».

RAW_tech 11.12.2020 11:20

написать rb.AddForce(новый Vector2(Mathf.Abs(transform.position.x - player.transform.position.x), Mathf.Abs(transform.position.y - player.transform.position.y) * value);

Leoverload 11.12.2020 11:36

@RAW_tech, где «значение» - это просто число для изменения силы скорости, если оно общедоступно, вы можете сделать это с инспектором.

Leoverload 11.12.2020 11:37

Давайте продолжим обсуждение в чате.

RAW_tech 11.12.2020 11:41

Другие вопросы по теме