게임 프레임 워크 (예 : C #의 XNA, C ++의 SDL)와 게임 엔진의 차이점은 무엇입니까?
게임 프레임 워크는 엔진을 사용합니까? 게임 엔진은 물리 엔진, 입자 엔진 등과 같은 하위 엔진을 캡슐화합니까? 함께 사용해야합니까, 아니면 상호 배타적으로 사용해야합니까?
2D와 3D 모두에 대해 별도의 엔진이 있다고 생각합니까?
댓글
- 관련 : 라이브러리와 엔진의 차이점은 무엇입니까?
답변
“엔진”또는 “프레임 워크”에 대한 “엄격한 정의”는 없습니다.
일반적으로 엔진은 “더 많은 작업을 수행”하는 것으로 간주됩니다. 또는 프레임 워크보다 더 많은 도구와 관련 지원이 있습니다. 그 자체는 종종 일부 통합 API를 통해 노출되는 관련 기능의 느슨한 모음 일뿐입니다.
그 목적을 위해 엔진이라고 주장하는 것은 다음과 같은 것을 사용할 수 있습니다. 기능을 달성하기위한 프레임 워크라고 주장하지만 항상 그럴 필요는 없습니다. 마찬가지로 게임 엔진이라고 주장하는 것은 구성 요소 (물리 및 렌더링 등)가 다음과 같이 구현된다고 주장 할 수 있습니다. 물리 엔진 또는 물리 프레임 워크. 두 용어에서 언급되는 기술의 종류는 서로 바꿔서 사용할 수도 있고 그렇지 않을 수도 있습니다.
물리, 사운드, 예, 심지어 2D 또는 3D 그래픽 등 거의 모든 것에 대해 “엔진”또는 “프레임 워크”가있을 수 있습니다.
그것은 단지 용어 일뿐입니다. 일반적으로 그다지 중요하지 않습니다. 기능적 관점에서 게임 제작에 초점을 맞춘 관점에서 중요한 것은 해당 기술이 게임 제작에 필요한 것을 제공하는지 여부입니다. 자체를 엔진이라고 부르든 프레임 워크라고 부르든 “그와는 아무런 관련이 없습니다.
답변
사용하는 간단한 정의 : 프레임 워크에 엔진을 구축 할 수 있지만 엔진에 프레임 워크를 구축하지 않습니다. 하나는 아키텍처와 프로그램 흐름을 결정하는 골격이고 다른 하나는 작업을 수행하는 근육입니다.
구체적인 경우 예를 들어, Artemis는 구성 요소 시스템을 구축하기위한 깔끔한 작은 프레임 워크이지만 엔진이라고 부르지는 않습니다. Artemis Systems 및 표준 구성 요소를 구축하여 엔진을 만들 수 있습니다.
댓글
- 우리 회사에서는 누군가 엔진에 대한 프레임 워크를 설계했습니다. 이 프레임 워크는 엔진이 제공하지 않는 ' 누락 된 부분의 모음 역할을하며, 그렇지 않으면 (이전) 엔진에서 약간 어수선한 부분을 통합합니다. 그리고 개발을 용이하게하는 도우미를 제공합니다.
Answer
프레임 워크는 (일반적으로) 하위 수준 라이브러리의 모음입니다. 그리고 당신이 원하는대로 (그래픽, 사운드 등) 무엇이든 할 수있는 도우미 물건. 일반적으로 게임에서 일반적인 작업을 수행하도록 최적화되거나 설계된다는 점을 제외하면 프레임 워크와 관련된 게임 관련 항목은 없습니다.
예 : 엔진을 사용하면 각각 위치가있는 엔티티 목록을 가질 수 있습니다. 프레임 워크를 사용하면 특정 위치에서 3D 개체를 렌더링 할 수 있습니다.
따라서 각 개체에 3D 개체를 제공하여 연결하고 필요할 때 렌더링합니다.
타다, 당신은 게임을 가지고 있습니다.
답변
정말 자세한 설명을 원하시면이 게임을 읽고 제이슨 그레고리의 게임 엔진 아키텍처 만 해당합니다.이 주제가 출판 된 이후 가장 완벽한 작업이라고 생각합니다. C ++ 부분뿐만 아니라 또한 모든 게임 엔진 프로그래머에게 중요한 이론 / 아키텍처가 있습니다. 언어와 무관 한 좋은 출발점입니다. 개요를 보려면 책에있는이 이미지
질문에 답해 보겠습니다.
어떻게 작성하든 코드가됩니다. 🙂 수년간의 경험을 바탕으로 필요한 것과 필요한 방식을 작성하거나 필요한 것을 제공하는 것을 사용합니다.
용어 엔진 및 프레임 워크 제공 다른 용어와 함께 소프트웨어 아키텍처에서. 이제 기본 용어부터 시작하여 위로 이동하겠습니다.
라이브러리
일반적인 예 : jpeg 또는 png 이미지를 작성하는 기능을 제공하는 수학적 계산 (벡터, 매트릭스, …) 또는 이미지 (jpeg 또는 png) 라이브러리를위한 모든 기본 유형 및 함수를 제공하는 수학 라이브러리
Unity 3D에서 수학 은 수학 라이브러리입니다.
이론 : 라이브러리는 주제에 대한 전용 기능을 제공합니다 (예 : 수학 ) AND 요청시 프로그래머가 호출합니다 .
일부 미리보기 : 프레임 워크 라이브러리 인 프레임 워크를 보유한 라이브러리가있을 수 있습니다.
프레임 워크
이론 : 프레임 워크는 제어 반전 을 도입합니다. 이는 대부분의 경우 개발자가 프레임 워크 메서드를 호출하지 않지만 프레임 워크는 개발자의 코드를 호출 함을 의미합니다. 코드에 프레임 워크 라이브러리를 통합하고 프레임 워크를 시작해야하는 경우는 예외입니다. 프레임 워크 라이브러리는 전용 용도로 프레임 워크에 대한 모든 메서드와 함수 및 인터페이스를 제공합니다. 따라서 프레임 워크는 라이브러리에있을 수 있습니다.
일반적인 예 : Unity 3D MonoBehaviour 는 Awake, Start, OnUpdate와 같은 메소드를 제공합니다. 개발자는 이러한 메서드를 구현 한 다음 (게임 개체 관리) 프레임 워크에서이 메서드를 호출합니다 (이것은 제어의 반전입니다). . OnCollisionEnter, OnCollisionExit 메소드와 동일합니다. 동일한 Monobehaviour에 있지만 물리 프레임 워크에 의해 호출 될 것입니다.
미리보기 : Engine, Runtime, Editor, SDK
엔진이라는 용어는 항상 모호했고 여전히 일부 미리보기 설명이 있습니다 (추가 기술 개발로 인해 더 나아지지는 않음).
엔진이라는 용어는 여러 가지에 사용되며 어느 것이 옳은지 고유하게 말할 수 없습니다. 2004 년에 게임 엔진 작성에 처음 접촉했을 때도 모호했습니다. 미리 정의 된 데이터를로드하는 일종의 코드를 의미하는 게임 엔진이있어서 게임을 플레이 할 수 있습니다. 미리 정의 된 데이터를로드하기 때문에 데이터 기반 엔진이라고합니다. 한 번 컴파일하면 다시 컴파일하지 않고도 외부 데이터가 다른 게임이 될 수 있습니다. 어떤 시점에서 이것은 런타임과 같았습니다.
편집기는 명확합니다. 엔진 / 런타임에 의해로드 된 사전 정의 된 데이터를 정의 할 수 있습니다.
편집기가있는 엔진을 SDK (예 : Hammer SDK)라고했습니다.
그런 다음 전용 엔진이있었습니다. 물리 엔진, 렌더링 엔진, 사운드 엔진, 게임 오브젝트 관리 엔진, 네트워크 엔진 등 ….
개인적으로는 엔진이 아닙니다 (특히 렌더링 엔진은 게임 엔진이 아닙니다. 표현). Google 게임 엔진을 검색 할 때 결과에는 게임 엔진이 아닌 순수 렌더링 엔진이 90 % 포함되어 있습니다. 모든 라이브러리를 라이브러리라고 부르지 만 사전 정의 된 데이터를로드 할 수 있으므로 데이터 기반 엔진이라는 용어와 일치합니다.
자세한 내용을 알아보기 전에 마지막으로 짧은 메모 : 석사 학위를 취득했습니다. 컴퓨터 과학. 저의 석사 논문은 “게임 엔진의 핵심을 개발하는 방법”이라는 주제를 다루었습니다. 다른 모든 엔진을 연결하고 게임 오브젝트 관리, 게임 루프 등을 수행하는 코드의 일부를 의미합니다.
저는 마스터 논문을 (짧은) 책으로 출판했습니다. 구매자 / 독자의 아마존에 대한 유일한 의견은 (몇 년 후) 게임 엔진에 관한 것이 아닙니다. 성공적으로 졸업하여 3 명의 숙련 된 프로그래머 (그 중 2 명은 게임 및 대화 형 응용 프로그램에 전념)를 상대로 논문을 옹호했기 때문에 게임 엔진을 작성한 것 같습니다.
Editor
쉬움 : 다른 부분에 필요한 형식으로 데이터를 정의 할 수 있으므로 해당 파일을 작성하지 않아도됩니다. 손으로 만들거나 외부 도구를 사용하여 만들 수 있습니다.
이것은 Unity 3D 편집기가하는 일입니다.
런타임
이 용어는 종종 엔진과 동일하게 사용됩니다. (정확하거나 부정확 할 수 있음).
런타임은 생성 된 데이터를 실행하고 데이터와 관련된 작업을 수행합니다. 예를 들어 게임을 보여주고 게임을 할 수 있습니다. 게임 자체를 수정할 수 없다는 의미로 데이터를 생성하지 않습니다 (게임 저장 제외).
Unity Web Player는 웹 브라우저 내에서 Unity 게임을 플레이 할 수있는 런타임입니다.
동일한 런타임으로 여러 개의 다른 게임을로드하고 실행할 수 있습니다.
Unity 3D 스크립팅 API의 경우 게임에서 작동하는 기능과 기능 사이에 컷이 있습니다. 편집기 내에서만 작동합니다.
SDK
이 용어는 종종 프레임 워크라고도합니다 .
당시 SDK는 다음과 같은 도구 모음이었습니다. 편집기, 프로그래머 용 IDE (통합 개발자 환경), 데이터 형식 및 런타임 / 엔진 용 내보내기
따라서 SDK / 프레임 워크는 미리 정의 된 워크 플로와 유틸리티를 제공하고 (잘 설계된) 방법을 보여줍니다. 게임을 (쉽게) 만드는 방법.
기본적으로 Unity 3D 엔진은 SDK 방향에 더 적합하기 때문에 잘못된 것입니다. 하지만 Unity는 그보다 더 많은 새로운 단어 / 정의가 필요합니다.
어쨌든 다른 용어를 소개하기 위해 SDK / 프레임 워크는 사전 정의 된 게임 개발 파이프 라인을 제공합니다 (자산뿐만 아니라 파이프 라인이지만 Unity처럼 자산, 로직, 빌드, 배포 등을위한 파이프 라인 일 수 있습니다 ….)
Engine
모두가 멋지고 싶어하기 때문에 모든 것에 사용됩니다. 라이브러리, 프레임 워크 또는 게임을 작성하는 것뿐만 아니라 완전한 엔진을 작성하는 것이 더 좋습니다. 풍자 해제
트리거 다운 :
엔진
- 코드 / 소프트웨어의 일부입니다
- 다중에서 재사용하는 것을 목표로합니다. 프로젝트 (하나의 게임에 대해서만 게임 엔진을 작성할 수도 있음)
- 재사용을 위해 게임 엔진은 재사용 가능한 부분을 게임 특정 부분에서 분리합니다.
- 재사용 가능 (방법에 따라 다름) 그것은 재사용 예정) 데이터 기반 엔진 외부 데이터로드
와 같은 다양한 특징이 있습니다.
엔진은 여러 개의 다른 엔진으로 구성 될 수 있습니다 (요즘 모든 것이 엔진이라고 불리기 때문에). 게임 엔진에는
- 렌더링을 수행하는 렌더링 엔진이 포함될 수 있습니다 (다시 말하지만, 젠장, 젠장, 렌더링 만 수행하는 코드는 게임 엔진이 아닙니다)
- 물리적 엔진 물리 수행 ( “게임 엔진이 아니라 물리 엔진)
- AI를 처리하는 AI 엔진 (게임 엔진이 아니라 AI 엔진)
- a 네트워크 엔진 (예 : RakNet)은 네트워크 작업을 수행합니다 ( “게임 엔진이 아니라 네트워크 엔진).
- 오디오 작업을 수행하는 오디오 엔진 (게임 엔진이 아니라 오디오 엔진)
구성 요소 기반 게임 개체 관리 모델에서 모든 것을 함께 묶기위한 플러그인 기반 프레임 워크를 제공하는 핵심 엔진 기반 애플리케이션의 예입니다. 각 하위 엔진 (오디오 렌더링)은 플러그인으로 게임 엔진에 추가되는 모듈입니다. 각 구성 요소는 하위 엔진 / 모듈의 일부가 될 수 있습니다. 그리고 (컴포넌트 기반) 게임 오브젝트 관리는 분리 된 모듈 간의 연결 링크입니다.
게임 엔진에 대한 가장 가까운 정의
게임 엔진 은 소스 코드의 일부입니다. 모든 기능을 제공하는 iv id = “686b0e923d”>
재사용 여러 게임에서 재사용하고 코딩 및 실행 게임. 따라서 코드의 다른 모든 부분 (렌더링, 오디오, 물리, 게임 개체 관리, 네트워킹)을 함께 연결합니다. 라이브러리, 프레임 워크 또는 전용 엔진 (렌더링, 물리, …)
게임 엔진은 중간에 엉망입니다.
Answer
@Josh가 이미 언급했듯이 프레임 워크 나 엔진에 대한 엄격한 정의는 없지만 개념적으로 보면 둘 다 매우 다른 도구입니다.
프레임 워크에는 기본 API 요약이 포함되어있어 사용자에게 성능, 호환성 등에 대해 (일반적으로) 걱정하지 않고 플랫폼 또는 기능과 상호 작용할 수있는 더 높은 수준의 도구를 제공합니다. 제공 한 예제에서 SDL은 프레임 워크입니다. 당신은 플랫폼에 대한 관심을 끌고 창 관리, OS 특정 항목 등에 대해 걱정하지 않고 해당 계층 뒤에 소프트웨어를 구축 할 수 있습니다. 전체 소프트웨어를 구축하려면 다른 기능이 필요합니다. 프레임 워크, 미디어 및 플랫폼 관리를위한 fe SDL, 물리 관리를위한 Box2D 등
엔진이 다릅니다.이 경우 도구는 개발에 필요한 모든 것을 제공합니다. 물리 엔진이 제공합니다. 물리 관리에 필요한 모든 것이 포함되어 있고 사용하기 쉬운 API를 제공하므로 물리 시뮬레이션을 구축하려는 경우 다른 타사 라이브러리가 필요하지 않습니다. 엔진은 프레임 워크, 다른 엔진, 인터페이스, 스 니펫 및 일반 코드의 모음에 지나지 않으며 다른 제 3자가 필요하지 않거나 하위 수준에 대한 걱정없이 프로젝트를 완료하는 데 필요한 모든 것을 제공합니다.