2D Physics и космические корабли
| |
Skyne | Дата: Четверг, 09 Октября 2014, 14:32 | Сообщение # 1 |
частый гость
Сейчас нет на сайте
| Доброго времени суток! Возникла проблема, которую я пытаюсь решить уже несколько дней. Вот задачка...
Есть корабль (top-down), который состоит из квадратов (32х32), каждый из которых имеет collision2d компонент. Все они - дочерние элементы объекта "Корабль" (Ship) (rigidbody2D). Проблема заключаеться в том, что я никак не могу написать толковую физическую модель для игрока. Нужно, что-бы игрок при попадании на "борт" корабля и включении (bool) переменной ботинок начинал двигаться внутри корабля, абсолютно игнорируя его скорость и поворот, поворот и тому подобное. В принципе, проблемой есть то, что игрок и корабль - rigidbody2D объекты и парентинг игрока к кораблю просто не помогает. Также были попытки создать скрипт, который будет присваивать скорость корабля игроку, однако на больших скоростях игрок "слетал". Также, все подобные способы и большая скорость корабля полностью сводили на нет физическое передвижение игрока с коллизиями, так-как 2 rigidbody2D объекта по-теории Unity, двигаються независимо. И так: 1. Можно как-то просто решить проблему используя другой физический движок? Или просто правильно использовать встроенный. 2. Может-ли кто-либо показать пример управления игроком с круглой маской и коллизиями без физического движка?
Заранее огромное спасибо, плюс тому, кто ответит. Очень затормозила это проблема...
Twitter: https://twitter.com/magenta_fox Patreon: https://www.patreon.com/magentafox GitHub: https://github.com/skyne98
Сообщение отредактировал Skyne - Четверг, 09 Октября 2014, 15:46 |
|
| |
MANMANA | Дата: Четверг, 09 Октября 2014, 15:41 | Сообщение # 2 |
почти ветеран
Сейчас нет на сайте
| хм... это получается - при резком повороте корабля вправо, игрока просто шарахнет влево об стенку Цитата Skyne ( ) игрок при попадании на "борт" корабля и включении (bool) переменной ботинок начинал двигаться внутри корабля, абсолютно игнорируя его скорость ? так создать еще одну плоскость, теперь уже прозрачную (или отключив модель, оставив коллайдеры), чуть повыше плоскости корабля (можно очень большую плоскость :)), чтобы игрок бегал по ней. когда не станет нужно - убирай плоскость.
http://www.3dbuffer.com/ Текстуры, Unity3D, Blender: Эффекты, скрипты, моделирование, текстурирование, скульптинг VKонтакте 3Dbuffer
Последнее:
Новый раздел "Текстуры"
Как запатентовать, защитить техническое решение, игру, идею
|
|
| |
Skyne | Дата: Четверг, 09 Октября 2014, 15:51 | Сообщение # 3 |
частый гость
Сейчас нет на сайте
| MANMANA, Суть состоит в том, что-бы игрок бегал по космическому кораблю как в реальной жизни. То-есть, или он стоит, или летит, не должно быть разницы. И да, проект 2D.
Twitter: https://twitter.com/magenta_fox Patreon: https://www.patreon.com/magentafox GitHub: https://github.com/skyne98
|
|
| |
MANMANA | Дата: Четверг, 09 Октября 2014, 19:58 | Сообщение # 4 |
почти ветеран
Сейчас нет на сайте
| скрипт корабля
Код using UnityEngine; using System.Collections;
public class move_ship : MonoBehaviour { void Update () { transform.Translate(Vector3.right * 2 * Time.deltaTime); } }
скрипт меня/игрока Код using UnityEngine; using System.Collections;
public class me_move : MonoBehaviour { void Update () { if (Input.GetKey ("right")) { transform.Translate(Vector3.right * 2 * Time.deltaTime); } if (Input.GetKey ("left")) { transform.Translate(Vector3.left * 2 * Time.deltaTime); } } }
- я падаю на корабль - я ничего не делаю - меня тащит платформа - я удерживаю кнопку влево -> я стою на месте относительно экрана, т.к. в данном случае моя скорость равна скорости корабля с обратным знаком (выражаясь векторами - они направлены строго в противоположные стороны). В то же время я двигаюсь влево (в хвост корабля, учитывая, что правый край - нос корабля) относительно корабля. - я удерживаю кнопку вправо -> я двигаюсь вправо относительно экрана и в нос корабля.
Может, все дело в том, как вы перемещаете своего игрока и/или платформу?
http://www.3dbuffer.com/ Текстуры, Unity3D, Blender: Эффекты, скрипты, моделирование, текстурирование, скульптинг VKонтакте 3Dbuffer
Последнее:
Новый раздел "Текстуры"
Как запатентовать, защитить техническое решение, игру, идею
Сообщение отредактировал MANMANA - Четверг, 09 Октября 2014, 19:58 |
|
| |
Skyne | Дата: Четверг, 09 Октября 2014, 23:21 | Сообщение # 5 |
частый гость
Сейчас нет на сайте
| MANMANA, Есть несколько тонкостей. Игра с видом сверху и игрок находиться "више" корабля. Также корабль двигаеться с помощью физического движка а не статично в коде. Скрипт анализа его перемещения и добавления его игроку работал, но пока скорость корабля не становилась слишком большой, после этого за один кадр игрок оказывался за бортом корабля и по алгоритму ему перестало присваиваться перемещение.
Twitter: https://twitter.com/magenta_fox Patreon: https://www.patreon.com/magentafox GitHub: https://github.com/skyne98
|
|
| |
MANMANA | Дата: Пятница, 10 Октября 2014, 00:26 | Сообщение # 6 |
почти ветеран
Сейчас нет на сайте
| ну я же не знал, что у вас все в парсеках измеряется и за один цикл игрок оказывается за бортом. тут rigitbody Unity бессилен, я полагаю. без знания вашего движка, полагаю, сложно что-то еще предпринять (и так мы уже выяснили, что вид сверху, скорость корабля и его ориентация должна влиять на персонажа, игрок находится выше корабля, т.е. ближе к камере, есть скрипт анализа перемещения корабля, есть физический движок).
игрок падает на корабль "сверху", удаляясь от вас? или нет? по каким осям у вас корабль движется? по какой оси направлена гравитация? по дефолту вниз, т.е. перпендикулярно оси должного падения персонажа? кстати, она у вас работает? в fixedUpdate что-то пробовали делать?
в чем особенность вашего "физического движка" - он похож на Юнити? а то мне выражение статичности перемещения в коде не особо понятно... это через силу он у вас двигается? возможно у вас просто камера на орто настроена и игра превращается в 2.5D?
p.s. просто ради интереса, Longint и Double хватает для таких расстояний и скоростей?
http://www.3dbuffer.com/ Текстуры, Unity3D, Blender: Эффекты, скрипты, моделирование, текстурирование, скульптинг VKонтакте 3Dbuffer
Последнее:
Новый раздел "Текстуры"
Как запатентовать, защитить техническое решение, игру, идею
Сообщение отредактировал MANMANA - Пятница, 10 Октября 2014, 00:30 |
|
| |
Lertmind | Дата: Пятница, 10 Октября 2014, 04:43 | Сообщение # 7 |
заслуженный участник
Сейчас нет на сайте
| Возможно я что-то не понял, но если тебе не надо покидать корабль, то можно использовать две камеры. Где-то у тебя есть статический корабль, там игрок двигается под действием сил, так же есть динамический объект, на котором рисуется этот статический корабль, и он тоже движется под действием сил. Получается, что если в статическом корабле персонаж смотрит в нос корабля, а динамический корабль поворачивается, то игрок всё равно смотрит в нос. С двумя камерами не работал, скорее всего понадобится рендер в текстуру из Pro версии.
|
|
| |
MANMANA | Дата: Пятница, 10 Октября 2014, 11:27 | Сообщение # 8 |
почти ветеран
Сейчас нет на сайте
| постановка задачи хромает, нет у меня полного понимания... почему бы не написать свою гравитацию в пяток строк по оси z, чтобы у тебя персонажа прижимало к кораблю? Но тут опять rigitbody... а может замедлить скорость корабля? -> замедлить скорость планеты, над которой он пролетает - > уменьшить размеры окружения и все получится? или обязателен масштаб 1:1? получается, что у тебя корабль перемещается в пространстве юнитов эток на 5-10, так что игрока сдувает?... тут уж вслепую сложно.
http://www.3dbuffer.com/ Текстуры, Unity3D, Blender: Эффекты, скрипты, моделирование, текстурирование, скульптинг VKонтакте 3Dbuffer
Последнее:
Новый раздел "Текстуры"
Как запатентовать, защитить техническое решение, игру, идею
|
|
| |
Skyne | Дата: Суббота, 11 Октября 2014, 12:54 | Сообщение # 9 |
частый гость
Сейчас нет на сайте
| MANMANA, Гравитации нет, а игрок находиться всего на 1 юнит выше корабля, так-как камера ортогональная (2D Project). Да, можно уменьшить масштаб, однако на движущемся объекте все-равно есть баги с колизиями, так-как маски стен не успевают за спрайтами. Честно говоря, хочпться достигнуть нужного эффекта и без замедления/уменьшения масштаба, потому-что в космических условиях это будет странно смотреться. И нет, над статическим "интерьером" корабля я думал, но этот вариант отбросил.Добавлено (11.10.2014, 12:54) --------------------------------------------- Под словом "физический движок" я имел ввиду встроенный движок 2Д физики, а под "статичной прописаным" назвал прямое взаемодейтвие с Transform-ом
Twitter: https://twitter.com/magenta_fox Patreon: https://www.patreon.com/magentafox GitHub: https://github.com/skyne98
|
|
| |
MANMANA | Дата: Понедельник, 13 Октября 2014, 11:14 | Сообщение # 10 |
почти ветеран
Сейчас нет на сайте
| если у тебя игрок выше корабля, значит у тебя взаимодействия с кораблем нет? ну, рендерь в этом случае корабль (без статики), звезды и все, кроме врагов и всего остального, с чем взаимодействует игрок на одной камере, а корабль и окружение - на другой.
http://www.3dbuffer.com/ Текстуры, Unity3D, Blender: Эффекты, скрипты, моделирование, текстурирование, скульптинг VKонтакте 3Dbuffer
Последнее:
Новый раздел "Текстуры"
Как запатентовать, защитить техническое решение, игру, идею
|
|
| |
Artaniel | Дата: Понедельник, 13 Октября 2014, 20:55 | Сообщение # 11 |
частый гость
Сейчас нет на сайте
| Наверное самое мудрое - не использовать rigidbody для персонажа.
В качестве костыля: Делаем гдето вне доступа камеры копию корабля (хотяб коллаедры без графики). Он стоит на месте, без Rigidbody, просто работает системой стенок, как ее должен воспринимать персонаж. По этому фальшивому кораблю ходит персонаж с Rigidbody по всем правилами. Т.к. корабль никуда не спешит, персонаж не слетит с него. В другом месте, перед камерой, движется настоящий корабль с Rigidbody и физическим управлением. Нам остается только раз в фрейм устанавливать фальшивое изображение персонажа на настоящем корабле точно так же, как сейчас расположен физический персонаж относительно фальшивого корабля. И второая камера не нужна и физика корабля не будет влиять на физику персонажа. Не забыть повороты. Продумать процедуры стыковки/расстыковки (переносить физического персонажа на настоящее поле перед камерой, убирать фальшивку).
|
|
| |
Skyne | Дата: Вторник, 14 Октября 2014, 23:49 | Сообщение # 12 |
частый гость
Сейчас нет на сайте
| Artaniel, очень хорошая и интересная идея. Эта "фальшивку" можно просто разместить статично выше камеры на нулевых координатах. Думаю потрачу время исключительно на второй пункт - "стыковку".
Twitter: https://twitter.com/magenta_fox Patreon: https://www.patreon.com/magentafox GitHub: https://github.com/skyne98
|
|
| |
|