Kiedy miałbym używać „skryptów” lub „skryptów” w grze, w przeciwieństwie do podstawowego języka?

13

Terminy skrypty i skrypty wydają się być używane zamiennie w Game Development Stack Exchange, ale poza czytaniem pytań dotyczących wyboru języka skryptowego, nie rozumiem związku między skryptami i skryptami oraz językiem podstawowym. Co zazwyczaj robi skrypt, kiedy byłby używany, i czy skrypty w niektórych kontekstach (określonych przez programistów gier) są inne niż język skryptowy?

Tetrad
źródło
@Tetrad Dziękuję za link, ale myślę, że drugie pytanie dotyczy bardziej podstawowego pytania dotyczącego architektury „dlaczego”, a nie tego, co i kiedy.
2
„co” i „kiedy” będą specyficzne dla twoich przypadków użycia. „Dlaczego” daje możliwość podejmowania decyzji. Bez konkretów pytanie to jest dupek (w moich oczach).
Tetrad

Odpowiedzi:

15

Skrypty są napisane dla języka skryptowego. Ludzie mogą używać słów w zdaniach slangowych, aby uzyskać zamieszanie, o którym mówisz, ale zapytaj kogokolwiek o definicje Skryptu, Skryptu i Języka Skryptu, a otrzymasz coś takiego: Skrypty to czynność pisania Skryptów za pomocą Języka Skryptu.

Osadzając język skryptowy w silniku gry lub języku podstawowym, o którym mówisz, odsłaniasz nie tylko obiekty w silniku gry, ale także pozwala napisać logikę dla silnika gry. Inną ważną rzeczą jest to, że zamienia to grę w rodzaj maszyny wirtualnej, ponieważ języki skryptowe rzadko kompilują się do języka maszynowego, a zamiast tego są wprowadzane w postaci kodu bajtowego i interpretowane w czasie wykonywania przez silnik gry.

Ma to ogromne zalety dla zespołu programistów, z których kilka można znaleźć na liście poniżej:

  • Językami skryptowymi zwykle zarządza się pamięcią, więc nie musisz się martwić o przydziały
  • Zazwyczaj są to luźno napisane języki, które eliminują potrzebę upewnienia się, że używasz typu zmiennej do tego, co robisz, po prostu stwórz zmienną i idź z nią.
  • Same języki są często bardzo uproszczone, a jednocześnie zapewniają sporą kontrolę osobom, które nie są programistami
  • Zmiana skryptów nie wymaga ponownej kompilacji silnika podstawowego.
  • Skrypty kontra kodowanie często skracają czas potrzebny na bardzo iteracyjne dostrajanie logiki gry.
  • W zależności od projektu i języka często można ponownie załadować skrypt podczas działania gry, aby jeszcze łatwiej dostroić / przetestować.

Jestem pewien, że lista może być kontynuowana i jestem pewien, szczególnie, gdy wchodzisz w wyspecjalizowane typy gier i jak skrypty mogą pomóc zdefiniować reguły tworzenia grup dla przenoszenia grup jednostek w RTS lub w jaki sposób możesz stworzyć logikę interfejsu użytkownika w język skryptowy w celu zapewnienia rozszerzalnego interfejsu użytkownika użytkownikom końcowym i tym podobnym.

James
źródło
9

Korzystanie ze skryptów ma wiele zalet w porównaniu z „językiem podstawowym”. Niektóre z nich obejmują:

  • Przenoszenie (więcej) treści od głównych programistów do artystów, uwalnianie głównych programistów do tworzenia zadań z zadań gry
  • Skrypty są zwykle piaskownicami, nie mogą w tym zrobić nic naprawdę niebezpiecznego
  • Modyfikacja skryptów nie wymaga ponownej kompilacji i ponownego uruchomienia gry
Jari Komppa
źródło
Czy jako pierwszy punkt możesz podać przykład jednej funkcji, która zostałaby przeniesiona do skryptu do edycji przez artystów?
@Brian Reindel Przykładami mogą być statystyki broni / NPC, AI i mapy / poziomy.
Hackworth,
1
@Hackworth Czy mówisz, że programowanie AI jest wykonywane przez artystów? Skrypty, które wykonałby Artysta, obejmowałyby skrypty do animacji i renderowania obiektów 3D i tym podobne.
KRB,
3
Artyści nie powinni być zmuszani do programowania. Oddzielasz silnik od logiki gry ze względu na modułowość , a nie ze względu na odciążanie rozwoju od ludzi, których mocnymi stronami są gdzie indziej.
Jon Purdy,
1
@James cóż, chodzi o to, że programują „lekko”, ale są w obozie „content”. Dlatego terminologia jest trudna. =)
Jari Komppa
6

Skrypt jest zwykle fragmentem kodu, który działa poza silnikiem podstawowym. Zwykle jest zawarty w plikach tekstowych, gdziekolwiek chcesz je przechowywać. Następnie jest zwykle ładowany przez silnik, analizowany i wykonywany w czasie wykonywania.

Zasadniczo dzieje się tak, że niezależnie od używanego języka (na przykład Lua, Angelscript), język ten zwykle ma pewne funkcje, które umożliwiają programistom silnika udostępnienie funkcji silnika, a nawet całych klas, instancji „silnika skryptowego”, który jest obecnie uruchomiony .

Na przykład (całkowicie głupi przykład, ale po to, aby uzyskać sens) kod gry może mieć funkcję publiczną, która odradza gdzieś zombie:

void SpawnZombie(int x, int y, int hp /* whatever else */)
{
   //...
}

Język skryptowy, którego używasz teraz, umożliwia udostępnienie tej funkcji działającemu parserowi skryptów. Oznacza to, że możesz otworzyć plik tekstowy, napisać „SpawnZombie (200,300,1337)”, a gdy silnik wykona kod, zombie pojawi się w tym miejscu.

Inne odpowiedzi już wymieniają kilka dobrych przykładów tego, jak to jest typowo używane, ale pomijają jeden punkt, który uważam za bardzo ważny:

Tego rodzaju skrypty bardzo ułatwiają debugowanie lub testowanie rozgrywki w czasie wykonywania.

Powiedzmy, że chcesz wymyślić idealny sposób na umieszczenie zombie na mapie, aby miał maksymalny efekt odstraszania gracza, gdy tylko go odkryje. Bez obsługi skryptów będziesz musiał wyjść z aplikacji, zmienić niektóre magiczne liczby w kodzie, ponownie skompilować i przetestować.

Dzięki obsłudze skryptów (pod warunkiem, że masz już pewną metodę wprowadzania tekstu w czasie wykonywania, na przykład konsolę debugowania), wystarczy wpisać „SpawnZombie (333,444,555)” i zobaczyć, jak to wygląda.

W ten sam sposób możesz spawnować broń, pojazdy, ładować różne mapy, zmieniać wartości niektórych rzeczy w grze itp., Zaatakować wrogów, ponieważ nie chcesz tracić czasu na dotarcie do części, która musi być testowane itp.

Pozwoli ci to zaoszczędzić mnóstwo czasu w bardziej złożonych grach.

TravisG
źródło
2

1) Skrypty są często znacznie łatwiejsze do modyfikacji niż kod.

2) Skrypty można często modyfikować w terenie. Pozwala to na modyfikowanie gry.

Loren Pechtel
źródło
Czy można więc powiedzieć, że twoje skrypty są zbudowane z języków, które nie zostały skompilowane, aby mogły być edytowane przez kogokolwiek?
@Brian Reindel: Ogólnie tak.
Loren Pechtel,
2

Większość języków skryptowych jest o wiele bardziej ekspresyjna niż język w rdzeniu silnika. Często silnik jest napisany w języku niskiego poziomu (np. C ++) ze względu na wydajność, ale kod rozgrywki nie musi być tak wydajny, dlatego priorytety zmieniają się w kierunku łatwego wyrażania funkcjonalności.

Na przykład pisanie dynamiczne a statyczne. Kolejny przykład: odśmiecanie pamięci a ręczne zarządzanie pamięcią.

jhocking
źródło
0

Skrypty pozwalają pisać logikę na wyższym poziomie. Innymi słowy, piszesz mniej kodu z większą funkcjonalnością.

Na przykład poniżej pokazano różnicę między pisaniem czegoś w kodzie a pisaniem w języku skryptowym.

Kod gry

Update Loop
{
    if (CarExplodeAnimation.FinalFrame == true)
    {
        SceneGraph.Remove(Car);
        Message("You have destroyed the car.";
    }
    else
    {
        CarExplodeAnimation.AdvanceToNextFrame();
    }

}

Kod skryptu

PlayAnimation(ShipExplode)  // blocks until animation completes
Message("You have destoryed the car.")

Zobacz, o ile mniej kodowania musi zrobić projektant, jeśli używasz języka skryptowego?

Powodem jest to, że w kodzie gry musisz podzielić wydarzenie na wiele ramek i napisać kod z perspektywy wielu ramek. Z drugiej strony, skrypty pozwalają myśleć o zdarzeniu wielu ramek jako o pojedynczym wierszu kodu, ponieważ wszystkie dodatkowe kody są abstrakcyjne za funkcją skryptu.

Możesz zapytać, ale czy nie można też zapisać tej funkcji w kodzie gry? Cóż, tak, ale to oznacza, że ​​projektanci będą musieli otworzyć kod źródłowy silnika gry i napisać tam wszystkie kody, a Ty nie chcesz, aby Twoi projektanci przechodzili przez kod źródłowy silnika gry (mogą przypadkowo zmienić jakiś inny kod i cała ta awaria).

Zamiast tego chcesz, aby projektant zrobił coś takiego: Kliknij prawym przyciskiem myszy samochód w Edytorze map, kliknij polecenie Wstaw skrypt, wpisz kody skryptu. Krytyczne kody źródłowe silnika gry nie powodują bałaganu.

Deweloper
źródło