Скрипт для платформы: using UnityEngine; public class movingPlatform : MonoBehaviour { [SerializeField] private float startMovingTime; // время движения private float movingTime; // оставшееся время движения [SerializeField] private float movingSpeed; // скорость платформы private int forward; // направление движения платформы void Start() { forward = 1; // при старте направляем платформу вперёд movingTime = startMovingTime; // приравниваем оставшее время движения начальному } private void FixedUpdate() { if (movingTime
Здравствуйте. Код сделал как на видео (Unity не ругался), платформа двигается как и положено, но при столкновении с игроком, игрок застревает и не может двигаться пока платформа не отъедет. Если запрыгнуть на платформу, то не двигается вместе с ней. Галочек на тригер нет. Подскажите пожалуйста из за чего подобное может быть.
То есть, если шарик запрашивает на платформу, то он не может двигаться пока не упадет? Если это так, то проверьте тэг платформы. Он должен быть "Ground"
Так же проверьте, правильно ли вы сделали платформу, делать нужно точно также, как на видео (надо создать сначала пустой объект, а потом уже в нём создать куб)
@@gedrolitgamedev По платформе и так прыгать могу, и 0:54 странно но тега такого в списке нет, только Respawn, Finish, Editor only, Mine camera, Player, Game controller, Add tag и всё. Иногда если на платформу запрыгнуть и в центре остановится, она продолжает двигаться, а игрок на месте стоит, после игрока начинает будто толкать влево(или вправо), и с платформы потом скидывает, и еще пару метров будто что то толкает, а платформа уже уехала.
А как сделать так, чтоб игрок (шар) останавливался, когда мы перестаём им управлять? А то он разгоняется и ещё долго катится до остановки. Либо его нужно тормозить нажимая на противоположные движению кнопки
Хм, да, хорошая идея, не знаю почему во время разработки не подумал 😑. Мне самому это не очень нравилось. //Добавим новую переменную для силы, которая будет замедлять шарик [SerializeField] private float decelerationForce; //В функции Update() добавим проверку, не двигаемся ли мы, и если не двигаемся, то персонаж начинает замедлятся private void Update() { // пишем это под всем прошлым кодом в функции if (movingVectorX = 0 && movingVectorZ = 0) { // Добавляем силу в противоположную сторону от движения rb.AddForce(-rb.velocity.normalized * decelerationForce); } } //Не знаю, работает ли это, у меня уже проекта с шариком нету. Попробуй, надеюсь сработает.
Переписал метод FixedUpdate вот таким макаром: private void FixedUpdate() // метод (вызывается каждый фиксированный кадр) { if ((movingVectorX == 0) && (movingVectorZ == 0)){ // проверяем, что никакие кнопки движения не нажаты rb.velocity = Vector3.MoveTowards(rb.velocity, Vector3.zero, movingSpeed * Time.deltaTime); // останавливаем игрока } else { rb.AddForce(movingSpeed * movingVectorX * Time.deltaTime, 0, movingSpeed * movingVectorZ * Time.deltaTime); // движение в нужную сторону } } При этом не нужно создавать переменную для остановки.
@@Олександр-ц3ж1ж Ты скрипт для движения закинул на объект платформы или на коллайдер? Просто он должен быть на материнском объекте (коллайдере). Создаёшь пустой объект с коллайдером и скриптом, а в нём создаёшь куб и растягиваешь по размеру коллайдера. Либо это как-то связана с компонентом animation.
Скрипт для платформы:
using UnityEngine;
public class movingPlatform : MonoBehaviour
{
[SerializeField] private float startMovingTime; // время движения
private float movingTime; // оставшееся время движения
[SerializeField] private float movingSpeed; // скорость платформы
private int forward; // направление движения платформы
void Start()
{
forward = 1; // при старте направляем платформу вперёд
movingTime = startMovingTime; // приравниваем оставшее время движения начальному
}
private void FixedUpdate() {
if (movingTime
Здравствуйте. Код сделал как на видео (Unity не ругался), платформа двигается как и положено, но при столкновении с игроком, игрок застревает и не может двигаться пока платформа не отъедет. Если запрыгнуть на платформу, то не двигается вместе с ней. Галочек на тригер нет.
Подскажите пожалуйста из за чего подобное может быть.
То есть, если шарик запрашивает на платформу, то он не может двигаться пока не упадет? Если это так, то проверьте тэг платформы. Он должен быть "Ground"
0:54 (тайм код). Проверьте это.
Так же проверьте, правильно ли вы сделали платформу, делать нужно точно также, как на видео (надо создать сначала пустой объект, а потом уже в нём создать куб)
Напишите, если не помогло, но думаю это должно помочь
@@gedrolitgamedev По платформе и так прыгать могу, и 0:54 странно но тега такого в списке нет, только Respawn, Finish, Editor only, Mine camera, Player, Game controller, Add tag и всё.
Иногда если на платформу запрыгнуть и в центре остановится, она продолжает двигаться, а игрок на месте стоит, после игрока начинает будто толкать влево(или вправо), и с платформы потом скидывает, и еще пару метров будто что то толкает, а платформа уже уехала.
А как сделать так, чтоб игрок (шар) останавливался, когда мы перестаём им управлять? А то он разгоняется и ещё долго катится до остановки. Либо его нужно тормозить нажимая на противоположные движению кнопки
Хм, да, хорошая идея, не знаю почему во время разработки не подумал 😑. Мне самому это не очень нравилось.
//Добавим новую переменную для силы, которая будет замедлять шарик
[SerializeField] private float decelerationForce;
//В функции Update() добавим проверку, не двигаемся ли мы, и если не двигаемся, то персонаж начинает замедлятся
private void Update()
{
// пишем это под всем прошлым кодом в функции
if (movingVectorX = 0 && movingVectorZ = 0)
{
// Добавляем силу в противоположную сторону от движения
rb.AddForce(-rb.velocity.normalized * decelerationForce);
}
}
//Не знаю, работает ли это, у меня уже проекта с шариком нету. Попробуй, надеюсь сработает.
Пасип! Уже завтра попробую))
@@sergejunk Только я не знаю, что будет если шарик будет подать, по сути он будет заселяться. Ну ты как попробуешь - напишешь.
Переписал метод FixedUpdate вот таким макаром:
private void FixedUpdate() // метод (вызывается каждый фиксированный кадр)
{
if ((movingVectorX == 0) && (movingVectorZ == 0)){ // проверяем, что никакие кнопки движения не нажаты
rb.velocity = Vector3.MoveTowards(rb.velocity, Vector3.zero, movingSpeed * Time.deltaTime); // останавливаем игрока
} else {
rb.AddForce(movingSpeed * movingVectorX * Time.deltaTime, 0, movingSpeed * movingVectorZ * Time.deltaTime); // движение в нужную сторону
}
}
При этом не нужно создавать переменную для остановки.
Блин. При падении шар начинает меееедленно лпускаться и зависать)) По ходу нужно ещё проверку на местоположение сделать))
А что делать если у меня стоит на об'єкте animation и игрок просто падает з платформи
Проверь коллайдеры у платформы и объекта, чтобы не было галочки на Trigger
@@gedrolitgamedev а без галочки триггер он просто стои на месте а платформа едет
@@Олександр-ц3ж1ж Ты скрипт для движения закинул на объект платформы или на коллайдер? Просто он должен быть на материнском объекте (коллайдере).
Создаёшь пустой объект с коллайдером и скриптом, а в нём создаёшь куб и растягиваешь по размеру коллайдера.
Либо это как-то связана с компонентом animation.