Unreal Engine 4
http://uengine.ru/forum/

Нужна помощь с направлением движения.
http://uengine.ru/forum/viewtopic.php?f=19&t=13089
Страница 1 из 1

Автор:  Aksogen [ 29 янв 2018, 16:29 ]
Заголовок сообщения:  Нужна помощь с направлением движения.

Добрый день. Есть такая проблема: при запуске игры(или же симуляции) бот смотрит совсем не туда, куда нужно, несмотря на то, что я его повернул в правильном направлении..как только не пытался вращать, все равно не получается...в чем может быть проблема?

Компоненты:
Код:
   SceneComponent = CreateDefaultSubobject<USceneComponent>(TEXT("SceneComponent"));
   SplineComponent = CreateDefaultSubobject<USplineComponent>(TEXT("SplineComponent"));
   CapsuleComponent = CreateDefaultSubobject<UCapsuleComponent>(TEXT("CapsuleComponent"));
   SkeletalMesh = CreateDefaultSubobject<USkeletalMeshComponent>(TEXT("SkeletalMesh"));

   RootComponent = SceneComponent;
   SplineComponent->AttachTo(RootComponent);
   CapsuleComponent->AttachTo(SkeletalMesh);
   SkeletalMesh->AttachTo(SplineComponent);

Функция движения:
Код:
void AEnemy::move()
{
   SkeletalMesh->SetWorldLocation(SplineComponent->GetLocationAtDistanceAlongSpline(distance, ESplineCoordinateSpace::World));
   SkeletalMesh->SetWorldRotation(SplineComponent->GetRotationAtDistanceAlongSpline(distance, ESplineCoordinateSpace::World));
   distance += speed;
}


Как должно быть:
Изображение

Вот, что происходит при запуске:
Изображение

Автор:  Prytaleks [ 29 янв 2018, 19:19 ]
Заголовок сообщения: 

развернуть его в Блюпринте, так сказать руками, именно меш, мне всегда хватало для решения этой проблемы.
МБ тебе нужно юзнуть галочку Orient Rotation to movement, или же сделать анимации где бот может ходить в стороны или назад, при этом смотря в нужную сторону. В зависимости от того что у тебя там, и как.

Автор:  Snake [ 29 янв 2018, 21:11 ]
Заголовок сообщения: 

все правильно в коде...
а вот епики свой скелетал мешь сделали не по своим правилам(!)
https://docs.unrealengine.com/latest/IN ... index.html
в частности:
Orientation: All models should have their forward dimension facing in the direction of the positive X-Axis

Форвард вектор скелетал мешь компонента должна быть Х-ось.
на сплайне вращение в касательной тоже форвард-X.
на первом скрине видно что форвард стоит Y, а Х смотрит влево.

Так что при срабатывании кода оно выравнивает мешь как положенно.

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

Автор:  Aksogen [ 30 янв 2018, 00:16 ]
Заголовок сообщения: 

Действительно не подумал двигать root. Спасибо, все работает:)

Автор:  Snake [ 30 янв 2018, 07:47 ]
Заголовок сообщения:  Re:

Aksogen писал(а):
Действительно не подумал двигать root. Спасибо, все работает:)

Цитата:
SplineComponent->AttachTo(RootComponent);

и сплайн вместе с ним двигается?

Автор:  Aksogen [ 30 янв 2018, 11:38 ]
Заголовок сообщения: 

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

Автор:  Snake [ 30 янв 2018, 16:32 ]
Заголовок сообщения: 

зачем тогда нужен сплайн компонент в акторе(на скрине), если используется другой из мира?
в общем я думаю ваш вопрос тогда решен... нужно только лишнего посмотреть чтоб не было.

Автор:  Aksogen [ 30 янв 2018, 19:23 ]
Заголовок сообщения: 

Да, вопрос решен.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/