Как сделать игру на Unity Ballance #5 [GameDev] Движение платформы, движение игрока на платформе

แชร์
ฝัง
  • เผยแพร่เมื่อ 23 ธ.ค. 2024

ความคิดเห็น • 28

  • @sergejunk
    @sergejunk ปีที่แล้ว +4

    Скрипт для платформы:
    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

  • @Ranmakgames
    @Ranmakgames ปีที่แล้ว +1

    Здравствуйте. Код сделал как на видео (Unity не ругался), платформа двигается как и положено, но при столкновении с игроком, игрок застревает и не может двигаться пока платформа не отъедет. Если запрыгнуть на платформу, то не двигается вместе с ней. Галочек на тригер нет.
    Подскажите пожалуйста из за чего подобное может быть.

    • @gedrolitgamedev
      @gedrolitgamedev  ปีที่แล้ว

      То есть, если шарик запрашивает на платформу, то он не может двигаться пока не упадет? Если это так, то проверьте тэг платформы. Он должен быть "Ground"

    • @gedrolitgamedev
      @gedrolitgamedev  ปีที่แล้ว

      0:54 (тайм код). Проверьте это.

    • @gedrolitgamedev
      @gedrolitgamedev  ปีที่แล้ว

      Так же проверьте, правильно ли вы сделали платформу, делать нужно точно также, как на видео (надо создать сначала пустой объект, а потом уже в нём создать куб)

    • @gedrolitgamedev
      @gedrolitgamedev  ปีที่แล้ว

      Напишите, если не помогло, но думаю это должно помочь

    • @Ranmakgames
      @Ranmakgames ปีที่แล้ว +1

      @@gedrolitgamedev По платформе и так прыгать могу, и 0:54 странно но тега такого в списке нет, только Respawn, Finish, Editor only, Mine camera, Player, Game controller, Add tag и всё.
      Иногда если на платформу запрыгнуть и в центре остановится, она продолжает двигаться, а игрок на месте стоит, после игрока начинает будто толкать влево(или вправо), и с платформы потом скидывает, и еще пару метров будто что то толкает, а платформа уже уехала.

  • @sergejunk
    @sergejunk ปีที่แล้ว +1

    А как сделать так, чтоб игрок (шар) останавливался, когда мы перестаём им управлять? А то он разгоняется и ещё долго катится до остановки. Либо его нужно тормозить нажимая на противоположные движению кнопки

    • @gedrolitgamedev
      @gedrolitgamedev  ปีที่แล้ว

      Хм, да, хорошая идея, не знаю почему во время разработки не подумал 😑. Мне самому это не очень нравилось.
      //Добавим новую переменную для силы, которая будет замедлять шарик
      [SerializeField] private float decelerationForce;
      //В функции Update() добавим проверку, не двигаемся ли мы, и если не двигаемся, то персонаж начинает замедлятся
      private void Update()
      {
      // пишем это под всем прошлым кодом в функции
      if (movingVectorX = 0 && movingVectorZ = 0)
      {
      // Добавляем силу в противоположную сторону от движения
      rb.AddForce(-rb.velocity.normalized * decelerationForce);
      }
      }
      //Не знаю, работает ли это, у меня уже проекта с шариком нету. Попробуй, надеюсь сработает.

    • @sergejunk
      @sergejunk ปีที่แล้ว +1

      Пасип! Уже завтра попробую))

    • @gedrolitgamedev
      @gedrolitgamedev  ปีที่แล้ว

      @@sergejunk Только я не знаю, что будет если шарик будет подать, по сути он будет заселяться. Ну ты как попробуешь - напишешь.

    • @sergejunk
      @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); // движение в нужную сторону
      }
      }
      При этом не нужно создавать переменную для остановки.

    • @sergejunk
      @sergejunk ปีที่แล้ว +1

      Блин. При падении шар начинает меееедленно лпускаться и зависать)) По ходу нужно ещё проверку на местоположение сделать))

  • @Олександр-ц3ж1ж
    @Олександр-ц3ж1ж ปีที่แล้ว +1

    А что делать если у меня стоит на об'єкте animation и игрок просто падает з платформи

    • @gedrolitgamedev
      @gedrolitgamedev  ปีที่แล้ว

      Проверь коллайдеры у платформы и объекта, чтобы не было галочки на Trigger

    • @Олександр-ц3ж1ж
      @Олександр-ц3ж1ж ปีที่แล้ว

      @@gedrolitgamedev а без галочки триггер он просто стои на месте а платформа едет

    • @gedrolitgamedev
      @gedrolitgamedev  ปีที่แล้ว

      @@Олександр-ц3ж1ж Ты скрипт для движения закинул на объект платформы или на коллайдер? Просто он должен быть на материнском объекте (коллайдере).
      Создаёшь пустой объект с коллайдером и скриптом, а в нём создаёшь куб и растягиваешь по размеру коллайдера.
      Либо это как-то связана с компонентом animation.