Движение перонажа в 2D на определенном участке
| |
Kxarog | Дата: Пятница, 10 Февраля 2017, 21:33 | Сообщение # 1 |
участник
Сейчас нет на сайте
| Здравствуйте, помогите пожалуйста решить проблему. Суть такова пытаюсь сделать 2D, вид сбоку, персонаж должен двигаться не как обычном платформере вперед-назад, но и верх и вниз, как бы на небольшой полосе земли(к примеру как в stick war), при этом не выходя за границы это земли(и всей карты), так же имеется небольшая пещера под ней в которую можно спуститься и тоже ходить в ней, что бы было чуть понятнее вот набросок
и собственно вопрос как это реализовать, так как из-за полосы земли по которой ходят rigibody исключается, можно было бы поставить ограничение на координаты, но тогда как быть с пещерой так что тоже не вариант, думал сделать с помощью столкновения коллайдеров(типо если на земле есть коллайдер и персонаж с ним столкнется, то он может ходить) но тогда как реализовать всякие препятствия типо ящиков, деревьев и т. д. В общем помогите разобраться.
|
|
| |
Rean | Дата: Пятница, 10 Февраля 2017, 23:29 | Сообщение # 2 |
участник
Сейчас нет на сайте
| Kxarog, задача достаточно простая. Попробуй отталкиваться не от того, где ходить нельзя, а от того - где ходить можно. Создай специальные зоны, внутри которых игрок может передвигаться. Физика здесь не нужна, можно обойтись достаточно примитивными средствами.
|
|
| |
Kxarog | Дата: Суббота, 11 Февраля 2017, 11:12 | Сообщение # 3 |
участник
Сейчас нет на сайте
| Какой забавный ответ, я спрашиваю как создать зону по которой можно ходить, вы отвечаете что нужно сделать зону по которой можно ходить А как ее создать? Гайдов я на эту тему не нашел, так как почти во всех гайдах описывается движение с помощью физики.
Сообщение отредактировал Kxarog - Суббота, 11 Февраля 2017, 11:12 |
|
| |
Rean | Дата: Суббота, 11 Февраля 2017, 14:54 | Сообщение # 4 |
участник
Сейчас нет на сайте
| Kxarog, я рад, что вас позабавил ответ. Забавный он потому, что если вопрос сформулирован как:
Цитата как создать зону по которой можно ходить то он уже содержит в себе ответ:
Цитата нужно сделать зону по которой можно ходить Отталкивайтесь от того, как бы вы это реализовали с помощью псевдокода. Далее, просто реализуем это в рамках определенной среды. Несмотря на то, что это выглядит как:
На самом деле, решение скрывает за собой то, что вы уже изложили в своём вопросе выше. Используйте триггеры (если хотите, можно и коллайдеры) и слои/теги. Или вам нужен конкретный пример и способ решения?
|
|
| |
Kxarog | Дата: Суббота, 11 Февраля 2017, 15:22 | Сообщение # 5 |
участник
Сейчас нет на сайте
| Я не откажусь от примера и способа решения, но я так понял вы стараетесь что бы я сам додумался как это сделать, то на этот счет у меня была одна бредовая идея, повесить на все спрайты коллайдеры, а некоторые из них повесить тег, и персонаж проверяет этот коллайдер с таким тегом? если да - можешь идти, нет - стоять, но так как я новичок, я без понятия как это реализовать, я даже не уверен возможна ли вообще моя идея
|
|
| |
EchoIT | Дата: Суббота, 11 Февраля 2017, 15:40 | Сообщение # 6 |
старожил
Сейчас нет на сайте
| Kxarog, потому что новичкам нужно не игры делать, а разбираться, как это всё работает, и почему оно так работает. С пониманием приходит решение проблем.
Долгожданный анонсик: State of War
|
|
| |
VerdCS | Дата: Суббота, 11 Февраля 2017, 15:47 | Сообщение # 7 |
частый гость
Сейчас нет на сайте
| Настраиваете сцену так что бы коллайдеры ограничивали непроходимые участки. http://s1.uploadpics.ru/images/bJRPraiogz.png
Создаёте игрока с коллайдером и rigidbody2D, rigidbody настраиваете так как на скрине http://s1.uploadpics.ru/images/W1oPrpiilf.png
Перемещаете rigidbody игрока скриптом в FixedUpdate http://s1.uploadpics.ru/images/-youHaijlf.png
|
|
| |
Kxarog | Дата: Суббота, 11 Февраля 2017, 17:17 | Сообщение # 8 |
участник
Сейчас нет на сайте
| VerdCS спасибо большое что не пожалели свои силы и время на меня.
EchoIT
Цитата новичкам нужно не игры делать А кто вам сказал что я делаю игру? Лично я сказал только то что пытаюсь сделать движение в 2D не как в обычном платформере
Цитата а разбираться, как это всё работает, и почему оно так работает А я сейчас что по вашему делаю? Я вроде все объяснил что гайдов, уроков и примеров по данной интересующей меня теме нет, поэтому и пришел сюда все обрисовал вежливо попросил помощи, а в ответ вы мне сути говорите "иди отсюда разбирайся сам"
Извините конечно что наглею, а есть еще варианты реализации этой идеи? Потому что как сказано выше
Цитата Попробуй отталкиваться не от того, где ходить нельзя, а от того - где ходить можно
Сообщение отредактировал Kxarog - Суббота, 11 Февраля 2017, 17:20 |
|
| |
VerdCS | Дата: Суббота, 11 Февраля 2017, 17:39 | Сообщение # 9 |
частый гость
Сейчас нет на сайте
| Kxarog, не за что. Помогло ли это решение?
Что касается других вариантов... они конечно есть, и их довольно много, но все они сложнее и сложнее, вплоть до своей собственной физической системы. Альтернативного но такого же простого варианта в голову не приходит.
|
|
| |
Kxarog | Дата: Суббота, 11 Февраля 2017, 17:52 | Сообщение # 10 |
участник
Сейчас нет на сайте
| Цитата Помогло ли это решение? Да помогло, правда есть одна мелочь которая мне покоя не дает, персонаж при движении в сторону границы поля(ближается к колайдеру) он как бы немного заходит за границу коллайдера, как бы впечатывается в резиновую стену а потом отскакивает.
|
|
| |
VerdCS | Дата: Суббота, 11 Февраля 2017, 18:05 | Сообщение # 11 |
частый гость
Сейчас нет на сайте
| Kxarog, убедитесь в том что перемещение персонажа осуществляется именно в FixedUpdate и с помощью метода rigidbody2D.MovePosition; убедитесь что в настройках компонента rigidbody2D параметры Interpolate и CollisionDetection установлены в положение Interpolate и Continuous соответственно.
|
|
| |
EchoIT | Дата: Суббота, 11 Февраля 2017, 18:27 | Сообщение # 12 |
старожил
Сейчас нет на сайте
| Цитата А я сейчас что по вашему делаю? Я вроде все объяснил что гайдов, уроков и примеров по данной интересующей меня теме нет, поэтому и пришел сюда все обрисовал вежливо попросил помощи, а в ответ вы мне сути говорите "иди отсюда разбирайся сам"
Конечно, никто не пишет гайды про то, "как сделать монстра с тремя глазами на верёвочках, каждый из которых будет стрелять фракталами". Я ведь имел в виду разобраться, как работает логика отдельных компонентов, полностью изучить то, что предлагает язык программирования и как это использовать. Чаще всего, решение после этого само просится.
Прошу меня извинить за возможно бесполезные сообщения, но я стараюсь помочь не готовым решением, а возможностью самостоятельно его найти.
Долгожданный анонсик: State of War
Сообщение отредактировал EchoIT - Суббота, 11 Февраля 2017, 18:32 |
|
| |
Rean | Дата: Суббота, 11 Февраля 2017, 18:34 | Сообщение # 13 |
участник
Сейчас нет на сайте
| Kxarog, солидарен с коллегами выше. Суть в том, чтобы разобраться самому, так как если простейшие задачи вызывают сложность и порождают вопросы, то в дальнейшем, при более серьёзных задачах, сложность и вопросы будут расти в геометрической прогрессии. И уже вряд ли кто-то на форуме сможет/захочет помогать.
Цитата Kxarog ( ) Я вроде все объяснил что гайдов, уроков и примеров по данной интересующей меня теме нет Если вы ищите конкретную реализацию - вполне возможно, что её нет. Уроки и документация, как правило, дают не конкретные рецепты (за исключением различных CookBook'ов), а понимание инструмента. А судя по:
Цитата я даже не уверен возможна ли вообще моя идея понимание инструмента отсутствует. Я сам не сторонник нравоучений. Всё что говорю - говорю из благих побуждений, не пытаюсь кого-либо принизить или послать, но призываю вдумчиво разобраться в вопросе в общем и инструменте - в частности.
Цитата Kxarog ( ) одна бредовая идея, повесить на все спрайты коллайдеры, а некоторые из них повесить тег, и персонаж проверяет этот коллайдер с таким тегом? если да - можешь идти, нет - стоять Отчего же она бредовая? Вполне себе идея. Надо брать её и реализовывать. Чтобы её реализовать - достаточно знать основные инструменты Unity. Про инструменты - выше.
Цитата Извините конечно что наглею, а есть еще варианты реализации этой идеи? Есть. Ограничены они лишь фантазией разработчика и средствами разработки. Последнее у Unity в достатке. Как вариант: создаём объект с полигональным коллайдером. Определяем его поведение как "триггер". Придаем коллайдеру форму требуемой зоны и назначаем объекту тег, к примеру, "MoveArea". Объекту игрока тоже добавляем коллайдер и Rigidbody2D. Коллайдер настраиваем так, чтобы он был только в нижней части спрайта (где ноги); в Rigidbody убираем все физические воздействия и замораживаем вращение. Остаётся только в скрипте игрока прописать два ключевых момента: движение с помощью Rigidbody (MovePosition) в FixedUpdate и проверку на выход из триггера с тегом MoveArea в событии OnTriggerExit2D (при выходе возвращаем на прежнюю позицию). Не исключены нюансы, но смотреть надо по факту. Это что касается метода без множества сущностей. Хотя VerdCS будет проще именно в плане реализации стандартными методами.
|
|
| |
VerdCS | Дата: Суббота, 11 Февраля 2017, 19:25 | Сообщение # 14 |
частый гость
Сейчас нет на сайте
| Поддерживаю посыл комментаторов выше. Как говориться "дай человеку рыбу и он будет сыт один день, научи человека рыбачить и он будет сыт всю жизнь". Только реальность так не работает. Мы все используем готовые движки и специализированные API вместо того что бы писать свои, тогда когда этого действительно не требуется. Потому цель всегда важнее средств которыми она достигается. Не факт что человеку нужно становиться специалистом по Unity и мастером по C#, что бы решить ту задачу которая перед ним возникла сию минуту. Каждый сам для себя решает каким путём идти. Если человек решил прийти на форум и задать вопрос, за что его судить? Не ради этого ли форум создавался? Никто не любит нравоучения, они только провоцируют людей на конфликт и отбивают желание снова обращаться к сообществу.
|
|
| |
EchoIT | Дата: Суббота, 11 Февраля 2017, 19:35 | Сообщение # 15 |
старожил
Сейчас нет на сайте
| Цитата Как говориться "дай человеку рыбу и он будет сыт один день, научи человека рыбачить и он будет сыт всю жизнь". Хотел это написать в том сообщении, но передумал.
Цитата Потому цель всегда важнее средств которыми она достигается. Не факт что человеку нужно становиться специалистом по Unity и мастером по C#, что бы решить ту задачу которая перед ним возникла сию минуту. Каждый сам для себя решает каким путём идти. Таким образом проще было бы заплатить кому-то, кто это сделал бы. А в целом да, верно.
Цитата они только провоцируют людей на конфликт и отбивают желание снова обращаться к сообществу. Зато увеличивают желание разобраться самому. Если бы в своё время на другом форуме меня несколько не послали на три буквы за приставания по поводу добавления новой фракции в игру S.T.A.L.K.E.R., я бы скорее всего сейчас не занимался геймдевом вообще.
Долгожданный анонсик: State of War
|
|
| |
Rean | Дата: Суббота, 11 Февраля 2017, 19:58 | Сообщение # 16 |
участник
Сейчас нет на сайте
| VerdCS, Цитата Только реальность так не работает. Позволю себе не согласиться. Мы пользуемся велосипедом не потому что не можем сделать свой или не понимаем как он работает, а потому что экономим своё время и ценим успешный труд других. Но допустим мы взяли велосипед. Сам по себе велосипед нам не нужен, да и удовольствие от его использования мы особо не испытываем. Основное его назначение для нас, к примеру, - добраться из пункта А в пункт Б. Если мы не умеем кататься на велосипеде, то мы вполне можем попросить кого-нибудь отвезти нас на нашем велосипеде в нужное место. Подобная разовая акция вполне имеет место. Но практика показывает (особенно на этом форуме), что если человек взял себе велосипед, то он собирается не один раз прокатиться из А в Б, а грезит себя финалистом "Тур де Франс". И вот тут уже, хочешь-не хочешь, а научиться кататься придётся. А коль вообще нет желания учиться, то вполне можно делегировать эту "задачу" кому-нибудь другому. Кто за какие-нибудь коврижки согласиться катать тебя взад-вперёд. Так и сейчас. Сомневаюсь, что автору темы необходим лишь описанный функционал и не более. Даже если и найдётся "добрый самаритянин", готовый отвечать на все вопросы автора на этом форуме, то ничего хорошего (в плане результата) из этого не выйдет. Как говорится: плавали - знаем.
Сообщение отредактировал Rean - Суббота, 11 Февраля 2017, 20:46 |
|
| |
URGINSAN | Дата: Суббота, 11 Февраля 2017, 20:38 | Сообщение # 17 |
почти ветеран
Сейчас нет на сайте
| Цитата Rean ( ) Как говориться
Цитата VerdCS ( ) Как говориться Парни, хорош уже тся и ться путать. Глаза режет.
Я на драйве
|
|
| |
Rean | Дата: Суббота, 11 Февраля 2017, 20:48 | Сообщение # 18 |
участник
Сейчас нет на сайте
| URGINSAN, есть грешок. А ещё периодически окончания прилагательных, как у гостей из центральной Азии: хороший девочка. "Какой шустрый мух - то на ВАМ, то на МНУ!"
|
|
| |
VerdCS | Дата: Воскресенье, 12 Февраля 2017, 01:18 | Сообщение # 19 |
частый гость
Сейчас нет на сайте
| EchoIT,
Цитата EchoIT ( ) Зато увеличивают желание разобраться самому. Если бы в своё время на другом форуме меня несколько не послали на три буквы за приставания по поводу добавления новой фракции в игру S.T.A.L.K.E.R., я бы скорее всего сейчас не занимался геймдевом вообще.
Так никогда и не знаешь как оно повернётся, иногда достаточно показать как это делается, иногда просто направить мысль в нужное русло, а иногда лучше всего дать пинка и оно само пойдёт . А уж что из этого получиться никто не знает.
Rean,
Согласен, плавали все. И будем плавать. Новички никуда не денутся и их масса всегда будет основной, пока движок будет жить. Выход только один, запереться и всех игнорировать. Отвечать никто не заставляет. Вы не соглашаетесь, но мы друг другу не и противоречим. Мир работает не так потому что он работает сложнее. Как вы сказали вариантов много и сделать всё своими силами это лишь опция. Выбор за человеком. Рано или поздно возникнет ситуация когда единственным вариантом останется взять и разобраться во всём самому. И она возникнет независимо от того будем мы её создавать искусственно или нет. Готовых рецептов не так много как кажется, и не многие согласятся решать чужие проблемы бесплатно, когда они действительно станут сложными. Просто я считаю что не стоит предвзято относиться к новому человеку, особенно если он вполне адекватно задаёт вопрос, только из-за того что мы уже видим к чему это может привести.
URGINSAN,
Позор мне, стараюсь вычитывать текст, но всё равно упускаю такие моменты.
|
|
| |
Kxarog | Дата: Воскресенье, 12 Февраля 2017, 19:25 | Сообщение # 20 |
участник
Сейчас нет на сайте
| тем временем сижу без рыбы и не умея рыбачить.....
Код using System.Collections; using System.Collections.Generic; using UnityEngine;
public class player : MonoBehaviour {
public int gog;
void OnCollisionEnter2D (Collision2D abc) { if (abc.gameObject.tag == "Player") { gog = 10; } }
void OnCollisionExit2D (Collision2D abc) { if (abc.gameObject.tag == "Player") { gog = -10; } }
void FixedUpdate () { if (Input.GetKey(KeyCode.D)) { transform.Translate(new Vector2 (gog, 0)*Time.deltaTime); } if (Input.GetKey(KeyCode.W)) { transform.Translate(new Vector2 (0, gog)*Time.deltaTime); } if (Input.GetKey(KeyCode.A)) { transform.Translate(new Vector2 (-gog, 0)*Time.deltaTime); } if (Input.GetKey(KeyCode.S)) { transform.Translate(new Vector2 (0, -gog)*Time.deltaTime); } } } но есть проблема, находясь на границе существует шанс(он не очень большой, но все же есть) если нажать на противоположное движение можно выйти за границы и при этом измениться управление (например двигаясь вверх и подойдя к верхней границе в нужный момент нажать вниз, вы выйдите из поля, а команда идти вверх станет идти вниз, влево - вправо). Конечно понимаю, код не шедевр, но хоть что то до чего я додмался сам и потому спрашиваю есть вариант пофиксить такой баг или проще сразу другой скрипт писать?
Сообщение отредактировал Kxarog - Воскресенье, 12 Февраля 2017, 23:23 |
|
| |
|