핵심 언어와 달리 게임에서 "스크립트"또는 "스크립트"를 언제 사용합니까?


13

스크립트와 스크립팅이라는 용어는 게임 개발 스택 교환에서 상호 교환 적으로 사용되는 것으로 보이지만 스크립팅 언어 선택에 대한 질문을 읽는 것 외에는 스크립트와 스크립팅의 관계와 핵심 언어를 이해하지 못합니다. 스크립트는 일반적으로 언제 사용되며 스크립트 언어와 다른 컨텍스트 (게임 프로그래머가 정의한대로)의 스크립트는 무엇입니까?



@Tetrad 링크에 감사드립니다. 그러나 다른 질문은 무엇과 언제가 아니라 "왜"라는 기본적인 아키텍처 질문에 대해 더 많이 논의하고 있다고 생각합니다.

2
"무엇"과 "언제"는 사용 사례에 따라 다릅니다. "왜"는 의사 결정 능력을 제공합니다. 구체적인 내용이 없으면이 질문은 속임수입니다 (내 눈에).
Tetrad

답변:


15

스크립트는 스크립팅 언어로 작성되었습니다. 사람들은 속어 문장의 단어를 사용하여 당신이 언급하고있는 혼란을 얻을 수 있지만 스크립트, 스크립팅 및 스크립팅 언어의 정의를 누군가에게 요구하면 다음과 같은 것을 얻을 수 있습니다. 스크립팅은 스크립팅 언어를 사용하여 스크립트를 작성하는 행위입니다.

스크립팅 언어를 게임 엔진에 포함 시키거나 참조 할 때 핵심 언어를 사용하면 게임 엔진 내의 개체뿐만 아니라 게임 엔진에 대한 논리를 작성할 수 있습니다. 또 다른 주목할 점은 스크립트 언어가 기계 언어로 컴파일되는 경우가 거의 없으며 대신 바이트 코드 형식으로되어 런타임에 게임 엔진에 의해 해석되므로 게임을 가상 머신으로 전환한다는 것입니다.

이것은 개발 팀에게 몇 가지 큰 이점이 있으며 그중 일부는 다음에 나와 있습니다.

  • 스크립팅 언어는 일반적으로 메모리 관리 방식이므로 할당에 대해 걱정할 필요가 없습니다.
  • 일반적으로 느슨한 유형의 언어이므로 수행중인 작업에 변수 유형을 사용하고 있는지 확인하고 변수를 만들어 사용하십시오.
  • 언어 자체는 프로그래머가 아닌 사람들에게 약간의 제어권을 제공하면서 종종 매우 단순합니다.
  • 스크립트를 변경하면 코어 엔진을 다시 컴파일 할 필요가 없습니다.
  • 스크립팅과 코딩은 종종 게임 로직의 매우 반복적 인 튜닝에 필요한 시간을 줄입니다.
  • 디자인과 언어에 따라 게임을 실행하는 동안 더 쉬운 튜닝 / 테스트를 위해 스크립트를 다시로드 할 수 있습니다.

목록이 계속해서 나올 수 있다고 확신합니다. 특히 특수한 게임 유형에 들어가고 RTS에서 단위 그룹을 이동하기위한 그룹 구성 규칙을 정의하는 데 스크립트를 작성하는 방법 또는 최종 사용자 등에 게 확장 가능한 UI를 제공하는 스크립팅 언어


9

스크립팅을 사용하면 "핵심 언어"보다 많은 장점이 있습니다. 이들 중 일부는 다음과 같습니다.

  • 핵심 개발자에서 아티스트로 콘텐츠를 더 많이 이동하여 핵심 개발자가 게임 플레이 작업에서 작업을 수행 할 수 있도록합니다
  • 스크립트는 샌드 박스 처리되는 경향이 있으며 실제로 위험한 작업을 수행 할 수 없습니다
  • 스크립트 수정은 게임의 재 컴파일 및 재실행이 필요하지 않습니다.

첫 번째 글 머리 기호에 대해 아티스트가 편집 할 수있는 스크립트로 이동하는 기능의 예를 제공 할 수 있습니까?

@Brian Reindel 예는 무기 / NPC 통계, AI 및지도 / 레벨입니다.
Hackworth

1
@Hackworth 당신은 AI 프로그래밍이 예술가들에 의해 이루어 졌다고 말하는가? 아티스트가 수행하는 스크립팅에는 애니메이션 및 3D 객체 렌더링 등을위한 스크립트가 포함됩니다.
KRB

3
아티스트는 아무것도 프로그래밍하지 않아야합니다. 모듈화를 위해 엔진을 게임 로직과 분리하고 , 다른 곳의 사람들에게 개발을 오프로드하는 것이 아닙니다.
Jon Purdy

1
@James 글쎄요, 요점은 : "경량"프로그래밍을 수행하지만 "콘텐츠"캠프에 있습니다. 따라서 용어는 까다 롭습니다. =)
Jari Komppa

6

스크립트는 일반적으로 핵심 엔진 외부에서 실행되는 코드입니다. 일반적으로 텍스트 파일에는 원하는 곳에 보관되어 있습니다. 그런 다음 일반적으로 엔진에 의해로드되고 구문 분석되고 런타임에 실행됩니다.

일반적으로 어떤 언어를 사용하든 (루아, Angelscript 등)이 언어에는 일반적으로 엔진 프로그래머가 엔진 기능 또는 전체 클래스를 현재 실행중인 "스크립트 엔진"인스턴스에 노출시킬 수있는 기능이 있습니다. .

예를 들어 (완전히 어리석은 예이지만 요점을 맞추기 위해) 게임 코드에는 좀비를 스폰하는 퍼블릭 함수가있을 수 있습니다.

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

사용하는 스크립팅 언어를 사용하면이 기능을 실행중인 스크립팅 파서에 노출 할 수 있습니다. 이것은 효과적으로 텍스트 파일을 열고 "SpawnZombie (200,300,1337)"를 쓸 수 있고 엔진이 코드를 실행하면 해당 위치에 좀비가 생성됩니다.

다른 답변에는 이미 이것이 일반적으로 사용되는 방법에 대한 몇 가지 좋은 예가 나와 있지만 한 가지 중요한 점을 제외하고는 매우 중요합니다.

이러한 종류의 스크립트를 사용하면 런타임 중에 게임 플레이를 디버그하거나 테스트하기가 매우 쉽습니다.

좀비를지도에 배치하는 완벽한 방법을 찾아서 플레이어가 발견 한 후 플레이어에게 최대의 겁을 줄 수 있다고 가정 해 봅시다. 스크립팅을 지원하지 않으면 응용 프로그램을 종료하고 코드에서 일부 마법 번호를 변경 한 후 다시 컴파일하고 테스트해야합니다.

스크립팅 지원을 통해 (예 : 디버그 콘솔과 같이 런타임 중에 텍스트를 입력하는 방법이 이미있는 경우) "SpawnZombie (333,444,555)"를 입력하고 그 모양을 확인하면됩니다.

같은 방식으로 무기, 차량 생성, 다른 맵 불러 오기, 게임의 일부 값 변경 등 게임에 필요한 시간을 낭비하고 싶지 않기 때문에 적을 공격 할 수 있습니다 테스트 등

이렇게하면 더 복잡한 게임에서 많은 시간을 절약 할 수 있습니다.


2

1) 스크립트는 코드보다 수정하기가 훨씬 쉽습니다.

2) 스크립트는 종종 현장 수정이 가능합니다. 게임을 모딩 할 수 있습니다.


그렇다면 스크립트가 다른 사람이 편집 할 수 있도록 컴파일되지 않은 언어로 작성되었다고 말하는 것이 공정한가요?

@Brian Reindel : 일반적으로 그렇습니다.
Loren Pechtel

2

대부분의 스크립팅 언어는 핵심 엔진의 언어보다 훨씬 표현력이 좋습니다. 종종 엔진은 성능상의 이유로 상대적으로 낮은 수준의 언어 (예 : C ++)로 작성되지만 게임 플레이 코드는 성능이 높을 필요가 없으므로 우선 순위는 기능을 쉽게 표현할 수있는쪽으로 이동합니다.

예를 들어 동적 대 정적 입력입니다. 또 다른 예 : 가비지 수집 대 수동 메모리 관리.


0

스크립팅을 통해 더 높은 수준에서 논리를 작성할 수 있습니다. 다시 말해, 기능이 많을수록 적은 코드를 작성하게됩니다.

예를 들어, 다음은 코드로 작성하는 것과 스크립트 언어로 작성하는 것의 차이점을 보여줍니다.

게임 코드

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

}

스크립트 코드

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

스크립팅 언어를 사용하는 경우 디자이너가 얼마나 덜 코딩해야하는지 보시겠습니까?

그 이유는 게임 코드에 따라 다르며 이벤트를 여러 프레임으로 분할하고 여러 프레임 관점에서 코드를 작성해야합니다. 반면 스크립팅을 사용하면 모든 추가 코드가 스크립트 함수 뒤에 추상화되므로 여러 프레임 이벤트를 한 줄의 코드로 생각할 수 있습니다.

당신은 물을 수 있지만, 그 기능은 게임 코드로 작성 될 수 없습니까? 예,하지만 디자이너는 게임 엔진의 소스 코드를 열고 모든 코드를 작성해야하며, 디자이너가 게임 엔진의 소스 코드를 거치지 않도록해야합니다 (실수로 변경 될 수 있음) 다른 코드와 전체 충돌).

대신, 디자이너가 대신 이런 식으로 작업하기를 원합니다. 맵 편집기에서 자동차를 마우스 오른쪽 버튼으로 클릭하고 스크립트 삽입을 클릭 한 후 스크립트 코드를 입력하십시오. 중요한 게임 엔진 소스 코드를 망칠 필요가 없습니다.

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