Size: a a a

2019 July 10

BP

Black Phoenix in Unreal Engine
Там зашита обработка только этих двух дефайнов, с точки зрения UHT 'ActualSoundType' будет неизвестным типом
источник

BP

Black Phoenix in Unreal Engine
Black Phoenix
#if SUPPORTS_FMOD
 UPROPERTY(EditAnywhere)
 class UFMODEvent* Sound;
#else
 UPROPERTY(EditAnywhere)
 class USoundBase* Sound;
#endif
вот что я хочу реализовать конкретно
По этой же причине вот эта структура невозможна, парсер не знает заранее какой из двух проперти нужно выбрать для генерации заголовков
источник

BP

Black Phoenix in Unreal Engine
И он в результате выберет оба
источник

BP

Black Phoenix in Unreal Engine
Он умеет выбирать только по двум дефайнам
источник

SY

Selivanov Yevhenii in Unreal Engine
Black Phoenix
#if SUPPORTS_FMOD
 UPROPERTY(EditAnywhere)
 class UFMODEvent* Sound;
#else
 UPROPERTY(EditAnywhere)
 class USoundBase* Sound;
#endif
вот что я хочу реализовать конкретно
UFUNCTION(BlueprintCallable, BlueprintPure)
FORCEINLINE UObject* SoundGetter() const
{
#if SUPPORTS_FMOD
return Cast<class UFMODEvent>(Sound);
#else
return Cast<class USoundBase>(Sound);
}

UPROPERTY(EditAnywhere)
UObject* Sound;
источник

SY

Selivanov Yevhenii in Unreal Engine
По крайней мере,я бы что-то типа такого сделал
источник

BP

Black Phoenix in Unreal Engine
Selivanov Yevhenii
UFUNCTION(BlueprintCallable, BlueprintPure)
FORCEINLINE UObject* SoundGetter() const
{
#if SUPPORTS_FMOD
return Cast<class UFMODEvent>(Sound);
#else
return Cast<class USoundBase>(Sound);
}

UPROPERTY(EditAnywhere)
UObject* Sound;
Тогда в редакторе не будет выбора ассета
источник

BP

Black Phoenix in Unreal Engine
Нельзя будет выбрать Sound удобным образом из списка
источник

BP

Black Phoenix in Unreal Engine
Если что, корень проблемы - один СРР файл в двух разных проектах, в одном нету FMOD
источник

BP

Black Phoenix in Unreal Engine
UFMODEvent по своей природе отличается от USoundBase и не имеет общих корней
источник

BP

Black Phoenix in Unreal Engine
Пока что я придумал только патчить СРР файл перед самой компиляцией и подставлять туда нужные названия :'D
источник

AS

Alexander Shumeyko in Unreal Engine
Black Phoenix
Как я могу сделать вот это одинаковым для проектов где есть FMOD и где его нет?
Можно попробовать написать класс обёртку для фмода и анрильского sound, у которого будет функция GetSound, она будет реализовывать в #if в зависимости от того есть ли фмод, если да, то будет так UFMODEvent* GetSound(), иначе USoundBase* GetSound()
источник

AS

Alexander Shumeyko in Unreal Engine
Для того чтобы в редакторе можно было менять значения в обёртку положить обе переменных, фмод и USoundBase
источник

PL

Peter Leontev in Unreal Engine
Black Phoenix
Пока что я придумал только патчить СРР файл перед самой компиляцией и подставлять туда нужные названия :'D
sfinae?
источник

PL

Peter Leontev in Unreal Engine
Black Phoenix
Пока что я придумал только патчить СРР файл перед самой компиляцией и подставлять туда нужные названия :'D
источник

BP

Black Phoenix in Unreal Engine
Alexander Shumeyko
Можно попробовать написать класс обёртку для фмода и анрильского sound, у которого будет функция GetSound, она будет реализовывать в #if в зависимости от того есть ли фмод, если да, то будет так UFMODEvent* GetSound(), иначе USoundBase* GetSound()
К сожалению у этих обоих классов очень сильно разная база
источник

BP

Black Phoenix in Unreal Engine
Т.е. FMODEvent работают как-то по своему что бы они выбирались как ассеты
источник

BP

Black Phoenix in Unreal Engine
Что бы сделать третий класс который вместе их совмещает... Ну, тогда уже проще держать две копии С++ файла :D
источник

BP

Black Phoenix in Unreal Engine
Мне кажется UHT это тоже не умеет парсить в обьявлениях переменных
источник

PL

Peter Leontev in Unreal Engine
Ещё есть TChooseClass
источник