Naprawa namespace’ów w Unity

Jest jeden problem z Unity, mogący bardzo utrudnić pracę w późniejszych etapach projektu. Dodając nowy skrypt zostaje utworzony plik .cs z samą klasą. Nie jest owinięty w żadną „przestrzeń nazw” (ang. namespace). Dopóki nie korzystamy z Asset Store wszystko powinno być w porządku. Jeśli jednak zdecydujemy się zaimportować skrypty z zewnątrz to istnieje szansa na mały armagedon. Unity nie reaguje dobrze na dostępne globalnie klasy o tej samej nazwie, np. Player.

Rozwiązaniem tego problemu jest zmodyfikowanie szablonu nowego pliku i pamiętanie o kopiowaniu jednego skryptu przy zakładaniu nowego projektu. Obejście tego problemu znalazłem na forum Unity.

Templatka

U mnie znajduje się ona pod adresem C:\Program Files\Unity\Editor\Data\Resources\ScriptTemplates\81-C# Script-NewBehaviourScript.cs. Domyślnie wygląda mniej więcej tak:

Wystarczy owinąć ją w zmienną, która przy tworzeniu skryptu będzie zastępowana np. nazwą projektu.

Podmianka

W Unity istnieje kilka specjalnych folderów. Przeważnie używam tylko trzech z nich: Resources, StreamingAssets oraz Editor. Skrypty umieszczone w tym ostatnim odpowiadają za dodawanie funkcjonalności do środowiska podczas developmentu oraz nie są dostępne w runtime. To tam wrzuca się np. testy jednostkowe.

Pozostało nam więc utworzenie folderu Editor w katalogu głównym projektu. Tam dodajemy nowy skrypt, który u mnie nosi nazwę NamespaceFixer.cs. Ma on za zadanie podmienić jedną rzecz przy tworzeniu nowego pliku C#.

Najważniejsza w nim jest linijka 23 – podmieniająca tekst z templatki na nazwę projektu. W ten sposób możemy też dodać inne rzeczy jak datę utworzenia pliku czy autora skryptu, jednak ja aktualnie nie widzę takiej potrzeby.