גרסת Godot Wrapper ניסיונית של המשחקייה של YouTube

באמצעות העטיפה הזו תוכלו לגשת ל-YouTube Playables SDK ב-Godot באמצעות .gd שסופק. למעטפת יש מחבר SDK מסוג ‎ .js וקובץ .gd שיעזרו לכם לפתח מהר יותר. יש גם פרויקט לדוגמה שבו מוסבר איך משתמשים בסקריפטים האלה בפרויקט.

אפשר להוריד חבילות zip של Godot ממאגר הדוגמאות של Playables.

שימוש

  1. לחלץ את GoogleYTGameWrapper-godot.zip בתיקיית הפרויקט שבה רוצים שהסקריפטים האלה יהיו. קובץ ה-ZIP מכיל שני קבצים:
    • YTGameWrapper.gd: משמש כגשר ל-SDK של YT Playables ב-JavaScript, ומאפשר נתיב לקריאה ל-SDK מתוך המשחק.
    • YTGameSDK.js: משמש להתחברות ל-YT Playables SDK. בדוגמה הזו נמקם את הקובץ ברמה הבסיסית של הפרויקט. אפשר לשנות את זה, אבל צריך לעדכן את המיקום של הקוד של ה-Head Include.
    • יש גם גרסה מלאה של פרויקט לדוגמה שזמינה להורדה ממאגר הדוגמאות שלנו ל-Playables. לגרסה הזו צריך להשתמש בקובץ ה-zip בשם GoogleYTGameWrapper-godot-with-sample.zip.
  2. מוסיפים משתנה גלובלי חדש של Autoload לסקריפט YTGameWrapper.gd שפורק. אפשר להגדיר את זה בקטע Project -> Project Settings... -> Globals. בוחרים את הקובץ YTGameWrapper.gd בתיבת הקלט Path ומוסיפים את הערך YTGameWrapper לתיבת הקלט Node Name. בסיום, בוחרים באפשרות + Add.
    • כך הסקריפט יהיה זמין באופן גלובלי בקוד, ותוכלו להפעיל את YTGameWrapper לפי הצורך.
  3. מוודאים שהפלטפורמה של פרויקט Godot מוגדרת לייצוא ל-Web. ההגדרה הזו נמצאת בכרטיסייה Export (ייצוא). בוחרים באפשרות 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... ובחירת מיקום ה-build.
  2. אחרי ה-build של הפרויקט, עוברים לתיקיית ה-build ומעתיקים את הקובץ YTGameSDK.js לתיקייה הזו. חשוב לכלול אותו כששולחים את ה-build.
  3. חשוב לוודא שאתם פועלים בהתאם לדרישות הטכניות של הפרויקט, ולהשתמש בחבילת הבדיקות של Playables.

דוגמאות

בקטע הזה מפורטות כמה דוגמאות לשימוש ב-wrapper של .gd, אבל זו לא הרשימה המלאה של ממשקי ה-API הזמינים. בYouTube Playables SDK תוכלו למצוא רשימה מלאה של ממשקי ה-API הזמינים. ההנחה היא גם שהפרויקט הוגדר כפי שמתואר בקטע 'שימוש'.

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 היא עמידה בדרישות לגבי גודל הקובץ הבודד ודרישות גודל החבילה הכוללת.

טעינה איטית של נכסים היא אופטימיזציה מצוינת שאפשר לבצע בפרויקט, כי אפשר לטעון נכסים, רמות ונתונים לפי הצורך. צוות האישור שלנו עשוי לבטל את ההגבלות הכוללות על גודל הקובץ אם הדבר יבוצע בצורה תקינה, מאחר שהמשחק המלא לא יהיה נטען מראש, אלא כאשר המשתמש מנווט במוצר.

כדי לעזור לכם לטפל בבעיות טעינה, Godot מציע ייצוא של חבילות, תיקונים ומודים (קישור לאנגלית). מומלץ ליצור קובצי .pck שיוטענו לפי הצורך.

הפניית ה-API המלאה של YT Playables