개발시 스크립트를 사용하는 이유는 무엇입니까?


67

현재 프로젝트에서 Lua 스크립트는 서버 측의 C ++ 함수에 의해 호출됩니다. 그런 다음 스크립트는 해당 솔루션에 여전히 C ++ 함수를 다시 호출합니다. 왜 우리는 그런 일을하고 C ++ 함수를 직접 호출하지 않아야합니까? 스크립트가 필요한 상황은 무엇입니까?

답변:


73

스크립트는 일반적으로 런타임에 컴파일 되지만 호스트 언어는 컴파일 타임에 컴파일됩니다. 즉, 스크립트가 변경되면 다시 컴파일 할 필요가 없습니다. 전체 게임을 다시 컴파일하는 데 몇 분에서 몇 시간이 걸릴 수 있으며 이는 큰 생산성 저하를 의미합니다.

일반적으로 중요한 코드 또는 백엔드 코드는 스크립팅되지 않습니다. 이 코드는 빠르게 실행되어야하며 종종 메모리 관리가 중요합니다.
게임에서 게임 논리 및 구성은 일반적으로 스크립트 파일에 포함됩니다. 이 스크립트는 프로그래머가 아닌 프로그래머 (예 : 디자이너)가 쉽게 업데이트 하여 게임 플레이를 조정할 수 있습니다. 스크립트 언어는 쉽고 그 목적을 위해 용서하는 방식으로 행동합니다.

종종 스크립트 언어는 실시간 스크립팅 에도 사용됩니다 . 일부 게임 플레이 요소를 조정하거나 디버깅 할 때 편리합니다. 많은 게임들이이 목적 (주로 사내)을위한 콘솔을 제공합니다.

스크립트만으로 기존 게임 엔진을 사용하여 게임을 만들 수 있습니다. 게임 엔진 층 따라서 완전히 게임 로직 계층으로부터 분리된다 . 현대 엔진은 일반적으로 이와 같이 쉽게 FPS 또는 RTS 게임을 만드는 데 사용될 수 있지만 어떤 장르에서도 가능하지 않습니다. MMO에는 다른 유형의 엔진이 필요할 수 있습니다.

결론은 디커플링입니다. 위에 나열된 이점은 스크립팅 언어를 만들거나 통합하기위한 추가 작업보다 종종 비쌉니다.


7
일반적으로 프로그래머가 아닌 사람이 스크립트를 업데이트하기가 쉽다는 +1. 디자이너가 항상 프로그래머 인 것은 아니며 반드시 그럴 필요는 없습니다.
Oak

19
스크립팅에 대한 모든 질문에서 스스로 반복하고 있다고 생각합니다. 프로그래밍에 프로그래머가 아닌 사람이 프로그래밍 (스크립팅 포함) 해야하는 경우 나중에 엉덩이에 물릴 것입니다. 디자이너는 항상 프로그래머는 아니지만, 사소한 스크립트를 작성하자마자 (예를 들어 함수를 정의하거나 루프를 사용하려고 할 때) 하나 인 것처럼 가장합니다. 그들이 프로그래밍에 대한 교육을받지 못했다면 그것은 눈물을 흘리며 모든 사람에게 시간을 낭비하게 될 것입니다.

5
Joe-주장을 무효화하지는 않습니다. 단지 "디자인 자료"와 "프로그래밍 자료"를 분리 할 위치를 결정해야하며 분할 선은 설계자의 기술 전문 지식에 따라 달라집니다 (또는 부족함). 그).
Ian Schreiber

3
나는 자기 존중 디자이너가 적어도 하나의 언어로 잘 가르쳐지고 있다고 확신합니다. 일을 좀 더 명확하게하기 위해, 나는 직업이 아닌 사람이 소프트웨어 엔지니어가 아니기 때문에 "비 프로그래머"라는 용어를 뉘앙스로 만들고 싶습니다. 나는 조 (Joe) 덕분에 그 용어가 애매하다는 것을 알고 후회한다. 간단한 XML을 작성하는 사람들부터 하드 코어 어셈블리, 수학 무거운 신호 처리에 이르기까지 광범위한 프로그래머가 있다고 생각합니다. 이것이 "비 프로그래머"이중성 문제를 해결하기를 바랍니다.
Nef

8
나는 디자이너가 생산을 위해 복잡하고 미션 크리티컬 한 스크립트를 작성해야한다는 제안을 듣지 못했습니다. 그러나 프로그래밍에 대한 이해가 부족한 설계자는 일부 스크립트를 실험적으로 조정 한 다음 실제 프로그래머에게 전달할 수 있습니다. 그들은 자신의 테스트를 용이하게하기 위해 런타임에 콘솔에서 간단한 임시 스크립트를 작성할 수있었습니다. 디자이너들이 새로운 화면 디자인을 프로토 타입하기 위해 기본 스크립팅을 활용하고 싶을 수도 있습니다 (반 기능적 대화 형 모형에만 해당되는 것은 아님). 많은 비 프로덕션 코드는 작성해야합니다.
Mike Strobel

38

당신은 잘못된 질문을했습니다. 실제 질문은 왜 C, C ++, Java 등과 같은 "스크립트가 아닌"언어를 사용하는 것입니까? 답은 성능입니다. (그리고 관성 일 수도 있지만 성능 때문에 관성이있을 수 있으며, 훌륭한 C / C ++ / Java를 작성할 수있는 사람이라면 누구나 최소한 통과 가능한 Ruby / Python / Lua / JavaScript를 작성할 수 있습니다.)

우리는 "스크립팅"언어 (실제로 높은 수준의 가비지 수집, 일반적으로 느슨한 타이핑 및 동적 컴파일의 형태를 의미 함)를 사용합니다. 일반적으로 프로그래머를 포함한 모든 사람이 코드를 작성하는 데 더 쉬운 언어이기 때문입니다. malloc 후 해방시키는 것을 기억하거나 코드가 예외 안전하다는 것을 확인하거나 모든 소멸자를 가상으로 만드는 것을 기억하는 것과 같은 어리석은 것들 . 우리 컴퓨터가 무한히 빠르다면 모든 것을 위해 "스크립트"언어를 사용할 것입니다.


4
"디자이너가 프로그래밍 할 수 있도록" 보다이 주장 훨씬 낫습니다. 빠른 개발의 가치를 무시하고 모든 것을 다시 컴파일하지 않고 변화를 실험 할 수 있다는 것은 매우 나쁜 생각입니다.
ojrac

10

게임 로직을위한 스크립팅 언어는 소프트웨어 아키텍처 패턴 Alternate Hard and Soft Layers 의 좋은 예입니다 . 그 사이트의 장점과 그에 대한 이점에 대해서는 그 사이트에 대해 좋은 토론이 있습니다.


8
  1. 각각의 새로운 루아 클래스는 두 줄입니다. 각각의 새로운 C ++ 클래스는 고통입니다.
  2. 원하는 모든 유형이 값을 섞는 것만으로도 유형에 대해 걱정하지 않습니다.
  3. 가비지 콜렉션.
  4. 스크립트 코드는 가상 컴퓨터에서 멋지게 격리되어 있으며, 방황하는 모든 segfault 및 배열 오버플로와는 거리가 멀습니다.

5

스크립트 변경 사항을 쉽게 배포 할 수 있습니다. 예를 들어 스크립트를 데이터베이스에 보관하면 전체 이진 재배포 및 가능한 서비스 재시작 대신 단일 SQL UPDATE 문을 실행 한 다음 실행중인 서비스에 신호를 보내 스크립트를 다시로드 할 수 있습니다.

또한 스크립트 언어는 이해하기 쉽고 프로그래밍하기 쉬운 경우가 많기 때문에 대부분의 코드 (대규모 RPG 인 경우, AI, Spells, Item Effects 및 월드 자체의 스크립트는 종종 엔진 코드보다 큽니다). 스크립트 언어를 사용하면 가비지 콜렉션 (루아의 경우) 및 더 높은 수준의 추상화로 인해 '방법'보다는 '무엇'에 더 집중할 수 있습니다.


4

스크립이 유용한 한 가지 시나리오는 플러그인 / 애드온으로 엔진을 확장하려는 경우입니다. 이러한 확장은 많은 경우에 비전문가 (예 : 고급 게이머 및 애호가)에 의해 만들어집니다. 이 목적을 위해 스크립트가 더 안전하고 쉽습니다. 스크립트를 사용하면 컴파일러를 사용할 필요가 없으며 포인터를 알 필요가 없습니다 ...

이에 대한 좋은 예는 월드 오브 워크래프트 게임입니다. 커뮤니티에서 만든 수천 개의 애드온이 있습니다. 이 애드온은 LUA + XML을 사용하여 작성되었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.