forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   Проблемы с интерактивностю (http://forum.boolean.name/showthread.php?t=19000)

CostUm 06.03.2014 17:37

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

Arton 06.03.2014 17:45

Ответ: Проблемы с интерактивностю
 
Мм... Судя по некоторым играм "телепортацией" это и делается.

Например есть наковальня. Берём и анимируем в максе персонажа вместе с наковальней, как он на ней куёт. Грузим в игру, скрываем персонажа, остаётся наковальня. Игрок подходит к предмету и начинает использовать, персонаж скрывается (которым управляет игрок), включается его копия которая стоит рядом с наковальней. Проигрывается анимация. Для плавности перехода, сделать проверку на расстояние и с какой стороны находится игрок, можно тупо триггером на пересечении.
Как-то так :dontknow:

Лучше в голову не пришло.

CostUm 06.03.2014 17:48

Re: Проблемы с интерактивностю
 
ну вот есть пара пробелем, первая - это то, что игра с видом от первого лица, и вторая - то, что проект практически и базируется на этой самой интерактивности, и поэтому я хотел сделать её менее шовной

DStalk 06.03.2014 17:53

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

Arton 06.03.2014 17:54

Ответ: Re: Проблемы с интерактивностю
 
Цитата:

Сообщение от CostUm (Сообщение 276186)
ну вот есть пара пробелем, первая - это то, что игра с видом от первого лица, и вторая - то, что проект практически и базируется на этой самой интерактивности, и поэтому я хотел сделать её менее шовной

Для плавности перехода можно сделать автодоповорот камеры игрока (при нахождение в нужном месте), до координат анимированый камеры в максе. Затем когда координаты совпадают, включается анимация ковки.

P. S. То что Dstalk выше успел написать :-)

CostUm 06.03.2014 17:57

Re: Проблемы с интерактивностю
 
ну а вот как так сделать, что бы он подошёл куда надо и развернулся?

DStalk 06.03.2014 18:01

Ответ: Проблемы с интерактивностю
 
сравниваешь разницу координат игрока и "нужного места" объекта (можно сделать dummy в максе и далее findchild найти), и каждый кадр двигаешь перса и проверяется расстояние, отслеживать состояния игрока можно отдельной переменной (например 1-игрок движется, 2-игрок поворачивается, 3-игрок уже на месте, идет анимация действия), тоже самое с поворотом. типа того...:)

CostUm 06.03.2014 18:10

Re: Проблемы с интерактивностю
 
это получается надо сначала развернуть персонажа, затем сделать MoveEntity, затем опять развернуть, но уже в сторону предмета, и там уже проигрывать анимацию? мне именно эти моменты интересны, а с переменными можно разобраться в принципе

CostUm 06.03.2014 23:44

Re: Проблемы с интерактивностю
 
как мне заставить двигаться персонажа к именно той самой опеределёной точке? каким образом?

DStalk 07.03.2014 00:01

Ответ: Проблемы с интерактивностю
 
ну, ищешь нужную точку
Код:

  point=FindChild(Entity,"Name")
далее включаешь "первую фазу" - разворот, нужно посчитать необходимый угол разворота, самый простой (и дурацкий) способ - повернуть игрока к цели, запомнить угол, развернуть назад:
Код:

  current_angle#=EntityYaw(Player)
  PoinEntity(Player,point)
  need_angle#=EntityYaw(Player)
  RotateEntity(Player,0,current_angle#,0)
  Phase=1

посчитали, включили первую фазу, далее уже в основном цикле
Код:

  If Phase=1
    If Int(current_angle#)<>Int(need_angle#) Then
      current_angle#=current_angle#+Sign(need_angle#-current_angle#)
      RotateEntity(Player,0,current_angle#,0)
    Else
      Phase=2
    EndIf
  EndIf

Если углы совпадают - переходим во вторую фазу (переджвижение). С ним все аналогично, но разница в позиции находится функцией EntityDistance(Player,point) - проверяем каждый раз в цикле, двигаем перса.

CostUm 07.03.2014 00:31

Re: Проблемы с интерактивностю
 
походу не понял как правильно, сделал

If Phase=2
If EntityDistance(player,point)<1 Then
MoveEntity player,0,0,0.1
Else
Phase=3
EndIf
EndIf

DStalk 07.03.2014 00:42

Ответ: Проблемы с интерактивностю
 
знак перепутал, у тебя если меньше одного написано в условии...

CostUm 07.03.2014 00:51

Re: Проблемы с интерактивностю
 
хах да попутал) но тем не менее переход на 3-ю фазу не происходит


Часовой пояс GMT +4, время: 03:22.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot