이번 번역은 긴 문장이 많아서 문맥 상 이상한 점이 있을 수 있습니다. 영어를 하실 줄 아시면 직접 페이지를 보는 걸 추천드려요.
--------------------------------------------------------------------------------------------------------------------------------------------
이 가이드는 유니티 사용자의 관점에서 고도엔진을 살펴볼 수 있도록 합니다. 그리고 여러분의 유니티 사용 경험을 고도의 세상에서 사용할 수 있도록 도와주는 것이 목표입니다.
차이점
|
유니티 |
고도 |
라이센스 |
수익 한도 및 사용 제한이 있는 독점적, 폐쇄적, 무료 라이센스 |
MIT 라이센스, 무료이며 아무 제한없는 오픈 소스 |
운영체제(편집기) |
Windows, OSX, Linux (비공식적이고 지원되지 않음) |
Windows, X11 (Linux, *BSD), Haiku, OSX |
운영체제(사용) |
데스크톱 : Windows, Linux/SteamOS, OSX 모바일 : 안드로이드, iOS, Windows Phone, Tizen 웹 : WebGL 콘솔 : PS4, PS Vita, XBox One, XBox 360, WiiU, 3DS VR : Occulus Rift, SteamVR, Google Cardboard, Playstation VR, Gear VR, HoloLens TV : 안드로이드 TV, 삼성 스마트TV, tvOS |
데스크톱 : Windows, X11, OSX 모바일 : 안드로이드, iOS, 블랙베리(더 이상 사용되지 않는) 웹 : WebGL, HTML5 (emscripten을 통해) |
씬 시스템 |
컴포넌트 / 씬 (GameObject > Component) 프리펩 |
씬 트리와 노드, 씬이 얽히고 다른 씬으로부터 상속받는 것을 허용함 |
써드-파티 툴 |
비주얼 스튜디오나 샤프 에디터 |
안드로이드 출력을 위한 안드로이드 SDK 외부 에디터들은 가능 |
장점 |
거대한 커뮤니티 거대한 에셋 스토어 |
씬 시스템 애니메이션 파이프라인 쓰기 쉬운 쉐이더 장치에서 디버그 가능 |
에디터
고도엔진은 여러분의 게임을 만드는 데에 사용할 수 있게 기능이 풍부한 에디터를 제공합니다. 아래에 제시된 두 에디터의 기능별로 색깔 블록으로 보여주고 있다.
여러분이 고도 에디터의 각 패널을 씬 에디터 사이드의 옆 쪽에 붙일 수 있다는 것을 참고하세요.
두 에디터가 비슷해 보이지만, 겉에 보이는 것 밑에 많은 차이점이 있습니다. 둘 다 파일시스템을 이용해 프로젝트를 구성하지만 단일 구성 파일, 최소화된 텍스트 형식 그리고 메타 데이터가 없어 고도가 조금더 심플합니다. 이 모든 것은 고도가 Git, Subsersion 또는 Mercurial 같은 VCS 시스템에 대해 조금더 우호적으로 변하는데 기여하고 있다.
고도의 씬 패널은 유니티의 계층 패널과 유사하지만 각각의 노드가 특정한 기능을 가지고 있기 때문에, 고도의 접근 방식이 더 시각적으로 묘사된다.
다시 말해서, 특정 씬이 무엇을 하는지 이해하는 것이 더 쉽다.
고도의 Inspector는 더 단순화 되었고 속성만을 보여주기 위해 설계되었습니다. 다행히도, 이로 인해 오브젝트는 언어 API의 기능을 숨기지 않고도 훨씬 많은 양의 유용한 매개 변수를 사용자에게 보여줄 수 있습니다. 이에 더해서 고도는 눈에 보이는 모든 속성을 애니메이션화 할 수 있습니다. 따라서 코드 없이 실시간으로 색깔, 텍스쳐, 열거값 또는 리소스에 연결할 수 있습니다.
마지막으로, 화면의 제일 위에 있는 툴바는 프로젝트 재생을 제어할 수 있다는 점에서 유사하지만, 고도의 프로젝트는 편집기 내부에서 실행되지 않고 별도의 창에서 실행됩니다(하지만 트리와 오브젝트는 디버거 창에서 확인할 수 있습니다).
이 접근 방식은 다른 각도에서 실행 게임을 확인할 수 없다는 단점이 있으며 (이 기능은 향후 지원될 가능성이 있지만 이미 실행 중인 게임에 충돌 기즈모(gizmos)를 표시하는 것이 가능합니다), 이에 대한 장점은 다음과 같습니다 :
- 프로젝트를 실행하고 닫는 것이 매우 빠릅니다 (유니티는 프로젝트를 실행하기 위해서 저장해야 하고, 프로젝트를 닫고 다시 이전 상태를 로드해야 합니다.)
- 라이브 편집은 편집기에 대한 변경 사항이 게임에 즉시 적용되며 게임이 종료되었을 때 손실되지 않아(동기화되지 않기 때문입니다) 훨씬 유용합니다. 이러면 게임을 플레이하면서 레벨을 만드는 것과 같은 환상적인 워크 플로우를 사용할 수 있습니다.
- 게임이 분리된 프로세스에서 실행되므로 에디터가 좀 더 안정적입니다.
씬 시스템
이게 유니티와 고도의 가장 큰 차이입니다. 고도 유저들이 가장 좋아하는 특징입니다.
유니티의 씬 시스템은 하나의 씬에 필요한 모든 에셋이 포함되도록 하고 구성 요소 및 스크립트를 해당 에셋에 설정하여 이들 에셋을 서로 연결하는 것으로 구성됩니다.
고도의 씬 시스템은 다릅니다 : 노드로 이루어진 트리로 구성되었습니다. 각 노드는 목적을 가집니다 : 스프라이트, 메시, 조명... 기본적으로, 이것은 유니티의 씬 시스템과 비슷합니다. 그러나, 각 노드는 다수의 자식이 있을 수 있으며, 이로 인해 각 하위 항목이 메인 씬의 하위 섹션으로 생성됩니다. 이것은 다른 파일에 저장되어 있는 다른 씬들로 하나의 씬을 구성할 수 있다는 것을 뜻합니다.
예를 들면, 플랫폼 레벨을 생각해보자. 다음과 같은 여러 요소로 구성할 수 있습니다 :
- 벽돌
- 동전
- 플레이어
- 적군
AnimatedSprite (예를 들어 걷는 애니메이션)
2. 두번째로 적군을 위한 씬입니다.
다시, 적을 다른 레벨에서 재사용 가능한 요소로 간주합니다. 거의 플레이어 노드와 같습니다 - 유일하게 다른 점은 스크립트이고(거의 대부분 AI를 다루는) AnimatedSprite로 사용된 스프라이터 텍스쳐들입니다.
3. 마지막으로, 레벨 씬입니다.
이는 벽돌(플랫폼용), 동전(플레이어가 붙잡을 수 있도록) 및 특정 숫자의 인스턴스화 된 이전 적 장면의 일부 인스턴스로 구성됩니다. 이는 다른, 분리된 적일 수 있으며 적의 행동과 모양이 적 씬에서 정의된 것과 동일하게 됩니다. 그러면 각 인스턴스가 레벨 씬 트리에서 노드로 간주됩니다. 물론 각 대상 노드에 대해 서로 다른 속성을 설정할 수도 있습니다 (노드의 색을 변경하는 경우)
마지막으로, 메인 씬은 두 자식과 한 루트 노드로 구성되어 있습니다 : 플레이어 인스턴스 노드와 레벨 인스턴스 노드. 루트 노드는 어떤 것도 될 수 있습니다. 보통 가장 글로벌 유형의 "Node"와 같은 "root" 유형이거나 "Node2D(모든 2D-관계 노드의 루트 타입)", "Spatial(3D-관계 노드의 루트 타입)" 또는 "Control(GUI-관계 노드의 루트 타입)"도 가능합니다.
보시다시피, 모든 씬이 트리처럼 정리되어 있습니다. 노드의 속성도 마찬가지입니다 : 여러분은 유니티와 같이 노드에 충돌 구성 요소를 추가하여 충돌 구성 요소를 결합할 수 있게 할 수 없습니다. 대신 이 노드를 충돌 속성이 있는 새 특정 노드의 하위 노드로 만듭니다. 고도는 사용에 따라 다양한 유형의 충돌이 특징이 있습니다(물리 도입을 보세요).
- 질문 : 어떤게 이 시스템의 이점인가요? 이 시스템이 잠재적으로 트리의 깊이를 높이지 않을까요? 또한 유니티를 사용하면 게임 오브젝트를 빈 게임오브젝트에 넣어 정리할 수 있게 허용됩니다.
- 먼저, 이 시스템은 잘 알려진 객체 지향의 전형입니다 : 고도는 "게임 오브젝트"가 아닌 몇 개의 노드를 제공합니다, 하지만 그들은 그들의 자식에게 저장공간을 제공합니다 : 이것이 상속입니다.
- 두번째로, 씬의 하위 트리를 추출해서 자신만의 씬으로 만들어 두번째와 세번째 질문에 답합니다 : 씬 트리가 너무 깊더라도, 작은 서브트리로 나눌 수 있습니다. 이것은 또한 재사용성에서 더 나은 해결책입니다. 어느 노드의 자식으로도 서브트리를 포함할 수 있습니다. 유니티에서 빈 게임오브젝트에 여러 개의 노드를 놓는 것은 시각적인 조직을 제외하고는 동일한 가능성을 제공하지 않습니다.
이것들이 여러분이 기억해야할 주요 개념입니다 : "노드", "부모 노드" 그리고 "자식 노드".
프로젝트 조직
우리는 앞에서 프로젝트 구조를 설정하는 데에 완벽한 해결책이 없다는 것을 보았습니다. 유니티와 고도의 어떤 솔루션도 그렇습니다. 그래서 이 점은 덜 중요한 것이지요.
그러나, 우리는 루트 디렉토리에 여러 개의 폴더를 가지는 하나의 에셋 폴더를 가지는 유니티 프로젝트의 보통의 구조를 자주 보았습니다. 한 에셋 당 하나의 타입으로 : 오디오, 그래픽, 모델, 물질, 스크립트, 씬 등
이전에 설명했듯이 고도의 씬 시스템은 씬을 더 작은 씬으로 나누는 것을 허용합니다. 각 씬과 하위 씬이 실제로 프로젝트의 한 씬 파일이므로 우리는 조금 다르게 구성하는 것이 좋습니다. 이 위키는 이에 대한 내용을 제공합니다 : 프로젝트 조직
제 프리펩은 어디있나요?
유니티에서 제공하는 프리펩에 대한 컨셉은 씬의 '템플릿' 요소입니다. 재사용이 가능하고, 씬에 존재하는 각 프리펩 인스턴스는 자체적으로 존재하지만 모두 프리펩에 의해 정의된 것과 동일한 속성을 갖습니다.
고도는 그런 프리펩을 제공하지 않지만, 이 기능성은 감사하게도 씬 시스템을 이용해 다시 메울 수 있습니다 : 우리가 보았듯이 씬 시스템은 트리의 형태로 조직되어 있습니다. 고도는 여러분이 씬의 서브 트리를 그 자신의 씬으로 저장하게 허용합니다, 그 자신의 파일로 말이죠. 이 새로운 씬은 여러분이 원하는 만큼 인스턴스화 될 수 있습니다. 이 새로운 인스턴스에 행하는 어떤 변화도, 분리된 씬은 그 자신의 인스턴스에 적용됩니다. 그러나 여러분이 인스턴스에 만든 어떤 변화도 '템플릿(template)' 씬에는 어떤 변화도 끼치지 않습니다.
확실하게 하자면, 여러분은 인스턴스의 Inspector의 패널에서 매개 변수를 수정할 수 있습니다. 하지만 이 인스턴스를 구성하는 노드는 잠겨 있으며 필요한 경우 씬 트리에서 인스턴스 옆에 있는 클립보드 아이콘을 클릭하여 해당 노드의 잠금을 해제하고 메뉴에서 "Editable children(편집 가능한 하위)"를 선택합니다. 여러분이 이 노드에 새로운 하위 노드를 추가할 때 이렇게 할 필요가 없지만 새로운 자식이 'template(템플릿)' 씬이 아닌 인스턴스에 속한다는 걸 기억하세요. 만약 여러분이 템플릿 씬에 여러분의 모든 인스턴스에 더해진 자식을 더하고 싶으면, 여러분은 애초에 템플릿 씬에 한 번 더하면 됩니다.
GameObject -> Node Add a component -> Inheriting Prefab -> Externalized branch
게임오브젝트 -> 노드에 컴포넌트 더하기 -> 프리펩 상속 -> 외부 지점
고도는 여러분에게 GDScript라는 자체 언어를 제공합니다. 이 언어는 대부분의 구문을 파이썬에서 차용했지만 연관은 없습니다. 만약 여러분이 Lua나 C# 등이 아니라 GDScript에 대해 궁금하다면 GDScript나 FAQ 페이지를 읽어보세요. GDScript는 고도 API와 강하게 연결되어 있고 배우기 쉽습니다 : 숙련된 프로그래머에게는 하루 저녁 그리고 시작하는 프로그래머는 일주일 정도 걸립니다.
유니티는 게임 오브젝트에 원하는 만큼의 스크립트를 붙일 수 있습니다. 각 스크립트는 게임오브젝트에 행동을 더합니다 : 예를 들어, 여러분은 스크립트를 더해 플레이어의 컨트롤을 반응하며 다른 스크립트를 더해 특정 게임 로직을 제어할 수 있습니다.
고도에서, 여러분은 노드에 하나의 스크립트만 붙일 수 있습니다. 외부 GDScript 파일 또는 노드에 직접적으로 포함시킬 수도 있습니다. 만약 여러분이 한 노드에 여러 스크립트를 붙일 필요가 있다면, 여러분의 씬 혹은 하고 싶어하는 것에 따라 두 가지를 신경쓸 수 있습니다 :
- 타겟 노드와 현재 상위 노드 사이에 새 노드를 추가한 다음 이 새 노드에 스크립트를 추가합니다.
- 혹은, 타겟 노드를 여러개의 자식으로 나누어 각각에 하나의 스크립트를 붙일 수 있습니다.
연결 : 그룹과 신호
노드는 스크립트를 사용하여 접근하고 스크립트의 함수(내장 또는 사용자 정의) 호출로 제어할 수 있습니다. 더 있습니다 : 노드들을 하나의 그룹으로 위치시켜 함수를 그룹에 포함된 모든 노드에서 함수를 호출할 수도 있습니다! 자세한 것은 이 페이지에 설명되어 있습니다.
또 있습니다! 특정 노드는 특정 행동이 발생할 때 신호를 던집니다. 여러분은 이 신호를 연결하여 신호 발생 시 특정 함수를 호출할 수 있습니다. 여러분이 스스로의 신호를 정의하고 어디든 원하는 곳으로 보낼 수 있다는 것을 참고하세요. 이 특징은 여기에 적혀있습니다.
C++로 고도 사용하기
여러분께 알려드리기 위해, 고도는 그 API로 여러분의 프로젝트가 C++로 되어있는 것도 지원합니다. 유니티에서는 되지 않는 것이죠. 예로 "game"으로 고도엔진의 에디터가 고도 APi를 사용한 C++로 쓰였다는 것을 고려할 수 있습니다.
여러분이 C++로 고도를 사용하는 것에 관심이 있다면, C++로 개발하기 페이지를 참조하세요.
--------------------------------------------------------------------------------------------------------------------------------------------
이번 번역은 긴 문장이 많아서 문맥 상 이상한 점이 있을 수 있습니다. 영어를 하실 줄 아시면 직접 페이지를 보는 걸 추천드려요.
'레퍼런스 > 고도엔진' 카테고리의 다른 글
고도엔진 튜토리얼 #17 벡터 수학(Vector math) (0) | 2018.02.05 |
---|---|
고도엔진 튜토리얼 #16 커맨드라인 튜토리얼(Command line tutorial) (0) | 2018.02.03 |
고도엔진 튜토리얼 #14 2D와 3D 키바인딩(2D and3D keybindings) (0) | 2018.02.03 |
고도엔진 튜토리얼 #13 하나씩 일어나는 일(오토로드) (Singletons (AutoLoad)) (0) | 2018.02.03 |
고도엔진 튜토리얼 #12 씬트리(SceneTree) (0) | 2018.02.03 |