Autor Wątek: Gotowy silnik czy pisanie od podstaw gry do wydania.  (Przeczytany 10314 razy)

Offline koirat

  • Użytkownik

# Czerwiec 29, 2015, 22:47:10
GamoObject.GetHashCode zwraca GameObject.InstanceID i tu jest problem. Bo nie wiadomo co to jest ten InstanceID. Jeśli będe miał dictionary z jakimiś tam obiektami i między innymi z GameObject to może się okazać że jakiś tam inny obiekt będzie miał taki sam HashCode co GameObject.

Offline Mr. Spam

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

Offline Xion

  • Redaktor
    • xion.log

# Czerwiec 30, 2015, 01:40:41
@up: Będziesz miał dictionary/(hash)(mapę)/etc. używające GameObject jako klucza? I jeszcze do tego z wymieszanami jakimiś innymi obiektami jako kluczami? Huh?! Nie wiem, co to za design, ale osobiście trzymałbym się od niego z daleka.

Offline lethern

  • Użytkownik

  • +1
# Czerwiec 30, 2015, 02:55:37
czytam ten post.. i czytam... no i nijak nie widzę wzmianki o gameobject-kluczu
xion, to tak absurdalny pomysł, że nie wiem jak mógł wpaść komuś do głowy

Offline Xion

  • Redaktor
    • xion.log

  • +1
# Czerwiec 30, 2015, 08:06:41
Wiem, że absurdalny. Ale z jakiegoś powodu koirat wspomniał o wbudowanej w język (C#, a także w Javę, Pythona, etc.). funkcji do obliczania hashkodów obiektów. Hashkodów, które istnieją po to właśnie, żeby obiekty można było trzymać w hashowalnych strukturach: w zbiorach jako elementy i słownikach jako klucze.

Stąd moje założenie, że z jakiegoś bardzo dziwnego powodu chodziło mu o słownik kluczowany GameObjectami. Alternatywą była bowiem jeszcze dziwniejsza konstrukcja słownika int->GameObject, gdzie kluczem każdej wartości jest jej własny hashkod. To oczywiście ma zero sensu, bo jest równoważne zwykłemu zbiorowi elementów GameObject; sama struktura danych zapewnia tu unikalność względem hashkodu.

Offline koirat

  • Użytkownik

  • +1
# Czerwiec 30, 2015, 09:39:11
@up: Będziesz miał dictionary/(hash)(mapę)/etc. używające GameObject jako klucza? I jeszcze do tego z wymieszanami jakimiś innymi obiektami jako kluczami?
Ale jaki masz problem z GameObject jako kluczem ? Naprawdę jestem w stanie sobie wyobrazić multum przypadków gdzie było by to użyteczne. Choćby nawet użycie takiego HashSet<GameObject>

Cytuj
int->GameObject, gdzie kluczem każdej wartości jest jej własny hashkod. To oczywiście ma zero sensu, bo jest równoważne zwykłemu zbiorowi elementów GameObject; sama struktura danych zapewnia tu unikalność względem hashkodu.
Tylko że wyszukiwanie danego obiektu w dużym zbiorze może trwać bardzo długo, z użyciem hashcode jest to bardzo wydajne.

Natomiast dlatego int->"Jakis Object" bo nie wiem czy ktoś nie tworzy własnej implementacji GetHashCode dla danego obiektu. Więc aby tego uniknąć (akurat potrzebowałem tego uniknąć) musiałem zawsze zastosować defaultową implementację GetHashCode.

Offline fn2000

  • Użytkownik

# Lipiec 23, 2015, 14:56:55
HashCode - domyślna implementacja tego w C# nie jest polecana do unikalnego oznaczania obiektów.

W temacie: przy obecnych dostępnych narzędziach i SDKach stworzenie gry 3D na bazie własnego silnika lub gotowego SDKa, dla osoby, która nie zna gotowego SDK jest porównywalne - czas na tworzenie silnika jest dyskontowany przez ścieżkę nauki SDKa i jego optymalizację pod konkretne rozwiązanie.

Należy sobie odpowiedzieć na dodatkowe pytania:

- na jakie platformy ma być dostępna gra: im jest ich więcej tym zyskujesz bardziej korzystając z gotowego, multiplatformowego SDKa,

- jaka jest ogólna jakość gry: jeśli tworzysz graficznie BF4 lub Crysisa: SDK traci na atrakcyjności - będzie wymagało głębokiej ingerencji / zaawansowanego korzystania, żeby osiągnąć oczekiwany rezultat.

- czy jesteś programistą czy artystą? Jeśli to drugie to gotowy SDK daje większe szanse na dokończenie projektu,

- jak sprawną kontrolę sprawujesz nad samym sobą? W przypadku tworzenia własnej technologii w 99% przypadków skończysz na tworzeniu silnika na sprzedaż (zarabianie na sprzedaży własnej technologii - czyż to nie wspaniały i nowatorski pomysł? Złośliwość zamierzona) niżeli gry.

Ogólna rada:

- stwórz prototyp gry w Unity (lub innym SDKu) - doprowadź to do wersji grywalnej, z tymczasową grafiką - jeśli dojdziesz do tego etapu jesteś miszczem! Dalej popraw grafikę, daj na Early Access i odcinaj kupony ;)