게임 진화하기
고급 디자인, 스마트 성장 및 더 나은 수익 창출으로 블록 체인 게임을 위조하기 위해 알고 좋아하는 도구를 사용합니다.
게임 진화하기
고급 디자인, 스마트 성장 및 더 나은 수익 창출으로 블록 체인 게임을 위조하기 위해 알고 좋아하는 도구를 사용합니다.
감사합니다! 이메일을 확인하십시오.
오류

잃어버린 유물에 전력을 공급하는 기술 스택

로스트 유물 개발자 클리프 카울리가 엔진 플랫폼과 유니티 엔진을 사용하여 최초의 엔진 구동 ARPG를 구축하는 방법에 대한 기술적 깊은 다이빙.

다음은 잃어버린유물의 창조자 인 클리프 카울리 (Cliff Cawley)의게스트 게시물입니다.

엔진 플랫폼을통해 이더리움 메인넷에서 실행되는 해킹 앤 슬래시 던전 크롤러인 로스트 유물(이전의 "잊혀진 유물")의 첫 번째 플레이 버전을 발표한 지 8개월이 지났습니다.

잃어버린 유물은 엔진 스파크 프로그램에 접수된 첫 번째 프로젝트였다. 다른 작업으로 바쁘게 일하면서 초기 얼리 어답터 프로그램을 놓친 후, 저는 스파크와 엔진 생태계에 합류하여 블록체인 게임 공간에서 모험을 시작했습니다.

그 이후로 Enjin의 블록 체인 게임 개발 플랫폼을 최대한 활용하는 모범 사례 및 권장 사항과 함께 내 경험이 있습니다.

초기 릴리스

2019년 5월 첫 번째 게임 출시는 스트레스로 수행한 시스템이 얼마나 잘 수행되었는지, 그리고 더 많은 것을 구축하고 유지해야 하는 것을 보기 위해 사용했던 이벤트인"Stampede"가빠르게 이어졌습니다.

원래 스탬피드 이벤트 이후에 서버를 종료하여 재구성, 계획 및 개선에 시간을 할애할 계획입니다. 그러나 참가자들은 서버를 계속 실행하고 계속 플레이할 수 있도록 해 달라고 부탁했습니다.

업데이트에 대한 최소한의 가동 중지 시간으로, 게임은 8 개월 동안 라이브및 계산되었습니다!

두 번째 이벤트인"타락한 태블릿"은7월 1일부터 시작되어 플레이어 간에 블록체인 자산을 전달하는 테스트를 통해 목표를 달성했습니다.

보상으로, 플레이어는 활성화하고 세 정제 중 하나를 따라 전달 한 후 비밀 보물 룸 내에서 높은 계층 전리품을 찾을 수있는 기회를 부여했다.

백엔드 서비스에 PlayFab을 사용하여 출시하여 플레이어 계정, 재고 관리 및 서버 측 스크립팅과 같은 중요한 시스템을 신속하게 배포할 수 있었습니다.

PlayFab은 방금 시작한 경우 놀랍고 간단하며 사용하기 쉬운 서비스입니다. 그들은 당신을 위해 많은 시스템을 처리하고 플레이어 관리, 플레이어 인벤토리, 항목 데이터베이스, 분석 대시보드 및 순위표와 같은 몇 가지 환상적인 기능을 가지고 있습니다.

나는 PlayFab을 적극 추천하지만, 마일리지는 달성하려고하는 것에 따라 다를 수 있습니다.

나는 일을 필요로하는 방식에 문제가 실행, 그 중 일부는 내가 아래에 자세히. PlayFab을 처음 사용한 지 몇 달 만에 몇 가지 중요한 업그레이드와 변경 작업을 수행했기 때문에 지금까지 해결된 몇 가지 문제가 해결되었을 수 있습니다.

엔진 통합

3월 29일 로그인부터 아이템 획득까지 전체 사용자 경로와 엔진 통합을 공개했습니다.

Unity를 위한 Enjin의 블록체인 SDK를사용하여 이 프로세스를 수행할 수 있다는 것을 보여주는 것은 매우 빠르지만 SDK를 사용하여 쓰기 작업(예: 아이템 생성, 송신 및 채굴)을 수행하여 게임을 릴리스하고 싶지는 않습니다.

클라이언트 측 SDK GUI

SDK에는 프로젝트 관리를 위한 편집 GUI와 쿼리 및 수정을 위한 API의 두 가지 주요 구성 요소가 포함되어 있습니다. GUI는 항목을 만들고, 편집하고, 민트하고, 녹는 것을 매우 간단하게 만듭니다.

처음 시작했을 때, 이것은 나의 구원의 은혜였다.

그것은 내가 직접 GraphQL을 쿼리하지 않고 , 내가 사용할 수있는 것과 내가 무엇을 할 수 있는지 시각적으로 볼 수 있었습니다, 나는 아직 사용하는 방법을 확실하지 않았다.

한 곳에서 내 물건을 보고 편집할 수 있었습니다.

결국 이 프로세스를 자동화된 것으로 이동하려고 합니다. 그것은 좋은 소개, 그것은 당신이 많은 항목을 만드는 경우 장기 를 사용 해야 하는 뭔가.

최근 엔진은 위의 편집 도구를 포함하도록 웹 콘솔을 업데이트했기 때문에 웹 패널에서 도 똑같은 작업을 수행할 수 있습니다.

클라이언트 측 SDK API

API 코드는 GraphQL 호출을 둘러싼 래퍼이며 업데이트를 위해 푸셔 서비스에 연결하기 위한 코드(예: 지갑 잔액이 업데이트되는 경우)가 포함됩니다.

이 API는 보기로만 제한된 권한이 있는 ID와만 사용해야 합니다. 수정기능을 제공하는 모든 사용 권한은 제거해야 합니다.

필요한 유일한 보기 권한은 ViewBalances입니다.

그런 다음 로그인 세부 정보를 SDK에 입력하면 클라이언트에서 사용할 수 있습니다.

이러한 세부 정보는 게임 바이너리의 일반 텍스트에 저장됩니다. 이렇게 하면 게임을 다운로드하는 모든 사람에게 해당 Enjin 계정에 대한 전체 액세스 권한을 부여하므로 잠겨 있는지 확인하십시오.

당신은 당신의 게임 바이너리에서 이러한 세부 사항을 암호화 할 수 있습니다, 하지만 당신이 그 세부 사항을 반전하고 게임에서 복구 실현보다 실제로 훨씬 쉽습니다.

개인적으로, 개발 하는 동안 실수로 관리자 세부 정보를 추가할 수 있습니다 때문에이 작업을 수행 에 대 한 경고 것, 그들을 제거 하는 것을 잊지, 빌드에서 전체 액세스를 해제.

또한 서버가 작업의 유효성을 검사하기 위해 동일한 정보를 쿼리해야 하고 클라이언트가 다시 쿼리해야 하기 때문에 Enjin에 더 많은 쿼리를 수행해야 합니다. Enjin이 API 호출에 대한 할당량을 구현한 경우 나중에 클라이언트 호출을 줄이기 위한 창의적인 방법을 찾아야 할 수 있습니다.

대신 모든 것이 서버에 있는 경우 캐싱을 추가한 다음 스냅숏을 클라이언트에 반환할 수 있습니다. 서버와 엔진 또는 이더리움에 해당 캐시를 저장하면(내가 라이브한 8개월 동안 두 번 일어났음) 플레이어들은 여전히 해당 아이템을 사용할 수 있습니다.

엔진의 유니티 SDK(또는 다른 클라이언트 엔진 SDK)를 게임에 대한 제작 또는 채굴과 같은 중요한 것은 사용하지 않는 것이 좋습니다(예: 레벨을 완료하기 위해 플레이어에게 아이템을 보내는 경우).

완전히 제어하는 서버가 신뢰할 수 있는 에이전트이고 이러한 작업을 수행하는 유일한 엔터티가 되기를 원합니다.

내 경우, 나는 플레이어에 대한 두 가지 재고가 있습니다 : 가상 (블록 체인 기반이 아닌 항목 또는 블록 체인 기반의 항목 및 전송대기 중인 큐에 앉아있는 항목) 및 블록 체인 .

서버는 둘 다 쿼리하고, 결합하고, 캐시하고, 클라이언트에 현금을 보냅니다. 캐시는 때때로 플러시되지만 클라이언트는 푸시 채널의 변경 내용도 모니터링합니다. 클라이언트는 다음 업데이트 중에 서버에 이에 대해 알려줍니다. 변경된 경우 서버도 해당 사용자의 캐시를 플러시합니다.

그래프QL

유니티 SDK는 엔진의 그래프QL 서비스를 핵심으로 부른다.

엔진의 유니티 SDK를 학습 자료로 사용했습니다. 사물을 어떻게 합쳐야 하는지에 대한 초기 지식의 대부분은 SDK의 소스 코드를 읽는 데서 비롯되었습니다.

언리얼 엔진과 같은 다른 SDK를 기다리는 경우 서버에서 GraphQL을 직접 호출하는 대신 다이빙을 하는 것이 좋습니다.

엔진 플랫폼: 모범 사례

서버 사용

모든 블록 체인 돌연변이 작업이 보안 서버에서만 수행되도록하십시오.

당신은 당신의 클라이언트 (그 네이티브 윈도우, 맥, 안드로이드, iOS, 웹) 그것은 클라이언트 / 게임 외부에서 그 호출을 할 수있는 충분한 지식을 가진 사람이 할 수 있기 때문에 직접 GraphQL 통화를 실행하는 것을 원하지 않는다.

큐 및 일괄 처리 보내기 항목

스탬피드 이벤트를 시작했을 때, 던전을 성공적으로 종료하자마자 플레이어에게 아이템을 보내곤 했습니다.

이것은 잘 작동, 그리고 나는 매우 빠르게 항목의 수천을 보냈다 - 즉, 이더리움 네트워크가 혼잡 할 때까지.

엔진의 블록체인 관련 통화가 오류를 반환하기 전에 계정에 약 16건의 보류 중인 거래(채굴 대기)를 가질 수 있다는 것을 알게 되었습니다. 조작하려는 항목을 추적하지 않으면 다시 떨어질 레코드가 없습니다.

잃어버린 유물에서이 시간 동안 잃어버린 항목은 던전의 용암에서 잃어버린 것으로 이해됩니다.

또한 각 거래에 대해 가스 비용이 들며, 지불하는 가스의 양은 데이터 양에 따라 증가합니다.

그 때, 나는 표준 송신 (단지 항목을 보낼 수있는 ETH의 많은)를 사용하여 단일 트랜잭션에서 대상 지갑에 하나의 항목을 보내고 있었다.

대신 모든 전송 목적으로 고급 보내기를 사용하는 것이 좋습니다. 한 트랜잭션의 여러 주소로 여러 항목을 보낼 수 있습니다.

트랜잭션 크기 자체에 제한이 있지만 대략적인 가이드는 전송 배열에 100개 이상의 항목이 없기 때문에 제한이 있습니다. 재미있는 토큰(FT)을 보내는 경우 항목 수는 중요하지 않지만 NFT(비재생 토큰)는 항목당 하나일 수 있습니다.

반환된 트랜잭션ID 저장

엔진의 그래프QL에 대한 거의 모든 돌연변이 호출은 트랜잭션Id를 반환합니다. 방금 한 일의 상태를 쿼리하는 데 사용할 수 있으므로 이 것을 저장하는 것이 중요합니다. 로그에 저장하지 말고 나중에 쿼리하는 데 사용할 수 있도록 데이터와 함께 저장합니다.

예를 들어 보내기를 발행하는 경우 이 트랜잭션Id를 사용하여 전송이 성공했거나 블록 체인에 보류 중이거나 실패했는지 확인할 수 있습니다.

트랜잭션을 조사할 때 사용하는 일반적인 GraphQL 쿼리는 다음과 입니다.

query {
 EnjinTransactions(
   id: TRANSACTION_ID_HERE,
 ) {
   id
   transactionId
   type
   state    
   error
   nonce
   token {
     id
     name
   }
   retryState
 }
}

이 쿼리는 한 호출에서 오류의 원인을 확인하기 위해 충분한 정보를 반환하거나 오류가 없는 경우 상태를 확인합니다. 대부분의 서버 프로세스는 상태를 결정하기 위해 이 쿼리를 사용합니다.

예를 들어, 퀘스트를 성공적으로 완료했는지 확인하기 위해 이 쿼리를 사용하여 퀘스트 요구 사항에 대해 플레이어에게 발급한 트랜잭션Id가 게임 지갑으로 성공적으로 전송되었는지 확인합니다.

고급 보내기

고급 보내기는 굉장합니다. 여러 사람에게 항목을 보내거나 항목을 요청하는 데 사용할 수 있습니다. 나는 당신이 잃어버린 유물에서 볼 퀘스트를 구현하기 위해이 사용.

아래 예에서, 나는 한 거래에서 두 개의 서로 다른 지갑에 자신에서 TOKENID1의 20,000 FT와 10,000 FT를 보내고 있습니다 :

mutation advancedSend {
 CreateEnjinRequest(identity_id: SENDER_ID, type: ADVANCED_SEND, advanced_send_token_data: {
 transfers: [
 {from_id: SENDER_ID, to: "0xTARGETWALLETADDRESS1", token_id: "TOKENID1", value: "20000"},
{from_id: SENDER_ID, to: "0xTARGETWALLETADDRESS2", token_id: "TOKENID2", value: "10000"}
 ]})
{
   id
   encoded_data
 }
}

전송 배열에 더 많은 항목을 추가하여 한 번에 더 많이 전송할 수 있습니다. 100개 이상을 추가하지 않도록 하십시오.

항목을 요청하려면 요청하는 사용자의 identity_id 사용하십시오. 사용자의 identity_id 플랫폼에 만기되며 지갑을 연결하고 ENJ 지출을 승인해야 합니다.

혼잡 허용

코반에서 테스트할 때 트랜잭션이 매우 빠르게 발생합니다. 대부분의 경우 메인넷에서도 마찬가지이지만 문제가 발생하기도 합니다.

내가 만난 몇 가지 일반적인 문제는 다음과 같습니다.

  • 이더리움은 혼잡하고 가스 가격이 상승하여 귀하 또는 귀하의 플레이어가 서명한 거래가 더 이상 광부에 의해 포착되지 않도록합니다(낮은 가스 수수료로 서명되었기 때문).
  • Enjin의 시스템 내의 버그는 성공적으로 처리되었음에도 불구하고 그래프QL 시스템 내에서 트랜잭션이 업데이트되지 않게 되었습니다.

블록 체인 상호 작용을 설계하여 순간에 덜 지도록하거나 처리 시간이 허용되는 것을 초과하는 경우 처리를 수동으로 재정의 할 수있는 방법을 확보하십시오.

가스 가격이 지연을 일으킨 경우 나중에 블록 체인 상호 작용이 중단되고 재개 될 수 있는지 확인하려고합니다.

예를 들어 플레이어가 아이템을 제작하도록 허용하는 경우 제작 프로세스는 진행 상황에 대한 충분한 정보를 제공하고 플레이어가 너무 오래 기다렸다고 판단되는 경우 프로세스를 중단하고 나중에 다시 시작할 수 있도록 해야 합니다.

퀘스트를 완료하거나 스토리지 트렁크를 열어 잃어버린 유물에서 어떻게 작동하는지 확인할 수 있습니다.

또한 블록 체인 트랜잭션의 상태 확인을 재정의 할 수 있도록 서버 논리를 디자인합니다. 내 관리 패널에서, 나는 내가 성공하기 위해 블록 체인 상태를 강제 할 수있는 버튼을 제공합니다. 지난 몇 달 동안 블록체인 거래가 올바르게 처리되었지만 Enjin이 볼 수 없었던 데 자주 사용했습니다.

성공적으로 처리되지 않은 트랜잭션을 승인하지 않도록 하기만 하면 EnjinX에서트랜잭션 해시를 확인하여 수행할 수 있습니다.

이 대체를 제공하면 거래가 성공적이었는지 수동으로 확인한 다음 퀘스트를 "보상을 청구할 준비가 된" 상태로 밀어 내 플레이어가 계속 할 수 있도록 할 수 있었습니다.

백엔드 v1: 플레이팹

나는 처음에 PlayFab에 의해 구동 내 백 엔드와 함께 발표하고 매우 광범위하게 항목 카탈로그 및 드롭 테이블 기능을 사용했다. 무제한 아이템이 있는 전통적인 게임에서는 시스템이 매우 잘 작동합니다.

제한된 공급 항목

제한된 공급 항목을 관리하는 경우 동일한 문제 중 일부가 발생할 수 있습니다.

대부분의 물품이 공급이 제한되어 있었기 때문에 지갑에 있는 것보다 더 많은 물건을 포기하지 않도록 정확하게 해야 했습니다. 그것은 그들이 단지 매우 희귀 신스 레이어 우승 하지만 내가 재고가 부족 했기 때문에 그들에게 보낼 수 없습니다 선수를 표시하는 가난한 형태가 될 것입니다.

PlayFab에는 아이템당 사용할 수 있는 "한정판" 기능이 있습니다. 이것은 내가 사용해야 하는 정확히 무엇이지만 총 항목100개에 대한 임의 제한이 있습니다. 나는 이것이 지금 1,000로 제기되었을 수 있다고 생각하지만, 그 값 위에 항목수가 있는 경우 그 숫자는 여전히 충분하지 않습니다.

이것은 내가 만난 첫 번째 장애물이었기 때문에 그 주위에 창의적인 해결책을 마련해야했습니다. 이렇게 하려면 항목으로 별도의 사용자 지정 데이터를 추적했습니다. 이 사용자 지정 데이터는 총 및 남은 공급을 추적했습니다.

플레이어에게 아이템을 제공할 때마다 이 값이 25로 떨어졌는지 확인하고, 만약 이 값이 있다면 최대 100위까지 올라갈 수 있습니다(충분한 공급이 있는 경우). 그것은 janky, 하지만 그것은 작동 하 고 그들의 시스템을 사용 하 여 작업을 계속 할 수 있도록.

서버 스크립트

나는 개인적으로 C #를 선호합니다. 저는 고등학교 시절부터 QBasic과 이후 비주얼 베이직을 배우고 게임 업계에서 일하기 시작했을 때 C와 C++로 이전했습니다. 나는 웹 (PHP, 자바 스크립트 등)에 사용되는 언어를 포함하여 길을 따라 다른 언어의 무리를 집어 들었다.

PlayFab은 서버 측 스크립팅에 자바스크립트를 사용하며 자바스크립트로 코딩하는 방법을 알고 있지만 C#를 선호합니다. 내 스택의 전체 는 모두 C #이었다, Unity에서 내 사용자 지정 도구에, 그래서 이것은 나를 위해 단점, 하지만 뭔가 내가 당분간 함께 살 수 있는.

PlayFab은 C #를 실행할 수 있도록 침입했으며, 곧 출시할 수 있다고 생각합니다 (현재 개인 미리 보기중입니다).

자바스크립트에 작성된 첫 번째 서버 측 코드

PlayFab의 서버 스크립팅의 제한은 스크립트를 실행하는 데 10초 이상 걸릴 수 없다는 것입니다. 그렇게 되면 약 9.3초 후에 내 경험으로 종료됩니다.

대부분의 사용 사례는 이 한도에 근접하지는 않지만 엔진 API 호출을 더 많이 추가하면서 약 한 달 이내에 이를 타격하기 시작했습니다.

PlayFab 서버에서 Enjin의 GraphQL 호출은 쿼리한 데이터 양(예: 플레이어가 지갑에 있는 항목의 양) 또는 서버에서 새 릴리스를 한 경우 실행하기까지 최대 1초가 걸리는 경우가 있습니다. PlayFab 통화와 Enjin 호출의 몇 가지를 혼합하고 신속하게 추가합니다.

추가 네트워킹 딸꾹질이 있다면, 하나의 Enjin 통화는 몇 초 이상 걸릴 수 있습니다.

더 많은 멀티버스 아이템과 엔진에 대한 더 많은 호출에 대한 지원을 추가하면서 PlayFab의 서버 스크립팅에 기록된 함수가 부분적으로만 실행되었다는 것을 알게 되었습니다.

얼마나 많은 함수가 실행되었는지 전혀 몰랐고 실행 시간을 늘리는 유일한 방법은 엔터프라이즈 계층으로 업그레이드하는 것뿐이라는 것을 발견했습니다. 나는 이미 몇 주 전에 지원의 어떤 수준을 얻기 위해 프로에 무료에서 업그레이드했다, 나는이 하나의 기능에 대한 가능한 가장 높은 계층으로 업그레이드 할 준비가되지 않았습니다.

백엔드 v1.5: 임시 반다이드

실행 시간 제한을 둘러싼 방법이 없었기 때문에 솔루션을 신속하게 찾아야했습니다.

PlayFab 서버 스크립트(자바스크립트)에서 C# 코드로 모든 서버 논리 및 기타 코드를 변환하고 대신 Microsoft Azure에서 웹 서비스로 실행하기로 결정했습니다. 이렇게 하면 스크립트가 실행된 빈도를 완전히 제어할 수 있었고 서버에서 PlayFab의 서비스를 계속 사용할 수 있었습니다.

모든 코드를 변환하는 데 약 1주가 걸렸습니다. 이제 자체 Azure 웹 서비스에서 코드를 실행하고 모든 사용자 계정, 항목, 인벤토리, 리더보드 등에 대해 PlayFab에 의존하고 있었습니다.

백엔드 v1.5 일몰: 안녕 플레이팹

PlayFab 플랫폼에서 시간을 보내는 동안 사용 중이던 제한된 공급 기능에 영향을 주는 중요한 버그를 포함하여 여러 버그가 발생했습니다. 내가 만난 각 문제에 대한 통제가 없었고 PlayFab의 지원 팀이 응답할 때까지 기다려야 했습니다.

무료 및 인디 계층은 일반적으로 24-36 시간이 소요되는 응답 시간으로 포럼 도움말만 제공했습니다. 내가 만난 더 중요한 문제 중 일부에 대 한, 그것은 전용 된 지원을 제공 하기 때문에 프로로 업그레이드 결국. 불행히도, 전담 지원은 포럼이 응답을 얻는 데 거의 한 시간이 걸렸으며, 문제를 해결하는 것보다 문제를 닫는 것이 더 열망하는 것처럼 보였습니다.

또한 지정된 계정에 2,000개가 넘는 항목 로그 이벤트가 발생하면 플레이어 계정이 더 이상 로드되지 않는 오랜 문제가 있었습니다. 이 문제를 해결하기 위해, 나는 그들이 단순히 페이징 지원을 추가 할 수 있다고 제안했지만, 문제는 해결되지 않았고 PlayFab 지원은 투표해야 할 "미래의 기능 요청"으로 간주했습니다.

더 많은 플레이어가 자신의 계정에 아이템을 추가하고 제거했기 때문에 더 많은 계정이 더 이상 로드되지 않았습니다. 지원 문제와 함께, 이것은 나를 위해 마지막 빨대였다.

그것은 내 자신의 사용자 정의 솔루션을 사용하여 새로운 시작을위한 시간이었다.

백 엔드 v2: 사용자 지정 솔루션

나는 수년에 걸쳐 많은 백 엔드 서비스를 작성했습니다, 그래서 나는 PlayFab 서비스의 대부분을 재현이 매머드 작업에 걸릴 수있는 능력을 가지고 알고 있었다.

그것은 지금 8 월 중순 주위에 언젠가, 그리고 플레이 팹에 대한 의존을 제거하는 작업을 시작했다. 나는 한 번에 하나씩 다양한 시스템을 다시 만들고 그들이 PlayFab 제품과 유사한 작업하고 행복하면 온라인으로 가져왔다.

나는 지난 몇 년 동안 그것으로 가장 많은 경험을 했고 그들은 기본적으로 C # .Net 코어 스택 내가 이미 사용 했던 지원 으로 마이크로소프트 Azure와 함께 계속 결국. Azure Sql으로 구동되는 데이터베이스를 만들고 CDN, 서비스 버스, Blob 저장소및 응용 프로그램 인사이트를 사용했습니다.

먼저 암호없는 전자 메일 인증 ("암호 잊어 버린"역학과 유사)에 의존하는 사용자 인증 시스템을 만들었습니다. 이 시스템이 인증 측면을 투명하게 처리한 후 항목 데이터베이스를 다시 만드는 작업을 시작했습니다.

관리자 백엔드 미리보기

아이템 데이터베이스가 원활하게 작동하면 플레이어 인벤토리 지원, 플레이어 계정 관리, 어드벤처 추적, 순위표, 상점 및 관리 백엔드를 추가했습니다.

9 월 17 일, 나는 성공적으로 뿐만 아니라 웹 사이트의 완전한 새로 고침과 함께 새로운 백 엔드를 시작했다. 몇 가지 사소한 수정 후, 그것은 그 이후로 환상적으로 실행되었습니다, 나는 그것을 구축하고 개선하기 위해 계속.

관리 패널

일부 개발자는 데이터베이스에 직접 액세스할 수 있도록 설정하고 SQL 쿼리를 실행하여 데이터를 읽고 쓰고 계정을 관리하기만 하면 충분합니다. 그러나 나는 인간의 오류 구성 요소를 줄이고 누구나 사용할 수있는 인터페이스를 만드는 것을 선호합니다.

나는 이것을 용이하게하고 나에게 잃어버린 유물을 관리하고 관리하기위한 제어 패널을 제공하기 위해 간단한 관리 패널을 만들었습니다.

관리자 패널을 사용하여 게임 아이템(블록 체인 아이템 포함) 및 새로운 이벤트, 모험 및 퀘스트를 설정하고, 수제 SQL 명령을 실행하고 데이터를 입력할 때 특정 규칙을 따르도록 합니다.

항목 편집

블록 체인 생성 보류 중인 항목

시스템이 항목이 블록 체인 항목이지만 아직 생성되지 않은 것을 감지하면 관리자 패널에서 바로 만들 수 있습니다.

"블록체인 항목 만들기" 버튼을 클릭하면 항목이 처리를 위해 큐에 추가됩니다. 엔진에 전화를 걸어 입력된 값으로 토큰을 만들고 메타데이터를 설정하고 모든 인스턴스를 조폐하는 서버 웹 작업에 의해 포착됩니다.

나는 그것이 인간의 오류 구성 요소를 제거로 자신의 프로젝트에 대해이 같은 자동화 된 시스템을 설정하는 것이 좋습니다.

블록체인 보내기 대기열

스탬피드 이벤트 가 끝난 후 나중에 트랜잭션을 처리하기 위해 대기열이 필요하다는 것을 깨달았습니다. 큐의 이점은 항목을 보내기 전에 몇 가지 전제 조건을 확인할 수 있습니다.

항목을 보내기 전에 다음을 확인합니다.

  1. 보내기 큐가 활성화되어 있습니까? 그렇지 않은 경우 전송을 지연합니다.
  2. 마지막으로 전송하고 완료된 트랜잭션이 성공적으로 완료된 가? 그렇지 않은 경우 전송을 지연합니다.
  3. 가스 가격은 합리적인 가격인가요? 그렇지 않은 경우 전송을 지연합니다.
  4. 보낼 고유 항목이 최소 100개 이상입니까(예: 전체 일괄 처리 하나) 또는 가장 오래된 추가 항목이 12시간 이상 입니까? 그렇지 않은 경우 전송을 지연합니다.

위의 모든 전제 조건이 충족되면 항목 일괄 처리를 내보내드립니다.

결과 트랜잭션Id를 저장하고 정기적으로 확인하여 성공여부를 확인합니다.

4단계는 더 이상 전체 일괄 처리가 남지 않을 때까지 또는 트랜잭션 상태가 변경되지 않고 약 30분 후에 반복됩니다.

전체 프로세스는 Azure에서 웹 작업으로 몇 분마다 실행됩니다.

유니티로 제작

게임 업계에서 일하던 시절에제가 일하던 모든 회사에는 사내 게임 엔진이 있었습니다.

각 엔진은 자신의 장단점을 가지고 있으며 일반적으로 각 회사의 직원의 지식과 전문 지식에 의해 제한되었습니다.

회사를 변경했다면 다음 회사의 엔진이 이전에 사용했던 것과 매우 다르기 때문에 대부분의 엔진 지식은 쓸모가 없었습니다. 이 기간 동안 업계 전반에 걸쳐 시행된 표준은 일반적으로 없었으며, 각 회사는 각자의 길을 걷게 되었습니다.

Unity는 이를 바꾸고 경쟁이 치열하고 기교를 추가했으며, 이는 언리얼엔진의 가격을 낮추는 데 주도되었습니다.

당시, 라이선스 비용은 게임 예산의 거의 3분의 1을 소비하기 때문에 다른 엔진을 허가하지 않았습니다. 지금, 그것은 완전히 다른 (더 저렴 한) 이야기.

에셋스토어

저는 직업에 의한 프로그래머이지만 예술, 오디오 및 디자인을 즐깁니다.

유니티 엔진을 의기르기 쉽고 에셋 스토어와결합하여 처음부터 잃어버린 유물을 빠르게 만들 수 있었습니다.

이런 종류의 사용과 힘은 10년 전에는 전례가 없었습니다.

유니티 에셋 스토어에서 제 예술 자산을 많이 기획한 다음 잃어버린 유물 우주에 맞게 사용자 정의합니다. 이는 생산성을 크게 향상시키기 때문에 인디 개발자에게 일반적인 프로세스입니다.

편집기

저는 잃어버린 유물의 세계를 살리기 위해 단합에 의존합니다.

엔진을 작성한 적이 있다면 Unity가 얼마나 많은 핸들을 처리하는지 알 수 있습니다(힌트: 많은 것). 레벨을 디자인하고, 게임 플레이에 대한 코드를 만들고, Unity 편집기 내에서 모든 레벨을 미리 봅니다.

Unity는 제가 할 필요가 없도록 많은 무거운 리프팅을 수행하며, 대신 게임에 집중하고 모든 사람이 플레이할 수 있는 매력적이고 재미있는 경험을 만들 수 있습니다.

당신이 지금까지 그것을 만든 경우, 읽어 주셔서 감사합니다.

비슷한 여행을 시작 하는 개발자, 운동에 오신 것을 환영합니다!

잃어버린 유물 플레이어라면 이 여정의 일원이 되어 주셔서 감사합니다.

게임 진화하기

고급 디자인, 스마트 성장 및 더 나은 수익 창출으로 블록 체인 게임을 위조하기 위해 알고 좋아하는 도구를 사용합니다.

시작하기

게임 진화하기

고급 디자인, 스마트 성장 및 더 나은 수익 창출으로 블록 체인 게임을 위조하기 위해 알고 좋아하는 도구를 사용합니다.

감사합니다! 이메일을 확인하십시오.
오류

당신은 또한 즐길 수 있습니다