Полезное

Мы Вконтакте

Discord канал

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

Компоненты:
Код:
   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;
}


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

Вот, что происходит при запуске:
Изображение
Аватара пользователя
Пользователь
Сообщения: 4069
развернуть его в Блюпринте, так сказать руками, именно меш, мне всегда хватало для решения этой проблемы.
МБ тебе нужно юзнуть галочку Orient Rotation to movement, или же сделать анимации где бот может ходить в стороны или назад, при этом смотря в нужную сторону. В зависимости от того что у тебя там, и как.
Аватара пользователя
Пользователь
Сообщения: 2319
все правильно в коде...
а вот епики свой скелетал мешь сделали не по своим правилам(!)
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 градусную конверсию можно проще сделать... без умножения...но лучше скелетал мешь починить один раз)
Ну и наконец почему двигаем скелетал мешь? может лучше двигать рут актора или савмого актора как это делают все? Проблем уже таких не будет, хоть вверх ногами в акторе его ставь.
_________________
we need to go deeper
Аватара пользователя
Пользователь
Сообщения: 20
Действительно не подумал двигать root. Спасибо, все работает:)
Аватара пользователя
Пользователь
Сообщения: 2319
Aksogen писал(а):
Действительно не подумал двигать root. Спасибо, все работает:)

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

и сплайн вместе с ним двигается?
_________________
we need to go deeper
Аватара пользователя
Пользователь
Сообщения: 20
Получается, что так. Однако, сплайн по которому мне необходимо двигать ботов, расположен в мире и хранится в классе Spawn. При спавне врага, я просто передаю ему информацию о мировом сплайне.
Аватара пользователя
Пользователь
Сообщения: 2319
зачем тогда нужен сплайн компонент в акторе(на скрине), если используется другой из мира?
в общем я думаю ваш вопрос тогда решен... нужно только лишнего посмотреть чтоб не было.
_________________
we need to go deeper
Аватара пользователя
Пользователь
Сообщения: 20
Да, вопрос решен.


Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10

UEngine.ru © 2017
Все права защищены. При копировании материалов с сайта, ссылка на первоисточник обязательна.
Яндекс.Метрика
Главная страница