Я делаю игру в Unity 2d, в которой, если вы находитесь в радиусе действия магнита, он вас притягивает. К игроку прикреплены 2 круговых коллайдера: один установлен как триггер, радиус которого может увеличиваться или уменьшаться, чтобы изменить диапазон магнита, а другой не настроен как триггер, чтобы позволить ему опираться на платформы. Я использую этот код: transform.Translate(3 * Time.deltaTime, 0, 0);
для перемещения игрока вперед. Движение игрока очень медленное, когда он касается земли, но более плавное, когда он находится в воздухе. После экспорта проекта движение камеры становится плавным, как шелк, поэтому я не думаю, что это связано с тем, что у меня медленный компьютер, потому что лагает только плеер. Может ли кто-нибудь помочь мне решить эту проблему? Также важно отметить, что при удалении любого кругового коллайдера движение становится плавным, поэтому это не проблема с кодом.
Я думаю, что основная проблема в том, что столкновение с землей вызывает проблемы с transform.Translate. Предлагаю некоторые изменения:
ИЗМЕНЕНИЕ ТРИГГЕРА Вы должны переместить столкновение с триггером на магните, это намного проще на будущее, если вы хотите добавить новые магниты, и вы также увидите приложение с моими изменениями.
ДОПОЛНИТЕЛЬНАЯ СИЛА Вместо того, чтобы делать transform.Translate, вы должны добавить силу, чтобы физика работала хорошо, и она не выглядела глючной! Ты должен сделать:
FixedUpdate()
{
rb.AddForce(Vector2.Distance(transform.position, player.position) * 2);
}
Мы используем FixedUpdate(), потому что он обеспечивает хорошую работу физики, а rb — это твердое тело игрока, а Vector2.distance может быть Vector2.right, это зависит от того, что вы себе представляете. Если вы работаете на расстоянии, сила будет увеличиваться, если вы подойдете ближе.
Извините, только что понял, что мое объяснение игры было не очень хорошим. На каждом уровне около 10 магнитов и один игрок. Игрок может притягивать или отталкивать магниты и использовать эту физику для прохождения уровня.
@RAW_tech, если у вас есть несколько магнитов, чем использовать AddForce для твердого тела игрока (вы можете получить к нему доступ, указав тег для игрока, а затем GameObject player = GameObject.FindGameObjectWithTag("Tag")), а затем поместите значение, подобное расстояние и поэтому, если вы приблизитесь к магнитам, сила будет более мощной, чем на границе
Мне очень жаль, я думаю, что я все еще не объяснил это правильно. Мой игрок постоянно движется вперед, как в Geometry Dash. За это отвечает скрипт transform.Translate(3 * Time.deltaTime, 0, 0);. Я думаю, что ваш первый ответ был правильным, но когда я попытался запустить его, он выдал мне ошибку: Аргумент 1: невозможно преобразовать из «плавающего» в «UnityEngine.Vector2».
написать rb.AddForce(новый Vector2(Mathf.Abs(transform.position.x - player.transform.position.x), Mathf.Abs(transform.position.y - player.transform.position.y) * value);
@RAW_tech, где «значение» - это просто число для изменения силы скорости, если оно общедоступно, вы можете сделать это с инспектором.
Давайте продолжим обсуждение в чате.
Спасибо. Мне было интересно, как бы я изменил диапазон игрока, если обнаружение столкновений на магнитах. Я сделал это изначально, но подумал, что было бы лучше, если бы я увеличил диапазон игрока, а не увеличивал диапазон всех магнитов. Будет то же самое, но проще. Еще раз большое спасибо, я дам вам знать, если это работает или нет.