다음을 통해 공유


Minecraft: Bedrock Edition과 Minecraft: Java Edition의 차이

겉으로만 보면 Bedrock Edition과 Java Edition은 비슷해 보입니다. 하지만 안을 보면 다른 점이 매우 많습니다. 기반 프로그래밍 언어가 달라 개발 환경이 크게 달라졌습니다. 이 튜토리얼에서는 콘텐츠를 제작할 때 조심해야할 주요 차이점을 살펴봅니다.

이 튜토리얼에서는 다음과 같은 사항을 안내해 드립니다.

  • Java Edition과 Bedrock edition의 간략한 역사를 알아봅니다.
  • 두 에디션의 차이점과 콘텐츠 제작에 미치는 영향을 알아봅니다.

Minecraft에는 주요 버전이 2가지 있습니다.

Minecraft: Java Edition

2009년에 최초로 배포된 버전입니다. 2017년 9월에 이름이 Minecraft: Java Edition으로 변경되기 전까지는 이 버전이 Minecraft로 불렸습니다. 이름처럼 Java 언어로 개발되었으며 현재 Minecraft 버전과도 대부분 호환됩니다. 이 에디션은 일반적으로 Java라고 합니다.

Minecraft: Bedrock Edition

Bedrock Edition은 2017년 9월 20일에 배포됐습니다. 2011년 발표된 Minecraft: Pocket Edition을 기반으로 제작된 에디션입니다. Bedrock Engine이라는 코드를 기반으로 아홉 가지 주요 기기 플랫폼에서 모두 작동하게 만들었습니다. Minecraft를 기초부터 다시 제작하였으며 플랫폼의 가장 근본적인 요소들을 변경하여 크리에이터 커뮤니티에게 흥미롭고 새로운 길을 열었습니다. 이 에디션은 일반적으로 Bedrock이라고 합니다.

월드 차이점

두 버전의 가장 눈에 띄는 차이점은 월드의 형식입니다. Bedrock Edition은 LevelDB 형식으로 월드를 저장하고 Java Edition은 모루 형식으로 저장합니다. 이러한 차이 때문에 Java Edition을 기반으로 제작된 외부 도구들은 Bedrock Edition에서 사용할 수 없습니다.

또한 두 버전의 블록 형식도 상당히 다릅니다. Java Edition은 개별 블록에 독특한 문자열을 사용해 블록 형식을 일정하게 맞추고 각 블록의 상태를 따로 저장합니다. 비슷하게 Bedrock Edition은 블록 상태와 함께 저장하는 문자열 기반 시스템에서 벗어났지만 데이터 값을 정의해 일부 블록을 그룹으로 함께 지정합니다. 따라서 버전에 따라 블록의 이름이 다르게 지정됩니다. Bedrock Edition에서는 화강암은 stone 1이지만 Java Edition에서는 granite로 지정됩니다.

다른 주요 차이점으로 월드가 생성되는 방식이 있습니다. 두 버전 모두 비슷한 방식으로 지형을 생성하지만 서로 다른 난수 생성 방식을 사용합니다. 즉, 월드 시드가 서로 다른 버전에서 호환되지 않는 것입니다. Bedrock Edition의 월드 시드는 Java Edition에서 다른 월드를 생성하게 됩니다. 따라서 Java Edition으로 Bedrock Edition 콘텐츠를 만들려면 조금 복잡해집니다.

레드스톤 및 명령어 차이

명령어의 구조와 실행 방식도 두 버전에서 차이가 납니다. Bedrock Edition의 명령어 구조는 1.13 버전 이전의 Java Edition의 시스템과 비슷합니다. 또한 구성 요소 기반 시스템 명령어에 포함되는 원 JSON 문자열을 사용하지 않습니다. 대신 길고 복잡한 JSON 문자열로 개체를 편집하고 개체를 이벤트 하나로 소환할 수 있으며 단순한 명령어로 이름을 지을 수도 있습니다.

summon <entityType: EntityType> [spawnPos: x y z] [spawnEvent: String] [named: String]

현재는 Java Edition처럼 Bedrock Edition에서 플레이어에게 사용자 지정 아이템을 지급(/give)할 수 없습니다. 아이템을 미리 생성한 다음 플레이어에게 순간이동시켜야 합니다. 가장 널리 쓰이는 방법은 아이템을 상자에 넣고 상자를 파괴하거나 죽을 때 해당 아이템을 전리품으로 지급하는 개체를 만드는 방법이 있습니다.

Bedrock Edition과 1.13버전 이전의 Java Edition의 명령어는 형식을 제외하면 서로 매우 비슷하게 보입니다. Java Edition 1.13버전에서 추가된 실행 형식은 Bedrock Edition에서 사용할 수 없습니다.

점수판 기능은 두 버전에서 같은 형식이지만 Bedrock Edition은 현재 Java Edition처럼 다양한 분야의 기준을 적용할 수 없습니다. 현재 Bedrock Edition에서 지원하는 기준은 dummy 뿐입니다. Java Edition에서 지원되는 다른 기준들은 Bedrock Edition에 적용되지 않았습니다. /stats/team 같은 명령어도 지원되지 않습니다.

일정 명령어도 두 버전이 서로 다릅니다. Java Edition에서 /schedule 명령어는 다음 구문처럼 작성합니다.

/schedule function <function> <time> [append|replace]
/schedule clear <function>

일정 시간이 지나면 함수가 실행되며 '추가'를 사용해 같은 함수가 실행될 시간을 정하거나 '교체'를 사용해 새 함수가 실행된 시간을 정하기 전에 이전 함수가 시간에 맞춰 실행되는 것을 취소할 수 있습니다. 그리고 최우선으로 '초기화' 옵션으로 모든 함수의 실행 시간을 취소할 수 있습니다.

Bedrock Edition에서 /schedule 명령어는 다음 구문처럼 작성합니다.

/schedule on_area_loaded add <from: x y z> <to: x y z> <function: filepath>
/schedule on_area_loaded add circle <center: x y z> <radius: int> <function: filepath>
/schedule on_area_loaded add tickingarea <name: string> <function: filepath>

일정 시간이 지나 함수를 실행하는 것이 아닌 월드의 특정 지역을 불러오기하면 함수가 실행되도록 순서를 정합니다. '적용 영역' 옵션은 특정 이름의 적용 영역을 불러오기 하면 미리 정한 함수를 실행합니다. 만약 적용 영역이 이미 활성화되어 있다면 함수가 즉시 실행됩니다. 그러나 적용 영역이 존재하지 않는다면 /tickingarea 명령어 같은 방법으로 적용 영역이 생성될 때까지 함수는 대기 상태가 되며 적용 영역이 생성된 이후 함수가 실행됩니다.

같은 장소나 적용 영역에 다수의 함수가 실행되도록 정할 수 있습니다. Java Edition과 다르게 미리 정한 함수를 초기화할 수는 없습니다.

레드스톤 함수도 조금 다릅니다. Java Edition과 다르게 Bedrock Edition은 의사-연결을 지원하지 않습니다. 블록 업데이트 탐색기(BUD) 스위치 같은 기능을 활성화하는 시스템은 작동하지 않습니다. 피스톤이 제자리로 돌아갈 때도 한 틱이 필요하며 한 틱으로 시간이 정해지면 블록을 남기지 않습니다. 심지어 업데이트가 되는 방법도 조금 다릅니다. 두 버전에서 매우 많은 레드스톤 회로가 잘 작동하지만 아주 복잡한 회로는 다를 수 있습니다.

리소스 팩

리소스 팩은 Bedrock Edition과 Java Edition에서 많은 점이 비슷합니다. 하지만 역시 다른 점도 있습니다. 다른 점으로는 Bedrock Edition에서는 .mcmeta 파일과 .json 파일이 서로 바뀐 것이 있습니다. 이 파일들은 인터페이스의 여러 다른 부분의 속성을 정의하고 비슷한 용도로 널리 쓰이지만 구문을 작성하는 방법은 두 형식에서 차이가 있습니다. 또한 텍스처 파일의 형식도 크게 달라졌습니다. 주요 차이로는 알파 채널을 사용할 때 PNG 파일 대신 TGA 파일을 사용하는 것입니다. 일부 텍스처(주로 개체)에도 조금 다른 점이 있습니다.

행동 팩

Bedrock Edition과 Java Edition의 가장 큰 차이점은 행동 팩을 사용하는 방법입니다. Java Edition의 데이터 팩과 기능적으로 비슷하지만 행동 팩을 실제로 실행하고 사용하는 방법은 상당히 다릅니다.

여러분이 직접 개체를 처음부터 제작하거나 새로운 블록이나 아이템을 추가할 수 있고 JavaScript API로 이벤트를 조절하는 등 행동 팩으로 새로운 기능을 사용할 수 있습니다. 이러한 점이 Bedrock Edition이 Java Edition과 가장 다른 점으로 매우 광범위하게 유연한 콘텐츠를 제작하고 조정할 수 있습니다.

게임 플레이 및 플레이어 입력

자주 간과되는 큰 차이점으로 각 버전이 사용하는 플랫폼 플레이어의 차이입니다. Java Edition은 대부분의 플레이어가 키보드와 마우스를 사용한다고 가정해도 큰 문제가 없지만 Bedrock Edition은 대부분의 플레이어가 그렇지 않습니다.

Bedrock Edition에서 현재 콘솔 컨트롤이 가장 많이 쓰는 입력 방식이며 터치스크린이 근소한 차이로 두 번째 방식입니다. 키보드와 마우스 컨트롤은 큰 차이로 세 번째이며 플레이어 비율도 높지 않습니다.

따라서 Bedrock Edition에서 많은 플레이어가 즐길 콘텐츠를 만들고 싶다면 플레이어들이 사용하는 인풋을 고려해야 합니다. 또한 플레이어들이 어떻게 플레이하는지도 고려해야 합니다. 스팸을 마우스로 컨트롤러로 확인하는 것은 쉽지만 터치스크린으로 즐기는 플레이어에게는 어려울 수 있습니다. 키보드 플레이어는 활을 완벽하게 조준할 수 있지만 컨트롤러나 터치스크린을 사용한다면 상당히 어려울 것입니다. 복잡한 파쿠르는 모바일 플레이어가 도저히 할 수 없는 일이 됩니다.

언제나 누가 여러분의 콘텐츠를 플레이하는지 생각하세요. Java Edition의 주요 플레이어들은 비교적 나이가 많은 편이고 Bedrock Edition의 주요 플레이어들은 그보다 젊습니다. 그리고 대부분은 Bedrock Edition을 PC에서 플레이하지 않았을 것입니다.

성능

이 분야는 정확히 말하기 매우 애매하고 어렵습니다. Bedrock Edition 엔진은 PC, 모바일, 콘솔에서 모두 작동하게 설계됐기 때문에 Java Edition보다 허용 범위가 매우 넓어 더 낮은 사양의 하드웨어에서도 구동됩니다. 하지만 단점이 없지는 않습니다.

일반적인 버그로 문제가 생기며(버그가 없다면 Minecraft가 아니겠죠?) 플랫폼이 제공하는 고급 기능들은 게임이 제대로 작동하지 않을 가능성을 높입니다. 복잡한 행동을 가진 많은 개체들이 장치를 느리게 할 수 있습니다. 사용자 지정 개체들은 매우 복잡한 모델을 사용해서 RAM 용량을 많이 요구합니다. 심지어 성능이 낮은 모바일 기기 같은 장치에서는 한 번에 불러올 수 있는 청크의 수가 급감할 수 있습니다.

이런 수많은 성능 문제를 해결하려면 Bedrock Edition의 렌더링과 청크의 작동을 분리해야 합니다. Java Edition처럼 두 요소를 직접 연관(예를 들어 시야에 들어오는 모든 것을 불러오는 것)시키는 것보다 Bedrock Edition은 렌더링 거리(볼 수 있는 거리)를 지정하고 시뮬레이션 거리(청크가 작동하는 거리)와 다른 값을 배정합니다. 이로 인해 청크를 작동시키지 않고 시야에 들어오는 더 먼 곳을 렌더링할 수 있습니다. 청크를 작동시키는 것은 성능에 직접 영향을 미치고 특정 순간에 더 많은 청크가 작동될수록 사양이 낮은 기기에서 문제가 발생할 가능성이 높아집니다.


따라서 Java Edition에서 Bedrock Edition으로 옮겨갈 때 더 두 버전의 차이를 이해하고 많은 준비를 할수록 더 쉽게 옮겨갈 수 있습니다. Java Edition 크리에이터들이 명령어를 밀접하게 이용해 만든 많은 기능들은 대부분 행동 팩으로 옮겨졌습니다. 많은 게임 요소들이 유연한 게임에 초점을 맞춰 데이터 기반으로 다시 만들어졌습니다. 게임이 계속 발전하면서 게임 플레이 경험을 그대로 유지되지만 게임 경험을 만들어내는 방법은 계속 달라지고 있습니다.

다음 튜토리얼

Java Edition에서 처음 옮겨온다면 Bedrock Edition을 경험하는 첫 단계는 애드온 개발입니다. 애드온으로 Bedrock으로 콘텐츠를 만들 때 필요한 많은 것을 알 수 있을 것입니다.