Полезное

Мы Вконтакте

Discord канал

#
Пред.
12
Аватара пользователя
Пользователь
Сообщения: 7
Добрый вечер, господа.

Что имеется?
Структура:

Код:
USTRUCT(BlueprintType)
struct FWeaponStruct : public FTableRowBase
{
   UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = WeaponData)
      TAssetPtr<UTexture> Icon;
   UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = WeaponData)
      TAssetPtr<UStaticMesh> StaticMesh;
   UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = WeaponData)
      TAssetPtr<UMaterialInstance> Material;
};


и функция получения структуры из таблицы:

Код:
FWeaponStruct AMyGameItem::GetWeaponData(int32 Index)
{
   FWeaponStruct Data = *WeaponDataTable->FindRow<FWeaponStruct >(*FString::FromInt(Index), TEXT(""));
   return Data;
}


В последующих действиях это используется так:

Код:
void AMyGameItem::SetParam()
{
   FWeaponStruct WPData = GetItemData(ID);
   Mesh->SetStaticMesh(WPData.StaticMesh.Get());
   Mesh->SetMaterial(0, WPData.Material.Get());
}



Проблема в том, что объект с ленивой ссылкой (TAssetPtr<>) не находится из таблицы, если данный объект не существует в мире. (хотя в таблице отображаются). Если добавить статику, к примеру, в мир - функция находит объект данной статики из таблицы.

Жесткие ссылки не подходят, в таблице больше 3000 строчек.
В чем мой косяк?

Спасибо!
Аватара пользователя
Пользователь
Сообщения: 474
TAssetPtr попробуй заменить по аналогу с TSubObjectPtrs:

Replace all TSubObjectPtrs with regular ptrs

For example

Code:
UPROPERTY(VisibleDefaultsOnly, Category = "Upgrade Meshes")
TSubobjectPtr<USkeletalMeshComponent> UpgradeMesh1;
becomes

Code:
private:

UPROPERTY(VisibleDefaultsOnly, Category = "Upgrade Meshes")
USkeletalMeshComponent* UpgradeMesh1;
Аватара пользователя
Пользователь
Сообщения: 7
Zhernovoy Sergey писал(а):
TAssetPtr попробуй заменить по аналогу с TSubObjectPtrs:



Код:
warning C4996: TSubobjectPtr is deprecated and should no longer be used. Please use pointers instead.

+ крит UE при запуске :(
Аватара пользователя
Пользователь
Сообщения: 474
Respect писал(а):
Zhernovoy Sergey писал(а):
TAssetPtr попробуй заменить по аналогу с TSubObjectPtrs:



Код:
warning C4996: TSubobjectPtr is deprecated and should no longer be used. Please use pointers instead.

+ крит UE при запуске :(


Я другое имел ввиду ) по аналогии ,а не на :) .Посмотри ссылку "Мозга"
Аватара пользователя
Пользователь
Сообщения: 7
Да вроде то смотрел =)
Но увы, клепал по разному, все тщетно.

Пока не загрузишь в карту, тупо отказывается грузить.
Аватара пользователя
Тех. администратор
Сообщения: 367
TAssetPtr возвращает null если объект не загружен. Соответственно, его нельзя дереференсировать.
Чтобы объект загрузить, нужно его попросить.
Загружать лучше всего через RequestAsyncLoad, как указано в примере по ссылке.
В обработчике объект нужно надлежащим образом использовать, иначе по завершению выполнения выполнения обработчика, объект может быть собран сборщиком мусора.

Цитата:
Пока не загрузишь в карту

Что имеется в виду? Загрузка ассетов не имеет зависимости от загруженности карты.
Аватара пользователя
Пользователь
Сообщения: 7
MOZGIII писал(а):
Что имеется в виду? Загрузка ассетов не имеет зависимости от загруженности карты.


В этом и прикол.
Объект грузит, если данный объект уже загружен. Банально создать на карте.
Ну к примеру, есть статика меча. В таблице указан адрес к нему.

Если данный меч уже был использован, то поиск по таблице находит этот меч.
Если нет - то NULL;

Цитата:
RequestAsyncLoad

А есть какой то пример использования его при структуре / Datatable ?
Аватара пользователя
Тех. администратор
Сообщения: 367
Цитата:
А есть какой то пример использования его при структуре / Datatable ?

http://clip2net.com/clip/m51390/36e52-c ... ?nocache=1
Изображение
Вы не можете это прочитать? Или адаптировать к вашему решению?
Аватара пользователя
Тех. администратор
Сообщения: 367
TAssetPtr ничего не грузит. Сам по себе. Он только содержит ссылку на загруженный объект. Если он загружен. Если нет - вам нужно его загрузить. Причём выполнять загрузку нужно явно, неявная загрузка ассетов - это вообще не хорошо - поэтому такой возможности вообще нет. Да и вообще, там замешан реестр ассетов и всё такое...


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

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