Error,  Projekty

Błąd przy zamianie wersji projektu w UnrealEngine, error CS0246

Przychodzą chwilę, kiedy wydawca stworzy tak dużą aktualizację swojego produktu, że opatrzy go jako nową wersje. Zabieg ten jest całkowicie okej, bo oznacza, że produkt się rozwija i ciągle dochodzą do niego nowe funkcje, albo przynajmniej jest wspierany. Jednak, wymusza to aktualizacje do najnowszej wersji, a z tym może być już różnie.

Błąd oraz rozwiązanie, jakie tutaj opiszę pojawiło się u mnie, gdy chciałem zamienić projekt Unreal Engine z wersji 17 na wersję 20, chociaż czytałem, że problem zdarzał się też przy próbie zamiany na wersję 18. Dlatego, jeżeli Ciebie, ten problem również dotknął, możesz zobaczyć jak sobie z nim poradzić.

 

Opis błędu

Zamiana wersji projektu następowała typowo, próbowałem otworzyć starszy projekt w nowszej wersji. Program pytał się mnie, czy chce zmienić wersję na tę, z której uruchamiam projekt. Oczywiście, że chce! Po to zainstalowałem tylko jedną wersję silnika, a nie pięćdziesiąt. Do zaktualizowania dostałem parę możliwości, wypróbowałem wszystkie i żadna nie zadziałała. Spróbowałem również zaktualizować wersje bez uruchomionego silnika, po prostu przeszedłem do katalogu z projektem i tam spróbowałem ponownie. Błąd jednak sam pozbyć się nie chciał.

Błąd o którym tu mowa to CS0246, a programowi nie odpowiadało to, że nie może dostać się do plików UIBuildBinaryConfiguration.

 

Jak to naprawić?

Aby rozwiązać problem, należy zmodyfikować trzy pliki, które znajdziemy wewnątrz projektu. Są to:

  • Nazwa.Build.cs
  • Nazwa.Target.cs
  • Nazwa.Editor.Target.cs

 

Gdzie nazwa, to nazwa twojego projektu. Dwa pliki znajdują się w folderze Source (wewnątrz katalogu projektu), a żeby dotrzeć do trzeciego (pliku Build), należy przejść jeszcze z tego miejsca do folderu o nazwie takiej samej jak nazywa się twój projekt.

Edytowanie pliku Nazwa.Target.cs

W pliku tym należy całkowicie usunąć z kodu metodę SetupBinaries i zostawić jedynie konstruktor. W konstruktorze należy jeszcze odwołać się do base i przekazać do niego parametr Target. No i na koniec dopisać jedną linijkę kodu wewnątrz konstruktora.

ExtraModuleNames.Add("Nazwa");

 

Edytowanie pliku NazwaEditor.Target.cs

Dokładnie te same kroki należy wykonać, podczas edycji tego pliku. Trzeba zmienić definicje konstruktora, dodać wywołanie takiej samej metody wewnątrz konstruktora oraz usunąć metodę.

Edytowanie pliku Build

Tutaj jest trochę inaczej, wystarczy zmienić definicje konstruktora, ale zmienia się w nim również typ parametru. Reszta kodu pozostaje bez zmian.

Konstruktor przed zmianą:


public Lublin(TargetInfo Target)

Konstruktor po zmianie:

public Lublin(ReadOnlyTargetRules Target) : base (Target)

 

Przyznam, że nie o takiej tematyce chciałem stworzyć następny wpis, jednak błąd nastąpił niespodziewanie i aż szkoda, żebym go nie opisał. Szczególnie, że nie lubię błędów natury konfiguracyjnej, a te, jak wiadomo zdarzają się na ogół często. Na szczęście nie był to jakiś błąd, nad którym musiałem spędzić mnóstwo czasu, w sumie to projekt wczytuje mi się dłużej, niż go naprawiałem (włączył się i wyrenderował dopiero jak kończyłem pisać tego posta). Czy was też irytują błędy takiego typu? Które nie są związane z tym co robicie, a jedynie z otoczką? Komentujcie.

Social media & sharing icons powered by UltimatelySocial