Полезное

Мы Вконтакте

Discord канал

#
Модератор: icms
Аватара пользователя
Пользователь
Сообщения: 2319
апдейт к предыдущему вопросу
Изображение
и это работает даже слишком хорошо .
_________________
we need to go deeper
Аватара пользователя
Пользователь
Сообщения: 2319
viewtopic.php?p=47804#p47804
Snake писал(а):
мне кажется из-за того что доступ к костям по имени оно парсит весь массив костей кри каждом поиске нужной...
из-за этого медлденно ? возможно?
тоесть если б доступ был по индексу - производительность на порядок повысится.
вопрос не сколько примера этой конкретной функции, положение костей нужно же не только для дебага.
надо опять в ++ лезть смотреть как оно там сделанно.


добрался таки до этого момента и поизучал:
файл:Engine\Source\Runtime\Engine\Private\Components\SkinnedMeshComponent.cpp

Код:
         int32 BoneIndex = GetBoneIndex(InSocketName);
         if (BoneIndex != INDEX_NONE)
         {
            OutSocketTransform = GetBoneTransform(BoneIndex);

даешь имя сокета-кости
оно ищет индекс по имени

Код:
int32 USkinnedMeshComponent::GetBoneIndex( FName BoneName) const
{
   int32 BoneIndex = INDEX_NONE;
   if ( BoneName != NAME_None && SkeletalMesh )
   {
      BoneIndex = SkeletalMesh->RefSkeleton.FindBoneIndex( BoneName );
   }

   return BoneIndex;
}


а потом по индексу получает трансформ

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

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

ПС:именно после таких моментов я начинаю понимать ущербность идеи работать только на принтах... все же на плюсах куда больше свободы.
_________________
we need to go deeper
Аватара пользователя
Пользователь
Сообщения: 2319
вот вам интересная задачка:
есть один вектор может вращаться вокруг ортогональной(задает плоскость вращения) статичной оси.
нужно: ограничить вращение вектора от -360 до +360 (два оборота от лимита до лимита).
тоесть вращая вектор получаем значение угла от -360 до 360.
_________________
we need to go deeper
Аватара пользователя
Пользователь
Сообщения: 2319
может кому-то пригодится
кламп ветора в конусе
Изображение
_________________
we need to go deeper
Аватара пользователя
Пользователь
Сообщения: 4069
вообщем решил добавить слоты сохранения, и что бы в слот писало имя левела и дату. Utc возвращает время без нулей, тоесть 3 часа, 5 минут возвращает как 3 и 5, мне же в тексте хочется что бы было 03:05, то есть если число меньше 10 мне надо добавить к цифре 0, и вот тут нода аппенд дала сбой, не хочет добавлять 0 слева и пробел, любую другую цифру, или если ноль будет справа - добавляет.
Как мне добавить 0 в стринг - слева?

Изображение


p.s. вот так получилось

Изображение
Аватара пользователя
Пользователь
Сообщения: 2319
Prytaleks, в первом варинате не работает потому что не может быть интежера 01 или 05, только 1 и 5 и тд.
потому что это целочисленный тип данных.

кстати я заметил что "селект бай бул" иногда странно работает,
в частности "селект трансформ бай бул"... если использовать вместо него бранч тогда все срабатывает как нужно, тоесть похоже в коде где-то ошибка у селекта. Но надо еще потестить прежде чем баг репорт писать.
Может кто-нить быстро протестить ноду "селект трансформ бай бул", нормально она у вас переключает значения?
_________________
we need to go deeper
Аватара пользователя
Пользователь
Сообщения: 2319
Prytaleks, и почему макрос в виджете?
не лучше ли сделать функцию в "блуепринт лайбрари" что-то типа
FString intTimeToString(int32 IntTime)(...)
и вызывать ее где угодно. Не только же в виджете она может пригодиться...
_________________
we need to go deeper
Аватара пользователя
Пользователь
Сообщения: 4069
Snake писал(а):
Prytaleks, в первом варинате не работает потому что не может быть интежера 01 или 05, только 1 и 5 и тд.
потому что это целочисленный тип данных.

ага, тупанул чутка))
Аватара пользователя
Пользователь
Сообщения: 4069
Snake писал(а):
Prytaleks, и почему макрос в виджете?
не лучше ли сделать функцию в "блуепринт лайбрари" что-то типа
FString intTimeToString(int32 IntTime)(...)
и вызывать ее где угодно. Не только же в виджете она может пригодиться...


сделал, но что то не очень удобно, можно ли макрос подобный сделать?

Изображение

p.s. я видел макро лайбрари, но там чуть ли не актор предлагают создавать, как то жирно для такого маленького макроса.
Аватара пользователя
Пользователь
Сообщения: 2319
зачем макрос? pure - функцию.
макросы нужны только если "flow-control" ноды в них использовать.
или Еxec на несколько выходов.

создаем библиотеку
Изображение

создаем функцию
Изображение

выставляем если нужно pure вызов
Изображение



и вызываем ее потом где угодно
Изображение

в эту же библиотеку добавляем и другие общие функции, которые доступны везде. Не забываем указывать категрию чтоб не запутаться потом когда их много. MyBPLib|Time например.
_________________
we need to go deeper


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

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