실험용 YouTube 게임 룸 Godot 래퍼

이 래퍼를 사용하면 제공된 .gd를 사용하여 Godot에서 YouTube Playables SDK에 액세스할 수 있습니다. 래퍼에는 개발 속도를 높이는 데 도움이 되는 .js SDK 커넥터와 .gd 파일이 있습니다. 프로젝트에서 이러한 스크립트를 사용하는 방법을 보여주는 샘플 프로젝트도 있습니다.

Godot zip 패키지는 Playables 샘플 저장소에서 다운로드할 수 있습니다.

사용

  1. 이러한 스크립트를 배치할 프로젝트 폴더에서 GoogleYTGameWrapper-godot.zip를 추출합니다. 이 ZIP에는 두 파일이 포함되어 있습니다.
    • YTGameWrapper.gd: 게임 내에서 SDK를 호출할 수 있는 경로를 허용하는 YT Playables JavaScript SDK의 다리 역할을 합니다.
    • YTGameSDK.js: YT Playables SDK에 연결하는 데 사용됩니다. 이 예에서는 이 파일을 프로젝트의 루트에 배치합니다. 이를 변경할 수 있지만 헤드 포함 위치를 업데이트해야 합니다.
    • Playables 샘플 저장소에서 전체 프로젝트 샘플 버전을 다운로드할 수도 있습니다. 이 버전에는 GoogleYTGameWrapper-godot-with-sample.zip라는 zip 파일을 사용합니다.
  2. 압축을 푼 YTGameWrapper.gd 스크립트에 관한 새로운 자동 로드 전역을 추가합니다. Project -> Project Settings... -> Globals에서 설정할 수 있습니다. Path 입력란에서 YTGameWrapper.gd 파일을 선택하고 Node Name 입력란에 YTGameWrapper를 추가합니다. 마지막으로 + Add를 선택합니다.
    • 이렇게 하면 코드에서 전역적으로 스크립트를 사용할 수 있으므로 필요에 따라 YTGameWrapper를 호출할 수 있습니다.
  3. Godot 프로젝트 플랫폼이 Web용으로 내보내도록 설정되어 있는지 확인합니다. 이 설정은 내보내기 탭에 있습니다. Project를 선택한 다음 Export...를 선택합니다.
  4. 내보내기 패널에서 Add...를 선택한 다음 Web를 선택하여 새 사전 설정을 추가합니다. 생성되면 이 코드를 Head Include 설정 상자에 추가합니다.
<script src="https://www.youtube.com/game_api/v1">// Load YT Game API code</script>
<script src="YTGameSDK.js"></script>
  1. Export 패널에서 Export Project...를 선택하고 빌드 위치를 선택하여 웹 프로젝트를 내보냅니다.
  2. 프로젝트가 빌드되면 빌드 폴더로 이동하여 YTGameSDK.js 파일을 이 폴더에 복사하고 빌드를 제출할 때 포함해야 합니다.
  3. 프로젝트의 기술 요구사항을 준수하는지 확인하고 플레이어블 테스트 모음을 사용하세요.

이 섹션에는 .gd 래퍼를 사용하는 방법에 관한 몇 가지 예시가 나와 있으며, 사용 가능한 API의 전체 목록은 아닙니다. 사용 가능한 API의 전체 목록은 YouTube Playables SDK를 참고하세요. 또한 프로젝트가 사용 섹션에 설명된 대로 설정되어 있다고 가정합니다.

sendScore

다음 예는 .gdsendScore(int points) 구현을 보여줍니다.

var current_game_score: int = 0

...

func add_score(scoreAdded: int):
    current_game_score += scoreAdded
    YTGameWrapper.send_score(current_game_score)

onPause

다음은 게임이 YT Playables에서 발생하는 Pause 이벤트를 수신 대기하여 필요할 때 엔진을 일시중지하는 방법을 보여주는 예입니다.

func _ready() -> void:
    # hook up on game paused
    YTGameWrapper.game_paused.connect(self._on_game_paused)
    # hook up on game resumed and game save data received events
    YTGameWrapper.game_resumed.connect(self._on_game_resumed)

func _on_game_paused():
    # Pause your game logic, audio, etc.
    get_tree().paused = true
    
func _on_game_resumed():
    # Resume your game logic, audio, etc.
    get_tree().paused = false

saveData

다음은 saveData를 사용하여 YT Playables SDK로 전송하는 방법의 예입니다.

var current_game_score: int = 0
var time_elapsed: float = 0.0

...

func save_game_data():
    YTGameWrapper.save_data('{"BestScore": "' + str(current_game_score) + '","BestTime": "' +str(time_elapsed)+ '"}')

loadData

다음은 loadData를 사용하여 YT Playables SDK로 전송하는 방법의 예입니다.

func _ready() -> void:
    # hook up game load data received event
    YTGameWrapper.load_data_received.connect(self._on_load_data)
    # Request to load data when the game starts
    YTGameWrapper.load_data()

func _on_load_data(save_data_string: String):
    if not save_data_string.is_empty():
        # Add logic to parse the save_data_string and restore game state
        print("Loaded data: ", save_data_string)

requestInterstitialAd

다음은 requestInterstitialAd를 사용하는 방법의 예로, 사용 가능한 경우 전면 광고를 표시하기에 좋은 시점임을 나타냅니다. 최상의 결과를 얻으려면 게임플레이 중 휴식 시간(예: 레벨 끝)에 이 호출을 실행하세요.

func set_game_over(didWin: bool):
    YTGameWrapper.request_interstitial_ad()

    # logic for game over

Godot 프로젝트에서 애셋을 분할하는 방법 (지연 로드)

개발자가 Godot를 사용할 때 강조한 주요 문제 중 하나는 개별 파일 크기 요구사항 및 총 번들 크기 요구사항을 준수하는 것입니다.

애셋 지연 로드는 애셋, 수준, 데이터가 필요할 때 로드할 수 있으므로 프로젝트에 적용할 수 있는 유용한 최적화입니다. 전체 게임이 미리 로드되지 않고 사용자가 제품을 탐색할 때 로드되므로 이 작업이 제대로 이루어지면 Google 인증팀에서 전반적인 파일 크기 제한을 면제해 줄 수 있습니다.

적절한 로드를 돕기 위해 Godot에서는 패키지, 패치, 모드 내보내기(영어 링크)를 제공합니다. 필요에 따라 로드되는 .pck 파일을 생성하는 것이 좋습니다.

전체 YT Playables API 참조를 확인하세요.