2012-11-13 9 views
8

Próbuję pokazać dwuwymiarową tablicę w edytorze jak „Matrix” Collision warstwy przedstawionej w Jedności: enter image description hereUnity Niestandardowe Editor jak „Warstwa Collision Matrix”

Choć zamiast wyboru muszę ints, i pełna siatka (nie w kształcie trójkąta). Nie potrafię wymyślić, jak to zrobić ... Mogę dostać niestandardowy edytor, chociaż sprawi, że siatka zawiedzie. Czy istnieje sposób, w jaki widzę kod edytora menedżera fizyki (w tym miejscu znajduje się Layer Collision Matrix) lub może ktoś zna dobry sposób na zrobienie tego?

Uwaga: preferowanym językiem jest C#, chociaż dowolny będzie.

Dzięki.

Odpowiedz

6

Kod zaangażowany w to, czego szukasz, jest dość skomplikowany, więc polegam na tobie, aby wiedzieć o czym tu mówię. The Unity docs are your friend.

  1. Tworzenie GUIArea gdzie specjalne narzędzie edytor będzie. Wewnątrz niego umieść wywołanie funkcji , które następnie wywoła inne funkcje renderowania. I podejrzewam, że chcesz tutaj dokonać enkapsulacji. Kapsułowanie gui w innej funkcji pozwoli ci powielić jego funkcjonalność (w granicach twojej abstrakcji) i łatwiej przenosić elementy na ekranie.

  2. Zaprojektuj trzy punkty kontrolne (Vector2). Każda z nich powinna reprezentować górny lewy współrzędny dla twoich etykiet wierszy, etykiet kolumn i pól danych. Zauważ, że kotwica kolumn musi znajdować się bezpośrednio powyżej (ta sama x-wartość co) kotwicy wiersza , ponieważ obracanie (następny krok) spowoduje przekształcenie kotwicy.

  3. Użyj polecenia GUIUtility.RotateAroundPivot(), aby obrócić macierz przekształcenia GUI o o 90 ° wokół punktu kotwicy kolumny.

  4. Napisz długi GUI.Label (lub kilka z nich) dla swoich etykiet. Zakotwicz je na kotwicy kolumny. Zgodnie z powyższym obrazem ciąg znaków etykiety może wyglądać mniej więcej tak, jak " " Domyślnie \ nTransparentFX \ nIntoreRaiwast \ nWater ", gdzie \ n tworzy nową linię.

  5. Ponownie obróć, -90 ° z powrotem do oryginalnej matrycy. Alternatywnie możesz można skopiować GUI.matrix przed krokiem 3, a następnie przypisać go z powrotem do gwarantowanego resetowania matrycy . Obracanie w przód iw tył może powodować błąd z powodu zmiennoprzecinkowej i innej niedokładności.

  6. Napisz etykiety dla wierszy. Ta sama metoda co dwa kroki wstecz. Kotwica je w kotwicy wiersza.

  7. To jest trudniejsza część. Iteruj przez swoje pole danych, tworząc dla każdego elementu w swoich danych mały lub Każdy element będzie potrzebował własnej kotwicy, która jest następnie sumowana z zakotwiczeniem pola danych. Jeśli twoje pole danych jest kwadratową tablicą 2D, wyprowadzenie kotwic będzie proste - ale będziesz mieć również puste elementy w tablicy (jeśli chcesz mieć dokładnie opisaną powyżej funkcjonalność).Jeśli chcesz oszczędzać pamięć, musisz przekształcić indeksy elementów na współrzędne przy użyciu skomplikowanej matematyki. Nie jestem pewna, że ​​mam głowę, jak bym to zrobił.

Mam nadzieję, że niczego nie zapomnę. GUI Unity to b ----. Komentarz, a dołożę wszelkich starań, aby ci pomóc.

+1

Dzięki, wygląda dobrze. Nie wiedziałem o rzeczy RotateAroundPivot (i wyraźnie nie szukałem wystarczająco dokładnie, aby ją znaleźć). Reszta wydaje się stosunkowo prosta (chociaż, jak powiedziałeś, GUI może być trochę denerwujące razy.) Dzięki! Kiedy to zrobię, opublikuję mój kod, ale nie mam czasu, więc może trochę potrwać. –

+0

Cieszę się, że nadal ma znaczenie. Zauważyłem, że pytanie ma dwa miesiące: P – cjcurrie

+1

Tak, obecnie rozwiązałem go w sposób mniej przyjazny dla użytkownika, ale było dobrze, ponieważ to właśnie ja muszę go używać. –