Войти
ПрограммированиеФорумФизика

Обычная проблема новичка при создании игры

#0
15:31, 20 фев. 2018

Привет. Я только начинаю учить Unity и поэтому прошу простить некоторые ошибки. Я хочу создать игру вроде StackJump (ссылки ниже). Ну и вот никак не могу понять, что именно и как я должен использовать для создания такой игры. Должен ли я использовать физику (что вроде как логичнее), или лучше перемещать объекты, изменяя их позиции вручную в Update () и FixedUpdate().

Предположим я решил использовать физику, можете несколькими словами направить меня на путь истинный, как я могу реализовать эту функциональность и что мне нужно использовать. Нужна самая общая информация, нет необходимости подробно описывать процесс разработки.

[url = https://play.google.com/store/apps/details?id=io.voodoo.stackjump] Игра на PlayMarket[/url]

Видео игры


#1
21:43, 20 фев. 2018

Ну там есть физика , а именно ускорение! Но я не думаю что ради такой простой игры тебе нужна физика ,
Хватит колизии и примитивного ускорения!

#2
10:51, 21 фев. 2018

Т.е. если я правильно понимаю, то RigidBody у всех движущихся блоков должны быть isKinematic?

А еще вопрос, как определить в какую сторону блок ударил игрока? Ведь коллайдер будет реагировать и когда игрок прыгнет на блок, и когда блок ударит игрока вбок?

#3
(Правка: 11:49) 11:16, 21 фев. 2018

Можно обойтись парой расчетов, но для этого надо знать хоть какую то математику/геометрию.

Macmep_Uoga
> Т.е. если я правильно понимаю, то RigidBody у всех движущихся блоков должны
> быть isKinematic?
RigidBody тебе вообще не понадобиться. Но если все таки использовать такой подход, то он должен быть только на персонаже.

Помимо этого для реализации этой игры можно использовать хитрость, чтобы реализовать ее механику достаточно 2-х кирпичей с коллайдерами.

Macmep_Uoga
> А еще вопрос, как определить в какую сторону блок ударил игрока? Ведь коллайдер
> будет реагировать и когда игрок прыгнет на блок, и когда блок ударит игрока
> вбок?
Этим всем занимается RigidBody. Проверить это можно по событию OnCollisionEnter.

#4
(Правка: 12:12) 12:12, 21 фев. 2018


> можно обойтись парой расчетов, но для этого надо знать хоть какую то
> математику/геометрию.

> Помимо этого для реализации этой игры можно использовать хитрость


Можно чуть подробнее об этом?

#5
12:40, 21 фев. 2018

Macmep_Uoga
> Можно чуть подробнее об этом?
Macmep_Uoga
> Нужна самая общая информация, нет необходимости подробно описывать процесс
> разработки.
Подробно общими словами? Более подробно я просто выложу реализацию этой игры.

#6
14:41, 21 фев. 2018

Я же не прошу выложить код программы. Просто чуть подробнее о вашем видении реализации

#7
(Правка: 19:41) 15:24, 21 фев. 2018

Позняк метаться

http://www.panteleymonov.ru/files/game_example/stack_jump/

+ Показать
+ Показать
Прошло более 8 месяцев
#8
(Правка: 16:57) 16:55, 7 ноя. 2018

foxes
Блин, ну чувак. Это понятно и ежу ясно. Вопрос сейчас в другом. (для начала взгляни на видео выше)

Смотри, у меня есть объекты Player(это прыгающая фигня) и Block(прилетающие блоки). Как понять, что Block ударяет в левый или же в правый бок прыгающей фигни (Player). Да, да, можно сделать RayCast, но вот в случае такой ситуации как на рисунке райкаст покажет, что Block ударил вправый бок Player, хотя удар пришелся в "дно" Player -а и он должен тупо приземляиться, вместо того, чтобы фигачить в закат. Вопрос, как определить в какую сторону блок ударяет в коллайдер игрока?

blocks | Обычная проблема новичка при создании игры
#9
(Правка: 17:36) 17:36, 7 ноя. 2018

возьми просто три колайдера: ноги, левый и правый бок
и с них принимай колизию, проще не куда

#10
(Правка: 2:51) 1:49, 18 ноя. 2018

Macmep_Uoga
Ну тут нюанс механики. Я не вижу в этом критичной проблемы, ты выбрал куб коллайдер вместо шара. Если проблема в том как это решить на кубах то даже описанная тобой проблема не факт что имеется. Во первых тут действует сила тяжести, которая действует на центр и заставить кубик опрокинуться, потому что он не стоит центром на кубике. Без физики тут как раз проблемы нету, рейкаст тут покажет точку касания, которую можно посчитать как слева так и снизу - это уже от твоей ручной математики зависеть будет. Но я бы с такой реализацией не парился, а взял то что уже привел в пример выше. Да и на видео там тоже таких проблем нету, там его все время в бок сталкивали без всяких прыжков, а прыгает он достаточно быстро чтобы замечать такую проблему. И определить в какую сторону его спихнули можно хотя бы по тому - в какую сторону двигался сам блок с которым столкнулся персонаж, но вот для чего это делать мне не понятно.

#11
18:18, 13 дек. 2018

foxes
Fairgon

Парни, здорово. Слушайте, вопрос по теме, может вы встречали такое: когда один объект падает на другой (Player падает на Block), то коллизия не сразу происходит. Т.е. Player сначала немного проваливается в Block, затем только происходит коллизия.

isTrigger = false
на обоих колайдерах. Из-за чего такое может быть?

#12
20:04, 13 дек. 2018

Из за того что не надо использовать коллизию, а надо использовать коллайдеры.

#13
11:54, 14 дек. 2018

sledo
Что значит

не надо использовать коллизию, а надо использовать коллайдеры.

Я просто использую метод
void OnCollisionEnter(Collision collision) {}
. На обеих объектах стоят BoxCollider-ы.
#14
18:41, 14 дек. 2018

Ну так вот и ловите событие от колайдеров

ПрограммированиеФорумФизика