이를 사용하여 제작된 놀라운 게임들이 있었습니다. Unity 플랫폼에서 볼 수 있습니다. 일부는 Unity 앱 쇼케이스 섹션으로 이동합니다. 이러한 창조물만큼이나 인상적인 것은 Unity로 빌드된 모든 게임에는 로컬 데이터베이스라는 핵심 구성 요소가 빠져 있습니다.
Unity에서 로컬로 호스팅되는 데이터베이스는 다음을 수행할 수 있습니다. 게임 데이터 지속 게임 플레이를 개선하여 게임이 종료되거나 느려지지 않습니다. 네트워크 연결이 끊어집니다. 플레이어의 게임 내 최고 점수는 저장되었다가 네트워크 연결이 복구되면 원격 데이터베이스에 동기화될 수도 있습니다.
이 블로그 게시물에서는 Unity와 NoSQL 데이터베이스인 카우치베이스가 어떻게 함께 작동하여 다음을 제공할 수 있는지 살펴봅니다. 뛰어난 모바일 게임 플레이어를 위한 경험.
유니티 게임즈와 카우치베이스
유니티용 카우치베이스 모바일을 시작하려면 먼저 튜토리얼 를 참조하여 기존 Unity 게임을 가져와 로컬 데이터베이스를 추가합니다. 첫 번째 부분은 Couchbase Lite 프레임워크를 가져오는 것입니다. 예제 앱에서는 GameController.cs 파일의 맨 위에 Couchbase를 포함시킵니다:
1 2 3 4 |
사용 카우치베이스.Lite; 사용 카우치베이스.Lite.Unity |
Unity 게임 데이터베이스 생성
우리가 빌드하는 게임의 경우 플레이어 데이터는 문서에 저장되며 플레이어의 최고 점수가 포함된 문서를 가져옵니다. 데이터베이스를 검색하거나 데이터베이스가 없는 경우 데이터베이스를 생성하기 위해 Couchbase를 참조합니다. 관리자 클래스.
1 2 3 |
var db = 관리자.공유 인스턴스.데이터베이스 가져오기("스페이스슈터"); |
플레이어 문서 검색
'player_data'라는 문서를 통해 플레이어의 게임 내 데이터를 참조합니다. 문서를 요청할 때 데이터베이스 변수 db를 참조하면 해당 문서가 'spaceshooter' 데이터베이스와 연결됩니다. 우리는 문서 가져오기 메서드를 호출하고 문서 이름을 전달합니다. 문서가 존재하지 않으면 문서가 생성됩니다.
1 2 3 |
var doc = db.문서 가져오기 ("player_data"); |
데이터는 문서의 속성으로 설명되며, 게임 내에서 사용자의 최고 점수를 설정하려면 문서의 속성을 수정하고 새 수정본을 저장합니다. 이를 위해 업데이트 메서드를 사용합니다.
1 2 3 4 5 6 7 8 9 10 |
doc.업데이트(rev => { var 소품 = rev.사용자 속성; 소품["high_score"] = newHighScore; rev.SetUserProperties(소품); 반환 true; }); |
게임용 로컬 데이터베이스를 보유하면 네트워크에 의존하지 않고도 게임 속성을 기기에 저장할 수 있다는 장점이 있습니다.
로컬 데이터 복제
복제 엔드포인트를 생성하면 로컬 데이터를 원격 서버로 푸시할 수 있습니다. 이를 위해 CreatePushReplication 메서드를 호출하고 동기화할 엔드포인트 URL을 전달합니다. 복제를 시작하려면 변수에서 'Start()'를 실행합니다.
1 2 3 4 5 6 |
var push = db.CreatePushReplication(SYNC_URL); push.시작(); |
데이터는 로컬에서 유지되며, 연결이 가능한 경우 원격 엔드포인트에서도 유지됩니다.
원격 데이터 동기화
원격 엔드포인트에서 최신 데이터를 가져오는 것은 로컬에 저장하고 동기화하는 것만큼이나 간단합니다. 단일 풀 복제를 만들려면 먼저 'GetDatabase' 메서드를 호출하고 데이터베이스 이름(이 경우 'spaceshooter')을 전달하여 데이터베이스를 가져옵니다. 하지만 이제 'PushReplication'을 통해 기기에 로컬로 있는 데이터로 원격 서버를 업데이트하는 대신 원격 엔드포인트에서 'PullReplication'을 실행합니다.
1 2 3 4 5 6 7 |
var db = 관리자.공유 인스턴스.데이터베이스 가져오기("스페이스슈터"); var pull = db.CreatePullReplication (SYNC_URL); pull.시작 (); |
그리고 이전과 마찬가지로 변수에서 Start() 메서드를 호출하면 원격 엔드포인트에서 장치로 데이터를 동기화하는 복제 프로세스가 시작됩니다.
플레이어 데이터 검색
'스페이스슈터' 데이터베이스에 무엇이 있는지 살펴보기 위해 데이터베이스를 나타내는 변수를 참조하여 "player_data" 문서를 사용할 수 있는지 확인할 수 있습니다:
1 2 3 4 5 6 7 |
var doc = db.기존 문서 가져오기 ("player_data"); 만약 (doc != null && doc.사용자 속성.ContainsKey("high_score")) { 높은 점수 = 변환.ToInt32(doc.사용자 속성["high_score"]); } |
이제 플레이어의 최고 점수를 검색하려면 'high_score' 키의 값으로 highScore 변수를 채우면 됩니다.
결론
Unity 게임 디자인에 로컬 데이터베이스를 사용해야 하는 이유는 여러 가지가 있습니다. 카우치베이스 모바일을 사용하면 Unity 게임은 다음과 같은 이점을 누릴 수 있습니다. 로컬 상태 저장과 같은 로컬 활동을 실행하고 앱 인스턴스 간의 정보 일관성을 조정하기 위해 동기화 서비스를 설정합니다.
결론: 로컬 게임 환경이 풍부할수록, 즉 네트워크 종속적 유니티 게임 경험은 플레이성을 위한 것입니다. 자신감 를 추가하게 됩니다. 기능과 앱 네트워크 전반에서 상태를 동기화할 수 있는 점점 더 정교한 서비스를 제공합니다.
다음 블로그에서는 다음과 같은 내용을 살펴보겠습니다. 추가 방법 카우치베이스 모바일 게임 디자인을 향상시킬 수 있습니다., 개발 및 플레이.