For the complete documentation index, see llms.txt. This page is also available as Markdown.

게임 디자인

Decentraland용 게임을 설계할 때 기억해야 할 사항들.

이 문서는 Decentraland용 게임을 설계할 때 고려해야 할 몇 가지 핵심 사항을 다룹니다. 다른 씬과의 인접성, LAND의 분산 소유권 같은 고려 사항 때문에 Decentraland는 이전 게임에서 가졌을 수 있는 가정을 다시 생각해 보아야 하는 독특한 공간입니다.

예를 들어, 다른 게임 플랫폼과 달리 Decentraland의 게임은 진공 상태에서 존재하지 않는다는 점을 이해해야 합니다. 인접한 씬에 무엇이 있는지 통제할 수 없고, 플레이어의 아바타나 다른 게임에서 가져올 수 있는 아이템 같은 특정 세부 사항도 통제할 수 없습니다. 이는 흥미로운 가능성의 문을 열어 주며, 게임 메커니즘을 다르게 생각하도록 요구합니다.

현재 주류 게임에서 가장 비슷한 것은 Roblox로, 커뮤니티의 사용자 생성 콘텐츠가 다른 사람들이 탐험하고, 플레이하고, 상호작용하는 만남의 장소가 될 수 있습니다. Roblox와 달리, Decentraland에서는 관련 없는 경험들의 메뉴를 탐색하는 방식이 아니라 모든 씬이 서로 인접한 지형을 실제로 탐험하면서 이동합니다. 또한 Decentraland는 블록체인을 토지, 아바타, 자산 등의 소유권을 관리하는 수단으로 사용합니다.

우리는 SDK를 지속적으로 개선하고 있으므로, 아래의 일부 제한 사항은 향후 업데이트에서 제거될 수 있습니다.

씬 경계

게임은 반드시 _LAND 안에 완전히 들어가야 합니다_**씬이 구축되는 기반입니다.** 작은 씬의 경우, 축구와 같은 게임을 떠올려 보세요. 게임의 규칙은 플레이어가 경기장을 벗어날 수 있더라도 관련 상호작용을 제한된 공간 안에 유지합니다. 플레이어는 씬의 경계를 벗어나 걸어갈 수 있지만, 씬에 속한 모든 자산이나 엔티티는 씬 안에 머물러 있어야 합니다.

씬 밖으로 나간 플레이어는 가시 범위 안에 있는 한 계속 렌더링됩니다. 너무 멀리 걸어가면 렌더링이 완전히 중지됩니다.

또한 플레이어에게는 알려지지 않은 여러 개의 분리된 토지 구획에 걸쳐 퍼지는 게임을 만들 수도 있으며, 세계의 나머지를 탐험하는 것이 게임플레이의 일부가 됩니다. 그런 게임은 여러 개의 별도 씬,으로 구성될 수 있으며, 서버를 통해 서로 데이터를 공유할 수 있습니다.

게임이 Decentraland World에 게시되면 씬 경계 밖에서 플레이어가 보는 것에 대해 더 많은 통제권을 가질 수 있습니다. 월드 주변에는 보통 풀밭, 나무, 바다로 이루어진 자동 생성 풍경이 둘러싸여 있지만, 이 풍경을 비활성화 하여 게임의 설정과 충돌하는 경우, 예를 들어 열린 바다나 우주에서 진행되는 게임이라면 사용할 수 있습니다.

사용자 인벤토리

현재 플레이어가 씬 사이를 이동할 때 게임 아이템을 저장할 수 있는 인벤토리는 없습니다. 현재 사용할 수 있는 대안은 다음과 같습니다:

  • 씬 자체에 인벤토리 정보를 저장하고 이를 각 플레이어의 Ethereum 주소(지속적 ID로 사용할 수 있음)와 연결할 수 있습니다. 이 정보는 오직 당신의 씬에서만 읽을 수 있습니다.

  • 외부의 맞춤형 저장소를 사용하고 모든 씬을 거기에 동기화할 수 있습니다. 이는 더 많은 수의 플레이어를 처리할 수 있는 보다 견고한 솔루션입니다. 또한 당신이나 다른 사람이 소유한 여러 개의 별도 씬으로 이 인벤토리에 대한 접근을 확장할 수도 있습니다.

  • 블록체인 토큰을 사용해 아이템의 소유권을 처리합니다.

게임 아이템을 획득하면 플레이어의 Ethereum 지갑에 특별 토큰으로 저장할 수 있습니다. 토큰을 가진 플레이어가 당신의 씬으로 들어오면, 씬은 게임 내에서 플레이어에게 특정 특성을 부여할 수 있습니다.

다른 씬들도 같은 토큰에 대해 서로 다른 방식으로 반응할 수 있어, 게임 간의 흥미로운 상호작용을 만들 수 있습니다.

블록체인을 사용해 인벤토리 아이템을 저장하는 단점은 모든 거래에 플레이어의 비용이 들고 즉시 처리되지 않는다는 점입니다. 블록체인에 대해서는 아래의 전문 섹션에서 더 읽어보세요.

향후 릴리스에서는 플레이어가 어디든 휴대하는 인벤토리를 갖게 되며, 여기에는 온체인 및 오프체인 자산이 모두 포함될 것입니다.

휴대형 경험

💡 팁: 참조 휴대형 경험 및 스마트 웨어러블 을 통해 만드는 방법을 확인하세요.

휴대형 경험은 플레이어가 메타버스를 이동하면서 함께 가져가는 게임플레이의 일부입니다. 이는 토지 구획에 묶여 있지 않으며, 때로는 토큰에 묶이기도 하고, 때로는 탐험가에 의해 실행되기도 합니다. 예를 들어 플레이어가 당신의 씬에서 눈덩이를 가져가 다른 씬으로 걸어간 뒤, 같은 게임을 하고 있는 다른 플레이어에게 눈덩이를 던질 수 있습니다.

스마트 웨어러블은 웨어러블 토큰에 연결되고 플레이어가 해당 의상을 착용하면 활성화되는 일종의 휴대형 경험입니다. 스마트 웨어러블은 플레이어에게 비행을 가능하게 하는 제트팩처럼 새로운 능력을 부여하거나, 제네시스 시티 전체에 걸쳐 수집할 수 있는 코인을 무작위로 배치하는 것처럼 세계의 나머지 위에 새로운 콘텐츠 층을 추가할 수 있습니다.

플레이어가 당신의 씬에 있는 동안 다른 사람의 휴대형 경험을 사용하고 있을 수 있다는 점을 기억하세요. 참고 사용자 데이터 에서 플레이어가 현재 어떤 휴대형 경험을 활성화하고 있는지 확인하는 방법을 알아보세요.

게임 지속성

Decentraland는 지속형 월드이므로, 플레이어는 언제든지 당신의 씬을 방문할 수 있습니다. 당신의 씬에는 시작 단계도 종료도 없으므로, 언제 들어오거나 나가도 플레이어가 참여할 수 있도록 게임 메커니즘을 설계해야 합니다.

씬을 초기 상태로 되돌리는 리셋 메커니즘을 둘 수 있지만, 이미 플레이 중인 플레이어의 게임을 방해하지 않도록 주의해야 합니다.

씬 상태 동기화

기본적으로 씬 상태는 플레이어 간에 공유되지 않습니다. 각 플레이어는 자신의 로컬 씬 복사본을 실행합니다. 이는 씬을 만드는 가장 간단한 방법이지만, 소셜 경험에는 이상적이지 않습니다.

플레이어 간 상태를 공유하는 가장 쉬운 방법은 다음을 사용해 엔티티를 동기화됨으로 표시하는 것입니다. syncEntity 함수 안에서 실행하면 됩니다. 다음을 참조하세요 서버리스 멀티플레이어. 이 접근 방식에서는 상태 변경이 어디에도 저장되지 않습니다. 현재 씬 근처에 있거나 이를 로드 중인 플레이어가 없다면, 다음에 로드될 때 씬은 기본 상태로 재설정됩니다.

또한 서버를 사용해 당신의 씬에 대한 정보를 저장하고 모든 플레이어를 그와 동기화할 수도 있습니다. 이렇게 하면 플레이어가 근처에 없더라도 씬 상태가 일관되고 지속적으로 유지되며, 변경 사항을 검증해 플레이어가 속임수를 쓰지 못하게 할 수 있습니다. 권장되는 옵션은 다음을 사용하는 것입니다. 멀티플레이어 서버, 이는 Decentraland가 씬을 게시할 때 호스팅하고 배포해 줍니다. 또한 자체 서버를 호스팅할 수도 있으며, 이를 통해 보안 토큰 같은 특정 정보를 서버에만 보관하고 외부로는 전혀 노출하지 않을 수 있습니다.

게임 타이밍

기본 통신 아키텍처를 사용하는 게임은 플레이어 간에 지연이 생길 수 있다는 점을 고려해야 하며 서로 다른 플레이어의 행동 사이에서 빠른 반응에 의존해서는 안 됩니다. 우리는 턴제 게임이나 주로 플레이어 대 환경 상호작용에 기반한 게임을 권장합니다.

1인칭 슈팅 게임처럼 플레이어 간 행동 타이밍이 중요한 게임의 경우, 당신의 씬에 있는 모든 플레이어 사이의 실시간 권위 있는 진실의 원천으로 자체 서버를 구현해야 합니다.

씬의 플레이어

플레이어는 Decentraland에서 Ethereum 지갑 주소를 사용해 식별됩니다. 이 지갑은 플레이어가 소유한 모든 토큰과 이미 연결된 지속적 ID로 사용됩니다.

현재 Decentraland에서 동시에 존재할 수 있는 플레이어 수를 제한할 방법은 없습니다. 별도의 서버에서 서로 다른 게임 세션이 호스팅되는 다른 많은 게임과 달리, 적어도 지금은 모든 플레이어가 공유하는 Decentraland의 인스턴스는 하나뿐입니다.

어떤 시점이든 당신의 씬을 돌아다니는 여러 플레이어가 있을 수 있다는 점을 염두에 두어야 합니다. 그들 중 일부는 지나가기만 하고 게임에 참여하지 않을 수도 있습니다. 게임 메커니즘이 이런 상황에 쉽게 방해받지 않도록 하세요.

씬의 게임 루프는 플레이어에게 직접 영향을 줄 수 없습니다, 씬은 플레이어의 행동에 대해 반응적인 접근 방식을 취합니다. 플레이어가 엔티티 위에 서 있고 엔티티가 이동하거나 회전하면, 플레이어도 그 엔티티와 함께 이동합니다. 이는 엘리베이터, 떠 있는 플랫폼 등에 특히 유용합니다.

씬의 소유자로서, 문제를 일으키는 플레이어를 강제로 밀어내거나 텔레포트시켜 씬 밖으로 내보낼 수는 없습니다. 그러나 시그널링 서버에서 플레이어를 블랙리스트에 올릴 수 있습니다. 또한 씬 코드에 블랙리스트를 구현해 블랙리스트에 오른 플레이어에게 특정 서비스를 거부할 수도 있습니다.

씬 콘텐츠 제한

코드의 효율성에 각별히 주의하면서 씬을 구축해 주세요. Decentraland는 웹 브라우저와 모바일 기기에서 실행되어야 하며, 플레이어는 메타버스를 이동하면서 동시에 여러 씬을 렌더링하게 됩니다.

또한 씬을 가볍게 유지하려고 노력해야 합니다. 같은 텍스처와 자산이 넓은 오픈 월드 전체에서 편리하게 반복되는 다른 온라인 게임과 달리, Decentraland에서는 각 씬이 완전히 다른 자체 자산 세트를 가질 수 있습니다. 플레이어가 여러 씬을 걸어 다닐 때, 텍스처, 사운드 파일 등을 포함한 씬 콘텐츠 전체를 합리적인 속도로 다운로드할 수 있어야 합니다.

이 때문에 과도한 컴퓨팅 자원 사용을 막기 위해 일부 제한을 두었습니다. 자세한 내용은 씬 제한 을 참조하세요.

씬에 대한 접근

Decentraland의 지도는 도로와 공공 광장이 있도록 설계되어 있으며, 이는 다른 사람들이 무엇을 만들든 지도 여러 부분에 쉽게 접근할 수 있게 해 줍니다. 어떤 도로나 광장과도 인접하지 않은 토지 구획은 인접한 씬에 의해 벽처럼 둘러싸일 위험이 있지만, 우리는 대부분의 씬이 걸어 다닐 수 있고 다른 씬을 막지 않기를 기대합니다.

새로운 플레이어는 지도 중앙의 Genesis Plaza에서 경험을 시작하게 되며, 여기서 몇 가지 튜토리얼 활동을 따라 한 뒤 세계를 탐험하도록 안내받게 됩니다.

플레이어는 Decentraland 지도상의 특정 좌표에 대한 URL을 직접 입력해 해당 위치로 스폰될 수도 있습니다. 하드코딩된 초기 좌표가 있는 URL 링크를 공유할 수도 있습니다.

플레이어가 벽으로 막혀 있거나 지형보다 낮은 위치에서 시작하면 좋은 경험이 되지 않는다는 점을 기억하세요. 이를 피하기 위해, 안전하게 스폰할 수 있는 씬 내 특정 위치 집합을 정의하는 방법이 있습니다. 참고 씬 메타데이터 에서 자세한 내용을 확인하세요.

플레이어는 지도와 인기 장소 및 이벤트 목록을 사용해 세계를 빠르게 이동할 수도 있습니다. 당신의 씬에는 플레이어를 세계의 다른 부분으로 이동시키는 텔레포트를 포함할 수 있습니다. 참고 텔레포트.

사용자 UI

플레이어가 Decentraland에 입장할 때 보게 되는 기본 오버레이 UI에는 필수 요소만 들어 있습니다. 플레이어가 당신의 씬에 있는 동안 그 UI에 추가 요소를 더할 수 있습니다. Decentraland 기본 UI는 당신의 씬의 어떤 것보다도 위에 표시된다는 점을 기억하고, UI가 이와 겹치지 않도록 설계하세요.

플레이어가 씬 밖으로 나가면 다른 씬에 간섭하지 않도록 모든 UI 요소가 제거됩니다. 또한 플레이어는 화면에서 씬의 모든 UI 요소를 끌 수 있는 버튼도 사용할 수 있는데, 이는 주로 플레이어의 시야 전체를 가리려는 악의적 행동을 하는 씬을 막는 데 유용합니다.

Physics

SDK가 엔티티를 위한 완전한 물리 엔진을 제공하지 않는다는 점을 기억하세요. 플레이어 아바타에 힘과 임펄스를 적용할 수 있습니다. 참고 플레이어 물리. 엔티티 간 물리, 예를 들어 충돌이나 중력은 라이브러리를 가져오거나 직접 동작을 코딩할 수 있습니다.

컨트롤러 입력

게임 컨트롤은 SDK가 지원하는 입력 동작 집합으로 제한해야 합니다: 이동 키, 점프, 포인트 앤 클릭, 주(E) 버튼과 보조(F) 버튼, 그리고 숫자 액션 버튼(1~4)입니다. 이러한 입력은 물리적 키와는 추상화되어 있어 모바일 앱의 화면 제어 또는 다른 장치에도 매핑될 수 있으므로, 모두가 키보드를 가지고 있다고 가정하지 마세요. 참고 포인터 버튼 에서 전체 목록을 확인하고, 모바일 입력 에서 모바일 플레이어를 대상으로 할 때 무엇을 선호해야 하는지 확인하세요.

이 모든 입력은 전역 버튼 올림 및 버튼 내림 이벤트와, 엔티티가 플레이어의 조준선에 있었는지 식별하게 해 주는 히트 이벤트를 모두 지원합니다.

아바타

플레이어는 착용 가능한 아이템의 방대한 카탈로그로 아바타를 구성할 수 있습니다, 여기에는 Decentraland Marketplace에서 커뮤니티 크리에이터가 제작해 판매한 웨어러블도 포함됩니다. 당신의 씬은 플레이어가 무엇을 착용하고 있는지 읽고 이에 반응할 수 있습니다. 참고 사용자 데이터.

플레이어 간 커뮤니케이션

플레이어는 서로 채팅하고, 음성 채팅으로 이야기하고, 이모트를 사용해 신체 언어를 전달할 수 있습니다 예: 춤추기, 박수치기, 손 흔들기 등이 있으며, 커뮤니티 크리에이터가 판매한 이모트도 포함됩니다.

당신의 씬은 플레이어가 이모트를 사용하는 시점을 감지할 수 있고, 플레이어의 아바타가 애니메이션을 재생하게 할 수도 있습니다. 참고 플레이어가 애니메이션을 재생함 및 아바타 애니메이션.

게임 알림

현재 씬을 벗어난 교차 씬 알림 시스템은 없습니다. 현재 씬 밖에 표시되는 알림이 필요한 게임은 외부 서비스를 사용해 이를 구현해야 합니다.

블록체인 사용

Decentraland에서 블록체인은 소유권에 대한 정보를 저장하는 데 사용됩니다. 오늘날 이는 주로 LAND 소유권을 가리키지만, 게임 아이템, 웨어러블, 특별 아바타, 이모트, 그리고 특정 게임 특권이나 게임 접근을 보장할 수 있는 토큰의 소유권을 저장하는 데도 사용할 수 있습니다.

블록체인은 게임 상태, 플레이어 위치, 또는 실시간으로 바뀌어야 하는 어떤 것도 저장하는 데 사용되지 않습니다.

LAND와 MANA

메타버스에 참여하기 위해 플레이어가 토지 구획을 소유할 필요는 없습니다. 사실 대부분의 플레이어는 그렇지 않을 것입니다. 플레이어 아바타와 그들이 소유한 LAND 토큰은 어떤 직접적인 방식으로도 연결되어 있지 않습니다.

플레이어가 Decentraland에 입장하려고 미리 Ethereum 지갑이나 MANA 토큰을 소유하고 있을 필요도 없습니다. 게임플레이가 토큰 소유에 크게 의존한다면 대부분의 플레이어를 배제하게 됩니다. 프리미엄(freemium) 게임 모델은 두 사용자층 모두에 맞추는 이상적인 방법이 될 수 있습니다.

기타 NFT

특수한 대체 불가능 토큰(NFT)을 사용해 게임 아이템, 사용자 지정 아바타 또는 웨어러블을 표현할 수 있습니다. 플레이어가 이러한 토큰 중 하나를 소유하고 있다면, 당신의 씬은 다양한 방식으로 이에 반응할 수 있습니다.

NFT가 무엇인지에 대해 이 블로그 게시물.

게임 내 거래

당신의 씬은 플레이어가 토큰을 구매하거나 획득할 수 있도록 블록체인 거래를 지원할 수 있습니다.

블록체인 거래는 즉시 이루어지지 않으며, 검증 시간이 필요하고 Ether 비용이 듭니다. 시간과 비용 모두 현재 네트워크 사용량에 따라 달라집니다.

Decentraland는 Polygon 사이드체인을 사용해 Ethereum 네트워크보다 더 빠르고 저렴하게 거래를 처리합니다. 이 사이드체인은 게임 내 거래에 이상적이며, 변경 사항이 더 실시간에 가깝게 매우 낮은 비용으로 발생할 수 있습니다. 보안이 더 높아야 하고 더 비싸고 오래 걸려도 되는 거래에는 메인 Ethereum 체인을 여전히 권장합니다. 참고 2차 레이어.

플레이어는 항상 자신의 Ethereum 클라이언트에서 이러한 거래를 명시적으로 승인해야 합니다. 예를 들어 Metamask를 사용할 때, Metamask는 각 거래가 처리되기 전에 플레이어에게 이를 수락하라고 요청합니다.

또한 플레이어는 특정 주소나 특정 제약 내에서 요청된 모든 거래를 자동으로 승인하는 계약에 서명할 수 있어, 거래 승인으로 인한 중단을 피할 수 있습니다.

또한 스마트 계약을 사용해 사용자 지정 조건에 따라 거래를 조건부로 처리할 수도 있습니다. 예를 들어 플레이어가 게임 결과에 베팅하도록 스테이크를 걸고, 결과가 알려지자마자 해당 지불이 자동으로 이루어지게 할 수 있습니다.

당신의 씬 코드에 블록체인 상호작용을 구현하려면 Ethereum 네트워크와 인터페이스하는 외부 라이브러리를 사용해야 합니다. SDK의 향후 릴리스에서는 이러한 기능을 더 간단한 방식으로 노출하는 사용자 지정 API가 제공될 것입니다.

마지막 업데이트