Jak mogę zbudować grę w Unity przy minimalnym / bez użycia edytora wizualnego?

24

Chciałbym napisać grę całkowicie w języku C #. Podczas poszukiwań silnika znalazłem Unity3D, ale wszystkie samouczki i dokumentacja mówią o edytorze wizualnym i IDE Unity, w którym klikasz i wskazujesz, aby tworzyć sceny i skrypty.

Nie chcę tego robić. Wolę pełne pokrycie kodu niż projektantów odciągających ode mnie rzeczy. Chciałbym napisać czysty kod C # od zera lub, w razie potrzeby, skrypty Unity jako dodatek. Nie mogłem znaleźć żadnego wyjaśnienia ani dokumentacji na ten temat; jak mogę zbudować grę za pomocą Unity i minimalnie (lub nie) korzystać z edytora wizualnego?

Promień
źródło
1
Głosując na zakończenie, jest to zalecenie ramowe zamaskowane jako pytanie o Jedność.
BlueRaja - Danny Pflughoeft
2
Nie jestem do końca pewien, czy się z tym zgadzam, choć nie obaliłbym głosowania w społeczności. Zauważę jednak, że to pytanie dotyczy konkretnie niektórych możliwości Unity: odpowiedzi, które nie dotyczą, które mogą zostać usunięte. Spójrzmy prawdzie nie przekształcić off tematu pytanie, czy nie mamy do, dobrze?
Josh
2
Większość programistów szuka edytora wizualnego w pewnym momencie, aby zaprojektować swoje poziomy, ponieważ wizualne pozycjonowanie rzeczy jest o wiele prostsze niż ustawianie pozycji każdego małego doodada w kodzie. To samo dotyczy edycji / projektowania układów GUI. Posiadanie tego już wbudowanego jest ogromną korzyścią IMHO.
bummzack
4
I prefer writing my own level editor which provides only the stuff really neccessary for my gameok, to po prostu oznacza, że ​​nie chcesz używać silnika gry, chcesz programować z biblioteką graficzną. Jednak próbując to zrobić, już trafiłeś w kłopoty techniczne, więc ... wyczuwam tutaj sprzeczność.
jhocking
3
@jhocking Nasza definicja silnika gry wydaje się być zupełnie inna. Biblioteka klas jest silnikiem gry, jeśli oddziela typowe zadania gry, takie jak matematyka kamery, system dźwiękowy i może nawet trochę fizyki, ale projektant nie jest wymogiem i moim zdaniem nie powinien być nawet koniecznością .
Ray

Odpowiedzi:

27

Jestem kompletnym początkującym w Unity, ale teraz tak to robię i to ogranicza użycie edytora do minimum:

W edytorze mam tylko trzy obiekty: pusty obiekt GameObject o nazwie „main”, aparat fotograficzny i światło. I to tylko dlatego, że do tej pory pracowałem tylko z jednym aparatem i jednym światłem, więc było szybciej. Później prawdopodobnie je usunę i pozostaną tylko „główne”.

W „Assets / MyScripts” mam klasę „Main”, która jest dodawana do „main” GameObject jako zachowanie. Co oznacza, że ​​gdy program się uruchomi, zostanie utworzona instancja klasy „Main” i jej metoda. Klasa „główna” wygląda następująco:

using UnityEngine;

public class Main : MonoBehaviour
{

    void Start ()
    {
        // initialize the game
    }

    void Update ()
    {
        // update physics
    }

}

W grze dynamicznie buduję takie środowisko:

GameObject floor = GameObject.CreatePrimitive (PrimitiveType.Cube);
floor.renderer.material.color = RandomGreen ();

Ale dzieje się tak, ponieważ do tej pory robię tylko prototyp. Później będę chciał wymienić kostki na kilka fajnych rzeczy edytowanych w Blenderze. Co będzie wymagało zrobienia ich w Blenderze i zaimportowania ich do Jednostek jako „prefabrykatów”. Następnie podobnie utworzę „prefabrykaty” z kodu C #.

Jeśli chcesz, aby obiekt reagował na zdarzenia, takie jak kolizje z innymi obiektami, możesz utworzyć instancję obiektu i dynamicznie dodać do nich klasę zachowania, która jest klasą C # pochodzącą z MonoBehavior. Na przykład, jeśli chcesz mieć samochód, wykonujesz prefabrykację samochodu i piszesz klasę „CarBehavior” pod kątem jego zachowania w grze.

W ten sposób możesz ograniczyć interakcję z edytorem do minimum, choć prawdopodobnie nie do zera. Teraz zależy to od tego, czy jest to dla Ciebie akceptowalne rozwiązanie.

Viliam Búr
źródło
2
Powiedziałbym, że wygląda to na dość jasną i solidną odpowiedź dla początkującego Unity :)
Ray
Dzięki! Poza tym jestem doświadczonym programistą, ale to mój pierwszy projekt w Unity i jeszcze nie jest skończony. Nie korzystałem jeszcze z prefabrykatów. Mogą występować pewne komplikacje, których obecnie nie jestem świadomy, dlatego zalecam przyjmowanie mojej rady z odrobiną soli. Nawiasem mówiąc, serializacja w Unity wydaje mi się nieco sprzeczna z intuicją. Będę musiał przestudiować go głębiej, co może wpłynąć na niektóre decyzje projektowe.
Viliam Búr,
9

Podczas pracy z Unity musisz popracować nad edytorem Unity; tak po prostu działa Unity.

Jednak ogromna większość tego, co robisz jako programista, nie dzieje się w edytorze Unity; pliki skryptów są zewnętrznymi plikami tekstowymi zapisanymi w zewnętrznym środowisku IDE, a jako programista używasz edytora Unity tylko do łączenia skryptów do uruchomienia, a następnie klikania Play w celu uruchomienia gry. Nie inaczej jest w przypadku łączenia w klasach w ustawieniach projektu, a następnie naciśnięcia przycisku Uruchom w swoim IDE.

Większość innych narzędzi do tworzenia gier, które mają centralny edytor wizualny, są również wyposażone w ograniczoną i nieelastyczną obsługę skryptów, ale Unity nie cierpi z tego powodu. Chociaż wszystko, co stworzono dla Unity, ostatecznie przechodzi przez edytor wizualny, ten podstawowy interfejs obejmuje wiele projektów łączących z niestandardowym kodem działającym w silniku gry Unity. Doświadczeni programiści, nie odrzucajcie tego środowiska programistycznego, myląc go z jakimś twórcą gier z możliwością łączenia z ograniczonymi możliwościami programowania!

(wydaje się również, że książka, którą obecnie piszę, byłaby dla Ciebie świetnym źródłem informacji, ponieważ jest skierowana do doświadczonych programistów)

jhocking
źródło
1
był w trakcie czytania twojej książki, kiedy natknąłem się na tę odpowiedź
max pleaner
6

Wierzę, że szukasz Futile Framework for Unity.

Zasadniczo możesz wtedy programować za pomocą skryptów bez konieczności „przeciągania i upuszczania” rzeczy lub bałaganu za pomocą edytora wizualnego. Wszystko czego potrzebujesz to pojedynczy obiekt GameObject w twojej scenie, który będzie pojemnikiem na całą grę. Następnie wykonujesz wszystko proceduralnie, tak jak w edytorze niewizualnym.

Oświadczenie: Chociaż Futile jest bardzo zorientowany na kod, nieuniknione jest, że będziesz musiał w jakiś sposób zadzierać z edytorem Unity. Ale w Futile jest to znacznie zmniejszone.

midasmax
źródło
2

Chciałbym dodać tutaj wszystkie dobre odpowiedzi, szczególnie odpowiedź @jhockinga:

Prawie wszystko, co znalazłem w Unity, ma zwykły tekst w drzewie folderów projektów. Bezpośrednio edytowałem prefabrykaty i inne obiekty GameOf bez otwierania Unity, a zmiany te zostały pomyślnie znalezione przez innych deweloperów po zatwierdzeniu.

Chociaż do dzisiaj nie wiedziałem aż tyle o Futile Framework, wydaje się, że jest to naprawdę świetny sposób na uzyskanie dostępu do wszystkiego.

Obecnie używam wszystkich funkcji przeciągania i upuszczania zamiast bazowania na skryptach, ale to będzie musiało się zmienić, ponieważ moim celem będą generowane proceduralnie poziomy i źli.

Moje dwa centy mówią, że w zasadzie pobierz kilka obiektów, których potrzebujesz w Unity, a następnie polegaj na skryptach w zewnętrznym edytorze. Możesz zrobić prawie wszystko zwykłym tekstem.

vulpineblazeyt
źródło