Возможно, но это накладывает некоторые ограничения... Например, скэйл перса должен быть строго равен единице. Но, как показывает практика, мало кто изменяет масштаб при помощи Pixel Per Unit, так как проще изменить масштаб в трансформе. Да, можно подобрать значение и использовать его вместо единицы, но это накладывает новые ограничения... Нельзя будет "безопасно" использовать деформации перса, если они будут нужны. А вот по поводу проверки, буду рад если подскажете как убрать метод из Update) Так как при использовании старой системы ввода, ввод от игрока всё равно необходимо проверять в Update... А значит, на мой взгляд, там же логично проверять, а не стоит ли развернуть перса после изменения ввода. Но в общем, я с Вами согласен, что метод можно упростить в зависимости от требований проекта и убрать его из Update при использовании новой системы ввода. Так как видео нацелено на новичков, то осталось только объяснить всё это тем, кто несколько дней или часов назад сел работать в Unity)
Всё от задач зависит... Flip задействует только спрайт, а данный метод будет зеркалить и дочерние объекты и рейкасты. А локальному движению, на мой взгляд, так только лучше - перс будет перемещаться всегда в сторону положительного икса (при наличии, например, реактивного ранца останется просто двигать его всегда вправо, не думая о том в какую сторону перс сейчас повёрнут). Но опять же всё зависит от задач конкретного проекта.
Ну, справедливости ради, не могу вспомнить случая, когда метод в видео нельзя было бы заменить предложенным Вами... Разве что ( при использовании Rotate), если камеру повесить на перса (сделать её дочерней), то при повороте персонажа, камера будет "выворачиваться на изнанку", и перс будет "пропадать".... Но вряд ли даже на второй неделе изучения Unity люди продолжают так делать)) Поэтому я с Вами соглашусь)
@@staverban9467 это действие применимо если на объекте не будет сторонних чеков и других объектов. Ну а если в 1 объекте сразу и физика, и спрайт, и коллайдер, и т.д, то такое не подойдет
@@staverban9467 Всё верно! В том и задумка) Чтобы люди по названию понимали, что на канале лишь одни из возможных вариантов решения и при этом не обязательно самые оптимальные и корректные) А между флипом СПРАЙТА и изменением скэйла или поворота ОБЪЕКТА всё-таки существенная разница - это даже автор с таким названием, как у меня знает 😅 Если интересно - почитайте комментарии - я где-то здесь более подробно описывал отличия)✌
Всё верно - это отражение спрайта. Но центр объекта и центр спрайта могут не совпадать, так же центр спрайта может находиться не в центре масс персонажа - это всё будет приводить к тому что ноги перса при повороте будут скакать влево-вправо. Но это меньшая из проблем. Представьте, что у персонажа есть оружие, которое он может менять или рейкаст, который должен смотреть в ту же сторону, что и персонаж, чтобы задетектить, что бы там нибыло. Т.е. обычно нужно, чтобы все рейкасты и дочерние объекты поворачивались вместе с персонажем - это делается при помощи изменения transform. Если делать это при помощи flip, то оружие, как смотрело, допустим вправо, так и будет смотреть, несмотря на то что перс будет разворачиваться...
Боюсь там слишком всё от архитектуры проекта зависит... Потому что я не вижу разницы между анимацией добивания и анимацией любого из ударов. Можно это делать вообще запуском кат-сцены. Так же будет зависеть от того насколько разные анимации добивания у персонажей (будут ли они двигаться по одному шаблону)... К сожалению, помочь с этим не смогу - это нужно в проект погружаться)
@@NoobGameDev спасибо большое за ваше старание над поучительным каналом, жаль конечно ну всё равно спасибо, я многому научился, правда мне код С# даётся с трудом, хотелось б услышать напутствуюшие слова если вы сможете, как учить и сложно ли всё выучить в этом языке программировании
@@surnova5733 Я практически уверен, что все нюансы языка Вам знать не нужно. Лично я знаю, наверное, процентов 20-30 и этого хватает для решения 70-80% задач)) Главное - это понять основы программирования (они для всех языков одинаковые), а потом принципы ООП, и как вообще работать при таком подходе к программированию. Так же, хотя бы прочитать руководство по языку: metanit.com/sharp/tutorial/ А лучше, конечно, пытаться повторить, как можно больше. Например, если приведён какой-то пример (особенно из тех тем, с которыми ещё не доводилось сталкиваться), то стоит не просто его прочитать, а озадачить себя тем, чтобы открыть IDE, перепечатать пример, получить результат, поиграться со значениями. Так информация, ГОРАЗДО!, быстрее и лучше усваивается. А если Метанита будет мало, то ещё больше углубиться с C# можно например у СимплКода: ua-cam.com/users/SimpleCodeIT
@@NoobGameDev Спасибо большое за уделённое время, окончил колледж и понял что хочу создавать игры с душой , а С# даётся с трудом, я буду стараться, спасибо вам большое
Это во многом зависит от того будет ли ваш персонаж носить с собой дочерние объекты (например оружие, фамильяров и пр.). Так же для TopDown характерно большее число анимаций (минимум 3 вместо одной, при диагональном перемещении - 5, а лучше 8). Мне нравится система при которой имена анимации для различных направлений движения записаны в массив и в зависимости от ввода из этого массива считывается соответствующая анимация. Для самого простого (и диагонального) перемещения код будет примерно следующим: void InputPlayer() { inputVector = new Vector2(Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical")).normalized; } void Move() { rb.velocity = inputVector * speed; }
Скорей всего, это происходит из-за того, что у спрайта, Pivot находится далеко от центра. Pivot - это, грубо говоря, центр спрайта, который можно настроить (в Sprite Editor, в Инспекторе). При добавлении спрайта к объекту, центр объекта и пивот всегда будут совмещены. Чтобы всё корректно визуально работало, пивот должен быть по центру тяжести и на уровне ступней перса (в центре, снизу).
@@Nori28844 Изменением Пивота или нашли другое решение? Просто, любопытно) А то меня частенько приятно удивляют весьма неочевидными интересными решениями)
@@NoobGameDev нашол новое решение для этого надо добавить на дочерний объект тело добавить скрипт player controller и убрать из материнский объект игрой предварительно дочерний объект тела вынуть из материнского объекта игрока и тогда где бы ни находился игрок он поворачивался без телепортирования
Карта нормалей - это же вроде как 3D'шная штука? Или проект 3D просто с 2D видом? Если проблема именно при развороте таким способом (а не при импорте модели), то можно попробовать немного по-другому. Вместо 39-41 строк в видео написать такую строку: transform.Rotate(0f, 180f, 0f);
@@NoobGameDev Та не)) В новой версии на 2D может влиять карта нормалей, но, там теперь нужно разобраться. Она-то разворачивается вместе с моделью, и вроде адекватно, а вот свет начинает работать не очень адекватно. Но это не сильно большая проблема. Если не всматриваться, то можно и не заметить))
@@NoobGameDev Сейчас как раз разбираюсь с этим. Сейчас можно ж импортировать PSB Файл. И его собирать в модель и анимировать. Анимировать легко, а вот с картами нормалей - много гемора
Это нужно смотреть и разбираться, что там у Вас как... Есть методы типа LookAt, которые поворачивают один объект по направлению к другому. Самое сложное в этом случае - получить направление: взять касательную к траектории, высшую точку траектории, обратное направление от позиции тача до перса. И в этом направлении сориентировать перса. По идее можно даже типа так: transform.right = вектор направления. Посмотрите как "заставляют" камеру смотреть за игроков - вам нужно то же самое)
Я уверен, что есть несколько годных способов это сделать, но я делал так: if (player.position.x < transform.position.x) { temp.x = -1; } else if (player.position.x > transform.position.x) { temp.x = 1; } Это основная часть метода поворота противника за персом (по аналогии с отражением самого перса). Т.е. если враг агрится, то у него должна быть ссылка на игрока (в данном случае "player"), сам код висит на враге (поэтому просто "transform") и если координаты игрока по иксу меньше, чем координаты врага по иксу, то враг должен смотреть влево и наоборот. Для платформера данный вариант работает очень даже не плохо)
Для поворота можно сделать просто transform.Rotate(0f, 180f, 0f)
Какой поворот? Тут про то как отразить
Очень понятно излагает автор) Когда будет лям подписоты Я приду и напишу, что Я олд и подписан на канал с 3к подписоты)
Лучший
проще,
if (Direction.x > 0)
{
transform.localScale = new Vector3(1, 1, 1);
}
else if (Direction.x < 0)
{
transform.localScale = new Vector3(-1, 1, 1);
}
и не в Update проверять.
Возможно, но это накладывает некоторые ограничения...
Например, скэйл перса должен быть строго равен единице. Но, как показывает практика, мало кто изменяет масштаб при помощи Pixel Per Unit, так как проще изменить масштаб в трансформе. Да, можно подобрать значение и использовать его вместо единицы, но это накладывает новые ограничения... Нельзя будет "безопасно" использовать деформации перса, если они будут нужны.
А вот по поводу проверки, буду рад если подскажете как убрать метод из Update) Так как при использовании старой системы ввода, ввод от игрока всё равно необходимо проверять в Update... А значит, на мой взгляд, там же логично проверять, а не стоит ли развернуть перса после изменения ввода.
Но в общем, я с Вами согласен, что метод можно упростить в зависимости от требований проекта и убрать его из Update при использовании новой системы ввода.
Так как видео нацелено на новичков, то осталось только объяснить всё это тем, кто несколько дней или часов назад сел работать в Unity)
А почему не flipX? Изменение размера может отразиться на локальном движении.
Всё от задач зависит... Flip задействует только спрайт, а данный метод будет зеркалить и дочерние объекты и рейкасты.
А локальному движению, на мой взгляд, так только лучше - перс будет перемещаться всегда в сторону положительного икса (при наличии, например, реактивного ранца останется просто двигать его всегда вправо, не думая о том в какую сторону перс сейчас повёрнут). Но опять же всё зависит от задач конкретного проекта.
Мне кажется, что более логичный и универсальный это будет Rotate(0,180,0)
Ну, справедливости ради, не могу вспомнить случая, когда метод в видео нельзя было бы заменить предложенным Вами... Разве что ( при использовании Rotate), если камеру повесить на перса (сделать её дочерней), то при повороте персонажа, камера будет "выворачиваться на изнанку", и перс будет "пропадать".... Но вряд ли даже на второй неделе изучения Unity люди продолжают так делать)) Поэтому я с Вами соглашусь)
На самом деле название автора соответствует его навыкам. Это спрайт и у него есть галочка с flip x, что повернет его в противоположную сторону
@@staverban9467 это действие применимо если на объекте не будет сторонних чеков и других объектов. Ну а если в 1 объекте сразу и физика, и спрайт, и коллайдер, и т.д, то такое не подойдет
@@staverban9467 Всё верно! В том и задумка) Чтобы люди по названию понимали, что на канале лишь одни из возможных вариантов решения и при этом не обязательно самые оптимальные и корректные)
А между флипом СПРАЙТА и изменением скэйла или поворота ОБЪЕКТА всё-таки существенная разница - это даже автор с таким названием, как у меня знает 😅
Если интересно - почитайте комментарии - я где-то здесь более подробно описывал отличия)✌
Привет, спасибо за гайды, очень круто. А можно текстовым файлом прикладывать код, под видео?
Привет, спасибо) Окей, думаю, это можно организовать)) Как только время и желание совпадут, обязательно добавлю!
Но можно создать переменную bool и когда нажата а то false а когда d true
И просто скале переворачивать
Для чего подобные уроки? У Sprite Renderer имеется Flip по X и Y. Зачем эти танцы с трансформом, когда можно менять bool Flip X на противоположный?...
Всё верно - это отражение спрайта. Но центр объекта и центр спрайта могут не совпадать, так же центр спрайта может находиться не в центре масс персонажа - это всё будет приводить к тому что ноги перса при повороте будут скакать влево-вправо. Но это меньшая из проблем. Представьте, что у персонажа есть оружие, которое он может менять или рейкаст, который должен смотреть в ту же сторону, что и персонаж, чтобы задетектить, что бы там нибыло. Т.е. обычно нужно, чтобы все рейкасты и дочерние объекты поворачивались вместе с персонажем - это делается при помощи изменения transform. Если делать это при помощи flip, то оружие, как смотрело, допустим вправо, так и будет смотреть, несмотря на то что перс будет разворачиваться...
Го что то про атаку!!
Пон
Хотелось б узнать как запустить Анимацию действия или анимацию добивания при файтинге
Боюсь там слишком всё от архитектуры проекта зависит... Потому что я не вижу разницы между анимацией добивания и анимацией любого из ударов. Можно это делать вообще запуском кат-сцены. Так же будет зависеть от того насколько разные анимации добивания у персонажей (будут ли они двигаться по одному шаблону)... К сожалению, помочь с этим не смогу - это нужно в проект погружаться)
@@NoobGameDev спасибо большое за ваше старание над поучительным каналом, жаль конечно ну всё равно спасибо, я многому научился, правда мне код С# даётся с трудом, хотелось б услышать напутствуюшие слова если вы сможете, как учить и сложно ли всё выучить в этом языке программировании
@@surnova5733 Я практически уверен, что все нюансы языка Вам знать не нужно. Лично я знаю, наверное, процентов 20-30 и этого хватает для решения 70-80% задач))
Главное - это понять основы программирования (они для всех языков одинаковые), а потом принципы ООП, и как вообще работать при таком подходе к программированию.
Так же, хотя бы прочитать руководство по языку: metanit.com/sharp/tutorial/
А лучше, конечно, пытаться повторить, как можно больше. Например, если приведён какой-то пример (особенно из тех тем, с которыми ещё не доводилось сталкиваться), то стоит не просто его прочитать, а озадачить себя тем, чтобы открыть IDE, перепечатать пример, получить результат, поиграться со значениями. Так информация, ГОРАЗДО!, быстрее и лучше усваивается.
А если Метанита будет мало, то ещё больше углубиться с C# можно например у СимплКода: ua-cam.com/users/SimpleCodeIT
@@NoobGameDev Спасибо большое за уделённое время, окончил колледж и понял что хочу создавать игры с душой , а С# даётся с трудом, я буду стараться, спасибо вам большое
А не подскажите, что нужно в этот код добавить чтоб пермонаж еще вверх вниз ходил. То есть для topdown игры
Это во многом зависит от того будет ли ваш персонаж носить с собой дочерние объекты (например оружие, фамильяров и пр.).
Так же для TopDown характерно большее число анимаций (минимум 3 вместо одной, при диагональном перемещении - 5, а лучше 8).
Мне нравится система при которой имена анимации для различных направлений движения записаны в массив и в зависимости от ввода из этого массива считывается соответствующая анимация.
Для самого простого (и диагонального) перемещения код будет примерно следующим:
void InputPlayer()
{
inputVector = new Vector2(Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical")).normalized;
}
void Move()
{
rb.velocity = inputVector * speed;
}
@@NoobGameDev спасибо
что делать если персонаж не зеркалится а телепортируется?
Скорей всего, это происходит из-за того, что у спрайта, Pivot находится далеко от центра. Pivot - это, грубо говоря, центр спрайта, который можно настроить (в Sprite Editor, в Инспекторе). При добавлении спрайта к объекту, центр объекта и пивот всегда будут совмещены. Чтобы всё корректно визуально работало, пивот должен быть по центру тяжести и на уровне ступней перса (в центре, снизу).
Спасибо я решил эту проблему
@@Nori28844 Изменением Пивота или нашли другое решение? Просто, любопытно) А то меня частенько приятно удивляют весьма неочевидными интересными решениями)
@@NoobGameDev нашол новое решение для этого надо добавить на дочерний объект тело добавить скрипт player controller и убрать из материнский объект игрой предварительно дочерний объект тела вынуть из материнского объекта игрока и тогда где бы ни находился игрок он поворачивался без телепортирования
Столкнулся с проблемой при повороте. Карта нормалей отражается, как будто, по оси Y. И пока не нашел варианта решения проблемы((
Карта нормалей - это же вроде как 3D'шная штука? Или проект 3D просто с 2D видом? Если проблема именно при развороте таким способом (а не при импорте модели), то можно попробовать немного по-другому.
Вместо 39-41 строк в видео написать такую строку:
transform.Rotate(0f, 180f, 0f);
@@NoobGameDev Та не)) В новой версии на 2D может влиять карта нормалей, но, там теперь нужно разобраться. Она-то разворачивается вместе с моделью, и вроде адекватно, а вот свет начинает работать не очень адекватно. Но это не сильно большая проблема. Если не всматриваться, то можно и не заметить))
@@NoobGameDev Сейчас как раз разбираюсь с этим. Сейчас можно ж импортировать PSB Файл. И его собирать в модель и анимировать. Анимировать легко, а вот с картами нормалей - много гемора
@@opivnichnyk О, как! Надо будет поковыряться в этом) Спасиб)
@@NoobGameDev если что обращайтесь!)) Многого не знаю, но что понял - подскажу))
Привет у меня в игре механика как в энрги бердс типо натягивание как сделать чтоб игрок поворачивался на линнию траектории?
Это нужно смотреть и разбираться, что там у Вас как... Есть методы типа LookAt, которые поворачивают один объект по направлению к другому. Самое сложное в этом случае - получить направление: взять касательную к траектории, высшую точку траектории, обратное направление от позиции тача до перса. И в этом направлении сориентировать перса. По идее можно даже типа так: transform.right = вектор направления.
Посмотрите как "заставляют" камеру смотреть за игроков - вам нужно то же самое)
А теперь вопрос, как сделать чтобы противник преследуя гг поворачивался так же лицом к гг?) У макстера код переписал, но он не работает
Я уверен, что есть несколько годных способов это сделать, но я делал так:
if (player.position.x < transform.position.x) { temp.x = -1; }
else if (player.position.x > transform.position.x) { temp.x = 1; }
Это основная часть метода поворота противника за персом (по аналогии с отражением самого перса). Т.е. если враг агрится, то у него должна быть ссылка на игрока (в данном случае "player"), сам код висит на враге (поэтому просто "transform") и если координаты игрока по иксу меньше, чем координаты врага по иксу, то враг должен смотреть влево и наоборот.
Для платформера данный вариант работает очень даже не плохо)
@@NoobGameDev спасибо за помощь
XD what? float xdir. xdir = input.x, transform.localscalex = mathf.sign(xdir).