Как развернуть / отразить персонажа (Unity быстрогайды)

Поділитися
Вставка
  • Опубліковано 21 жов 2024

КОМЕНТАРІ • 50

  • @lazizabduhalimov2832
    @lazizabduhalimov2832 2 роки тому +5

    Для поворота можно сделать просто transform.Rotate(0f, 180f, 0f)

    • @Mr.Mortis
      @Mr.Mortis 2 місяці тому

      Какой поворот? Тут про то как отразить

  • @ЭкзоМомент
    @ЭкзоМомент 2 роки тому +2

    Очень понятно излагает автор) Когда будет лям подписоты Я приду и напишу, что Я олд и подписан на канал с 3к подписоты)

  • @Manaworm
    @Manaworm 2 роки тому +4

    Лучший

  • @GGamess
    @GGamess 2 роки тому +4

    проще,
    if (Direction.x > 0)
    {
    transform.localScale = new Vector3(1, 1, 1);
    }
    else if (Direction.x < 0)
    {
    transform.localScale = new Vector3(-1, 1, 1);
    }

    • @GGamess
      @GGamess 2 роки тому

      и не в Update проверять.

    • @NoobGameDev
      @NoobGameDev  2 роки тому +1

      Возможно, но это накладывает некоторые ограничения...
      Например, скэйл перса должен быть строго равен единице. Но, как показывает практика, мало кто изменяет масштаб при помощи Pixel Per Unit, так как проще изменить масштаб в трансформе. Да, можно подобрать значение и использовать его вместо единицы, но это накладывает новые ограничения... Нельзя будет "безопасно" использовать деформации перса, если они будут нужны.
      А вот по поводу проверки, буду рад если подскажете как убрать метод из Update) Так как при использовании старой системы ввода, ввод от игрока всё равно необходимо проверять в Update... А значит, на мой взгляд, там же логично проверять, а не стоит ли развернуть перса после изменения ввода.
      Но в общем, я с Вами согласен, что метод можно упростить в зависимости от требований проекта и убрать его из Update при использовании новой системы ввода.
      Так как видео нацелено на новичков, то осталось только объяснить всё это тем, кто несколько дней или часов назад сел работать в Unity)

  • @Jone_501
    @Jone_501 2 роки тому +5

    А почему не flipX? Изменение размера может отразиться на локальном движении.

    • @NoobGameDev
      @NoobGameDev  2 роки тому +5

      Всё от задач зависит... Flip задействует только спрайт, а данный метод будет зеркалить и дочерние объекты и рейкасты.
      А локальному движению, на мой взгляд, так только лучше - перс будет перемещаться всегда в сторону положительного икса (при наличии, например, реактивного ранца останется просто двигать его всегда вправо, не думая о том в какую сторону перс сейчас повёрнут). Но опять же всё зависит от задач конкретного проекта.

  • @rudick9099
    @rudick9099 2 роки тому

    Мне кажется, что более логичный и универсальный это будет Rotate(0,180,0)

    • @NoobGameDev
      @NoobGameDev  2 роки тому +1

      Ну, справедливости ради, не могу вспомнить случая, когда метод в видео нельзя было бы заменить предложенным Вами... Разве что ( при использовании Rotate), если камеру повесить на перса (сделать её дочерней), то при повороте персонажа, камера будет "выворачиваться на изнанку", и перс будет "пропадать".... Но вряд ли даже на второй неделе изучения Unity люди продолжают так делать)) Поэтому я с Вами соглашусь)

    • @staverban9467
      @staverban9467 2 роки тому

      На самом деле название автора соответствует его навыкам. Это спрайт и у него есть галочка с flip x, что повернет его в противоположную сторону

    • @rudick9099
      @rudick9099 2 роки тому

      @@staverban9467 это действие применимо если на объекте не будет сторонних чеков и других объектов. Ну а если в 1 объекте сразу и физика, и спрайт, и коллайдер, и т.д, то такое не подойдет

    • @NoobGameDev
      @NoobGameDev  2 роки тому

      ​@@staverban9467 Всё верно! В том и задумка) Чтобы люди по названию понимали, что на канале лишь одни из возможных вариантов решения и при этом не обязательно самые оптимальные и корректные)
      А между флипом СПРАЙТА и изменением скэйла или поворота ОБЪЕКТА всё-таки существенная разница - это даже автор с таким названием, как у меня знает 😅
      Если интересно - почитайте комментарии - я где-то здесь более подробно описывал отличия)✌

  • @Gozen73
    @Gozen73 2 роки тому

    Привет, спасибо за гайды, очень круто. А можно текстовым файлом прикладывать код, под видео?

    • @NoobGameDev
      @NoobGameDev  2 роки тому

      Привет, спасибо) Окей, думаю, это можно организовать)) Как только время и желание совпадут, обязательно добавлю!

  • @spacetiger-x9u
    @spacetiger-x9u 2 роки тому

    Но можно создать переменную bool и когда нажата а то false а когда d true
    И просто скале переворачивать

  • @ЛюдаБаева-ф5з
    @ЛюдаБаева-ф5з 2 роки тому +1

    Для чего подобные уроки? У Sprite Renderer имеется Flip по X и Y. Зачем эти танцы с трансформом, когда можно менять bool Flip X на противоположный?...

    • @NoobGameDev
      @NoobGameDev  2 роки тому +2

      Всё верно - это отражение спрайта. Но центр объекта и центр спрайта могут не совпадать, так же центр спрайта может находиться не в центре масс персонажа - это всё будет приводить к тому что ноги перса при повороте будут скакать влево-вправо. Но это меньшая из проблем. Представьте, что у персонажа есть оружие, которое он может менять или рейкаст, который должен смотреть в ту же сторону, что и персонаж, чтобы задетектить, что бы там нибыло. Т.е. обычно нужно, чтобы все рейкасты и дочерние объекты поворачивались вместе с персонажем - это делается при помощи изменения transform. Если делать это при помощи flip, то оружие, как смотрело, допустим вправо, так и будет смотреть, несмотря на то что перс будет разворачиваться...

  • @Manaworm
    @Manaworm 2 роки тому

    Го что то про атаку!!

  • @MrLawden28
    @MrLawden28 2 роки тому +2

    Пон

  • @surnova5733
    @surnova5733 2 роки тому

    Хотелось б узнать как запустить Анимацию действия или анимацию добивания при файтинге

    • @NoobGameDev
      @NoobGameDev  2 роки тому +1

      Боюсь там слишком всё от архитектуры проекта зависит... Потому что я не вижу разницы между анимацией добивания и анимацией любого из ударов. Можно это делать вообще запуском кат-сцены. Так же будет зависеть от того насколько разные анимации добивания у персонажей (будут ли они двигаться по одному шаблону)... К сожалению, помочь с этим не смогу - это нужно в проект погружаться)

    • @surnova5733
      @surnova5733 2 роки тому

      @@NoobGameDev спасибо большое за ваше старание над поучительным каналом, жаль конечно ну всё равно спасибо, я многому научился, правда мне код С# даётся с трудом, хотелось б услышать напутствуюшие слова если вы сможете, как учить и сложно ли всё выучить в этом языке программировании

    • @NoobGameDev
      @NoobGameDev  2 роки тому +1

      ​@@surnova5733 Я практически уверен, что все нюансы языка Вам знать не нужно. Лично я знаю, наверное, процентов 20-30 и этого хватает для решения 70-80% задач))
      Главное - это понять основы программирования (они для всех языков одинаковые), а потом принципы ООП, и как вообще работать при таком подходе к программированию.
      Так же, хотя бы прочитать руководство по языку: metanit.com/sharp/tutorial/
      А лучше, конечно, пытаться повторить, как можно больше. Например, если приведён какой-то пример (особенно из тех тем, с которыми ещё не доводилось сталкиваться), то стоит не просто его прочитать, а озадачить себя тем, чтобы открыть IDE, перепечатать пример, получить результат, поиграться со значениями. Так информация, ГОРАЗДО!, быстрее и лучше усваивается.
      А если Метанита будет мало, то ещё больше углубиться с C# можно например у СимплКода: ua-cam.com/users/SimpleCodeIT

    • @surnova5733
      @surnova5733 2 роки тому

      @@NoobGameDev Спасибо большое за уделённое время, окончил колледж и понял что хочу создавать игры с душой , а С# даётся с трудом, я буду стараться, спасибо вам большое

  • @Relax-mv2vr
    @Relax-mv2vr 2 роки тому

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

    • @NoobGameDev
      @NoobGameDev  2 роки тому

      Это во многом зависит от того будет ли ваш персонаж носить с собой дочерние объекты (например оружие, фамильяров и пр.).
      Так же для TopDown характерно большее число анимаций (минимум 3 вместо одной, при диагональном перемещении - 5, а лучше 8).
      Мне нравится система при которой имена анимации для различных направлений движения записаны в массив и в зависимости от ввода из этого массива считывается соответствующая анимация.
      Для самого простого (и диагонального) перемещения код будет примерно следующим:
      void InputPlayer()
      {
      inputVector = new Vector2(Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical")).normalized;
      }
      void Move()
      {
      rb.velocity = inputVector * speed;
      }

    • @Relax-mv2vr
      @Relax-mv2vr 2 роки тому

      @@NoobGameDev спасибо

  • @Nori28844
    @Nori28844 2 роки тому +1

    что делать если персонаж не зеркалится а телепортируется?

    • @NoobGameDev
      @NoobGameDev  2 роки тому +1

      Скорей всего, это происходит из-за того, что у спрайта, Pivot находится далеко от центра. Pivot - это, грубо говоря, центр спрайта, который можно настроить (в Sprite Editor, в Инспекторе). При добавлении спрайта к объекту, центр объекта и пивот всегда будут совмещены. Чтобы всё корректно визуально работало, пивот должен быть по центру тяжести и на уровне ступней перса (в центре, снизу).

    • @Nori28844
      @Nori28844 2 роки тому +1

      Спасибо я решил эту проблему

    • @NoobGameDev
      @NoobGameDev  2 роки тому +1

      @@Nori28844 Изменением Пивота или нашли другое решение? Просто, любопытно) А то меня частенько приятно удивляют весьма неочевидными интересными решениями)

    • @Nori28844
      @Nori28844 2 роки тому +1

      @@NoobGameDev нашол новое решение для этого надо добавить на дочерний объект тело добавить скрипт player controller и убрать из материнский объект игрой предварительно дочерний объект тела вынуть из материнского объекта игрока и тогда где бы ни находился игрок он поворачивался без телепортирования

  • @opivnichnyk
    @opivnichnyk 2 роки тому

    Столкнулся с проблемой при повороте. Карта нормалей отражается, как будто, по оси Y. И пока не нашел варианта решения проблемы((

    • @NoobGameDev
      @NoobGameDev  2 роки тому

      Карта нормалей - это же вроде как 3D'шная штука? Или проект 3D просто с 2D видом? Если проблема именно при развороте таким способом (а не при импорте модели), то можно попробовать немного по-другому.
      Вместо 39-41 строк в видео написать такую строку:
      transform.Rotate(0f, 180f, 0f);

    • @opivnichnyk
      @opivnichnyk 2 роки тому

      @@NoobGameDev Та не)) В новой версии на 2D может влиять карта нормалей, но, там теперь нужно разобраться. Она-то разворачивается вместе с моделью, и вроде адекватно, а вот свет начинает работать не очень адекватно. Но это не сильно большая проблема. Если не всматриваться, то можно и не заметить))

    • @opivnichnyk
      @opivnichnyk 2 роки тому

      @@NoobGameDev Сейчас как раз разбираюсь с этим. Сейчас можно ж импортировать PSB Файл. И его собирать в модель и анимировать. Анимировать легко, а вот с картами нормалей - много гемора

    • @NoobGameDev
      @NoobGameDev  2 роки тому +1

      @@opivnichnyk О, как! Надо будет поковыряться в этом) Спасиб)

    • @opivnichnyk
      @opivnichnyk 2 роки тому

      @@NoobGameDev если что обращайтесь!)) Многого не знаю, но что понял - подскажу))

  • @Arsenk3r
    @Arsenk3r Рік тому

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

    • @NoobGameDev
      @NoobGameDev  Рік тому

      Это нужно смотреть и разбираться, что там у Вас как... Есть методы типа LookAt, которые поворачивают один объект по направлению к другому. Самое сложное в этом случае - получить направление: взять касательную к траектории, высшую точку траектории, обратное направление от позиции тача до перса. И в этом направлении сориентировать перса. По идее можно даже типа так: transform.right = вектор направления.
      Посмотрите как "заставляют" камеру смотреть за игроков - вам нужно то же самое)

  • @veymatcompany6959
    @veymatcompany6959 2 роки тому

    А теперь вопрос, как сделать чтобы противник преследуя гг поворачивался так же лицом к гг?) У макстера код переписал, но он не работает

    • @NoobGameDev
      @NoobGameDev  2 роки тому +1

      Я уверен, что есть несколько годных способов это сделать, но я делал так:
      if (player.position.x < transform.position.x) { temp.x = -1; }
      else if (player.position.x > transform.position.x) { temp.x = 1; }
      Это основная часть метода поворота противника за персом (по аналогии с отражением самого перса). Т.е. если враг агрится, то у него должна быть ссылка на игрока (в данном случае "player"), сам код висит на враге (поэтому просто "transform") и если координаты игрока по иксу меньше, чем координаты врага по иксу, то враг должен смотреть влево и наоборот.
      Для платформера данный вариант работает очень даже не плохо)

    • @veymatcompany6959
      @veymatcompany6959 2 роки тому

      @@NoobGameDev спасибо за помощь

  • @Dippps
    @Dippps 2 роки тому

    XD what? float xdir. xdir = input.x, transform.localscalex = mathf.sign(xdir).