Autor Wątek: Lokalny GameObject.  (Przeczytany 4527 razy)

Offline koirat

  • Użytkownik

# Czerwiec 12, 2014, 14:36:43
Dobór słów jest rzeczywiście nie najlepszy. Napisze krótko jak uważam iż jest to rozwiązane w unity.

W momencie gdy gra uruchamia konstruktor na danym komponencie używa refleksji do sprawdzenia czy ten komponent definiuje jakieś metody które są używane przez engine. Sprawdza  (Awake, Start, Update, FixedUpdate, OnGUI itp...) Jeśli wykryje funkcje typu Update tworzy do niej delegata dzięki któremu później będzie możliwe szybsze wywołanie tej metody.

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Ivian

  • Użytkownik
    • Ivian's Cave

# Czerwiec 12, 2014, 15:13:06
No właśnie imo to jest już resolved w czasie kompilacji. Nie widzę powodu po co to robić w runtime, jako że takie odwołania mają swój koszt i to zapewne nie mały. Pamiętajmy że warstwa z c# to tylko "interfejs użytkownika" a cały engine działa w c++.

Offline koirat

  • Użytkownik

# Czerwiec 12, 2014, 15:33:49
Cytuj
No właśnie imo to jest już resolved w czasie kompilacji.
No a ja uważam że nie masz racji. Jako dowód napisałem że nie musisz używać kompilatora dostarczonego przez unity. Możesz sobie skompilować dll ze skryptami w innym kompilatorze.

Cytuj
Nie widzę powodu po co to robić w runtime, jako że takie odwołania mają swój koszt i to zapewne nie mały.

Co do czasu wyszukiwania takiej funkcji. Być może przechowują MethodInfo dla danego typu komponentu, W tym momencie nie musieli by robić tak bardzo kosztownego poszukiwania metody dla każdego nowo utworzonego komponentu tego samego typu.

Ale i tak rozwiązanie które wprowadzili podoba mi się średnio. Zresztą jak wiele innych dziwnych rozwiązań które wprowadzili.

Offline Ivian

  • Użytkownik
    • Ivian's Cave

# Czerwiec 13, 2014, 12:49:48
Yhh. Ale to nie wyklucza jedno drugiego. Żeby użyć MB skompilowanego w extern. dll musi się ta dll znaleźć w katalogu "Plugins". Unity przy generowaniu kodu (teraz to linker) skanuje metadane od tej .dll i widzi czy jest Update czy nie ma Update.

Offline koirat

  • Użytkownik

# Czerwiec 13, 2014, 14:14:15
Słuchaj, możesz skompilować całą aplikację zewnętrznie (np mono) wgrać do aplikacji z pominięciem edytora i to będzie działać. Unity używa refleksji do wyszukania zarezerwowanych nazw metod: dopiero podczas działania tej aplikacji. To że kompiluje skrypty i je analizuje w trakcie pracy na edytorze to wcale nie znaczy że w jakiś magiczny sposób dokonuje optymalizacji na źródle, albo kodzie wynikowym.
Samo Unity wewnętrznie używa Mono do kompilacji swoich skryptów.