728x90
- 주제
>> 데이터 동기화란?
>> 동기화를 위한 기본 로직
>> Unity와 구글 시트 동기화 코드 예제
>> 동기화 자동화: 주기적 업데이트
>> 동기화 상태 표시
- 공부내용
Unity와 구글 시트를 연동해 데이터를 주고받는 과정에서 가장 중요한 부분 중 하나는 데이터 동기화다.
동기화를 통해 데이터 불일치를 방지하고, 실시간으로 최신 데이터를 유지할 수 있다.
이번 글에서는 효율적인 동기화 전략과 구현 방식을 살펴보자.
1. 데이터 동기화란?
데이터 동기화는 다음과 같은 작업을 포함한다:
- 데이터 불러오기: 구글 시트에서 데이터를 Unity로 가져오기.
- 데이터 업데이트: Unity에서 데이터를 수정하고 이를 다시 구글 시트에 반영.
- 자동 동기화: 특정 이벤트나 주기에 따라 데이터 동기화 수행.
2. 동기화를 위한 기본 로직
서버 간 트래픽을 고르게 분배하기 위해 로드 밸런서를 사용한다.
Unity에서 구글 시트와 동기화를 구현하기 위해, 아래의 단계를 따른다:
- 구글 시트에서 최신 데이터를 불러온다.
- Unity에서 수정된 데이터를 구글 시트로 전송한다.
- 필요한 경우, 데이터 동기화 상태를 UI에 표시한다.
3. Unity와 구글 시트 동기화 코드 예제
아래는 Unity에서 자동으로 데이터를 동기화하는 스크립트다.
using System.Collections;
using UnityEngine;
using UnityEngine.Networking;
public class DataSynchronizer : MonoBehaviour
{
private string sheetUrl = "https://script.google.com/macros/s/your-deployed-url/exec";
public void SyncData()
{
StartCoroutine(SyncCoroutine());
}
private IEnumerator SyncCoroutine()
{
// 1. 구글 시트에서 최신 데이터 가져오기
UnityWebRequest loadRequest = UnityWebRequest.Get($"{sheetUrl}?action=load");
yield return loadRequest.SendWebRequest();
if (loadRequest.result == UnityWebRequest.Result.Success)
{
Debug.Log($"Data Loaded: {loadRequest.downloadHandler.text}");
// 불러온 데이터를 처리
GoogleDataList dataList = JsonUtility.FromJson<GoogleDataList>(loadRequest.downloadHandler.text);
// 2. Unity에서 데이터 업데이트
UpdateLocalData(dataList);
// 3. 업데이트된 데이터를 구글 시트로 다시 전송
StartCoroutine(UpdateGoogleSheet(dataList));
}
else
{
Debug.LogError($"Failed to load data: {loadRequest.error}");
}
}
private void UpdateLocalData(GoogleDataList dataList)
{
foreach (var data in dataList.data)
{
Debug.Log($"Updating Local Data - Name: {data.name}, Score: {data.score}");
}
}
private IEnumerator UpdateGoogleSheet(GoogleDataList dataList)
{
var names = new System.Text.StringBuilder();
var scores = new System.Text.StringBuilder();
foreach (var data in dataList.data)
{
names.Append($"{data.name},");
scores.Append($"{data.score},");
}
string updateUrl = $"{sheetUrl}?action=overwrite&names={UnityWebRequest.EscapeURL(names.ToString())}&scores={UnityWebRequest.EscapeURL(scores.ToString())}";
UnityWebRequest updateRequest = UnityWebRequest.Get(updateUrl);
yield return updateRequest.SendWebRequest();
if (updateRequest.result == UnityWebRequest.Result.Success)
{
Debug.Log($"Data Updated Successfully: {updateRequest.downloadHandler.text}");
}
else
{
Debug.LogError($"Failed to update data: {updateRequest.error}");
}
}
}
4. 동기화 자동화: 주기적 업데이트
데이터 동기화를 자동화하려면 일정 시간마다 동기화를 수행하도록 설정한다.
InvokeRepeating을 활용한 예제는 다음과 같다:
private void Start()
{
InvokeRepeating(nameof(SyncData), 0, 60f); // 60초마다 동기화
}
5. 동기화 상태 표시
Unity UI에 동기화 상태를 표시하면 사용자가 진행 상황을 알 수 있다.
아래는 간단한 로딩 애니메이션을 추가하는 코드다:
using TMPro;
using UnityEngine;
public class SyncStatusUI : MonoBehaviour
{
public TextMeshProUGUI statusText;
public void ShowStatus(string message)
{
statusText.text = message;
}
}
SyncCoroutine() 내에서 상태를 업데이트:
statusText.ShowStatus("Loading data...");
yield return loadRequest.SendWebRequest();
statusText.ShowStatus("Updating local data...");
이번 글에서는 Unity와 구글 시트를 동기화하는 전략을 다뤘다.
다음 글에서는, 구글 시트와 연동한 프로젝트에서 성능을 최적화하는 방법을 다음 글에서 소개할 예정이다.
728x90
반응형
'유니티' 카테고리의 다른 글
Day 58 - 유니티 구글 계정 로그인 시스템 구축(1부) (0) | 2024.12.14 |
---|---|
Day 57 - Unity와 구글 시트 연동 유지 관리 (0) | 2024.12.13 |
Day 55 - Unity에서 구글 시트 데이터 수정 및 업데이트 (2) | 2024.12.12 |
Day 54 - Unity로 구글 시트 데이터 불러오기 (2) | 2024.12.12 |
Day 53 - 구글 시트와 Unity 연동하기(구글 시트 API 사용 준비) (2) | 2024.12.11 |