Wrapper ของ Godot สำหรับฟีเจอร์เล่นเกมของ YouTube (เวอร์ชันทดลอง)

การใช้ Wrapper นี้จะช่วยให้คุณเข้าถึง YouTube Playables SDK ใน Godot ได้โดยใช้ .gd ที่ให้มา Wrapper นี้มีตัวเชื่อมต่อ SDK .js และไฟล์ .gd เพื่อช่วยเร่งการพัฒนา นอกจากนี้ยังมีโปรเจ็กต์ตัวอย่างที่แสดงวิธีใช้สคริปต์เหล่านี้ในโปรเจ็กต์ด้วย

แพ็กเกจ zip ของ Godot สามารถดาวน์โหลดได้จากที่เก็บตัวอย่างของฟีเจอร์เล่นเกม

การใช้งาน

  1. แตกไฟล์ GoogleYTGameWrapper-godot.zip ในโฟลเดอร์โปรเจ็กต์ที่ต้องการให้สคริปต์เหล่านี้อยู่ ไฟล์ ZIP นี้มี 2 ไฟล์ ดังนี้
    • YTGameWrapper.gd: ใช้เป็นตัวเชื่อมกับ SDK JavaScript ของ YT Playables เพื่อให้มีเส้นทางในการเรียกใช้ SDK จากในเกม
    • YTGameSDK.js: ใช้เพื่อเชื่อมต่อกับ YT Playables SDK ในตัวอย่างนี้ เราจะวางไฟล์นี้ไว้ในรูทของโปรเจ็กต์ คุณเปลี่ยนแปลงข้อมูลนี้ได้ แต่จะต้องอัปเดตตําแหน่งการรวมส่วนหัว
    • นอกจากนี้ คุณยังดาวน์โหลดเวอร์ชันตัวอย่างโปรเจ็กต์แบบสมบูรณ์ได้จากที่เก็บตัวอย่างของฟีเจอร์เล่นเกม สําหรับเวอร์ชันนี้ ให้ใช้ไฟล์ ZIP ที่ชื่อ GoogleYTGameWrapper-godot-with-sample.zip
  2. เพิ่ม Autoload Global ใหม่สำหรับสคริปต์ YTGameWrapper.gd ที่แตกไฟล์แล้ว ซึ่งตั้งค่าได้ที่ Project -> Project Settings... -> Globals เลือกไฟล์ YTGameWrapper.gd ในช่องป้อนข้อมูล Path และเพิ่ม YTGameWrapper ในช่องป้อนข้อมูล Node Name สุดท้าย ให้เลือก + 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 wrapper แต่ไม่ใช่รายการ API ทั้งหมดที่ใช้ได้ ดูรายการ API ทั้งหมดที่ใช้ได้ได้ที่ YouTube Playables SDK การดำเนินการนี้ยังถือว่าโปรเจ็กต์ของคุณได้รับการตั้งค่าตามที่อธิบายไว้ในส่วนการใช้งานด้วย

sendScore

ตัวอย่างนี้แสดงการใช้งาน sendScore(int points) ใน .gd

var current_game_score: int = 0

...

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

onPause

ต่อไปนี้เป็นตัวอย่างวิธีที่เกมสามารถฟังเหตุการณ์ Pause ที่มาจาก YT Playables เพื่อหยุดการทำงานของเครื่องยนต์ชั่วคราวเมื่อจำเป็น

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 คือการรักษาขนาดไฟล์แต่ละไฟล์ให้เป็นไปตามข้อกำหนดและขนาดแพ็กเกจรวม

การโหลดเนื้อหาแบบ Lazy Loading เป็นการเพิ่มประสิทธิภาพที่ยอดเยี่ยมที่คุณทำได้สำหรับโปรเจ็กต์ เนื่องจากคุณสามารถโหลดเนื้อหา ระดับ และข้อมูลได้ตามต้องการ ทีมการรับรองของเราอาจยกเว้นข้อจำกัดด้านขนาดไฟล์โดยรวมหากดำเนินการอย่างถูกต้อง เนื่องจากระบบจะไม่โหลดเกมทั้งหมดตั้งแต่ต้น แต่ระบบจะโหลดเมื่อผู้ใช้ไปยังส่วนต่างๆ ของผลิตภัณฑ์

Godot มีการส่งออกแพ็กเกจ การแก้ไข และม็อดเพื่อช่วยในการโหลดอย่างถูกต้อง (ลิงก์ภาษาอังกฤษ) เราขอแนะนําให้สร้างไฟล์ .pck ที่โหลดตามต้องการ

ดูข้อมูลอ้างอิงเต็มของ YT Playables API