הערה: ב-18 באוקטובר 2021 נוציא משימוש את שירותי המשחקים של הפלטפורמה של מפות Google. המשתמשים הנוכחיים יקבלו גישה עד 31 בדצמבר 2022. במהלך התקופה הזו, נמשיך לספק תמיכה ותיקונים לבאגים ולהפסקות זמניות בשירות. במדריך המעבר של שירותי משחקים תוכלו למצוא מקורות מידע שיעזרו לכם לתכנן את השלבים הבאים בפרויקטים.

SDK של מפות Google לדוגמאות של Unity

קל לארגן דפים בעזרת אוספים אפשר לשמור ולסווג תוכן על סמך ההעדפות שלך.

ב-Maps SDK for Unity יש אוסף של סצנות Unity לדוגמה, וכל אחת מהן מציגה תכונה בסיסית של ה-SDK. הם מותקנים כשמתקינים את ה-SDK בספרייה /GoogleMaps/Examples/.

כדי להפעיל סצנה לדוגמה ב-Unity

  1. משלבים את ה-SDK של מפות ל-Unity לפי תחילת העבודה. כשתסיימו להוריד את ה-SDK, ותשלבו אותו ב-Unity.

  2. בחלונית Project (פרויקט), עוברים לתיקייה /Assets/GoogleMaps/Examples/. הסצנות לדוגמה מאורגנות במבנה התיקיות הבא:

    תיקייה סצנה ראשית תיאור
    01_תחילת העבודה שלום עולם ממחיש את הדרך הפשוטה ביותר לטעינת מפה.
    02_היסודות שירות Service101 פרטים על אופן השימוש בשירות מפות כדי לתקשר עם ה-SDK.
    03_MapsStyling סטיילינגמפות 101 הצגת דוגמה מקיפה של תכונות המפה בזמן ריצה.
    04_Advanced סצנות מרובות מקבץ כמה דוגמאות שממחישות נושאים מתקדמים, כמו תצוגה מקדימה של זמן העריכה (סטיילינג), זום מעורב, מיקומים ניתנים להפעלה, גילוי נתיב וסגנון מתקדם.
  3. לוחצים לחיצה כפולה על הסצנה לדוגמה שרוצים להפעיל. התמונה תופיע בחלונית היררכיה.

  4. כדי שסביבת התאורה תהיה זמינה, עליכם להוסיף את apiKey כדי לאפשר ל-SDK לתקשר בהצלחה עם שרתי Google. apiKey הוא פרמטר של רכיב MapsService Unity, המצורף בדרך כלל לאובייקט המשחק לדוגמה או לאחד מהצאצאים שלו.

  5. לוחצים על הלחצן הפעלה.

תחילת העבודה

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

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

הקוד שמאפשר תקשורת עם SDK של מפות ל-Unity נמצא בפונקציה Start() של הסקריפט:

private void Start () {
   // Get required Maps Service component on this GameObject.
   MapsService mapsService = GetComponent<MapsService>();

   // Set real-world location to load.
   mapsService.InitFloatingOrigin(LatLng);

   // Register a listener to be notified when the map is loaded.
   mapsService.Events.MapEvents.Loaded.AddListener(OnLoaded);

   // Load map with default options.
   mapsService.LoadMap(ExampleDefaults.DefaultBounds,ExampleDefaults.DefaultGameObjectOptions);
}

בדוגמה הזו, המפה נטענת עם גבולות ברירת מחדל והוראות שקשורות לסגנונות. הרכיב MapsService הוא השער לתקשורת עם ה-SDK של מפות Google ל-Unity. שימו לב שהזוג של קווי האורך והרוחב בדוגמה הוא מפעיל את המקור הצף של המפה. הפרמטר bounds מגדיר את האזור שנטען מסביב למקור הזה.

שירות מפות 101

סצנה לדוגמה זו מראה איך להשתמש ברכיב MapsService כדי לקיים אינטראקציה עם ה-SDK של מפות Google ל-Unity במגוון דרכים.

בסצינת 'יישום' נעשה שימוש בכמה רכיבים מיוחדים שבהם תוכלו להשתמש בסצנות ה-Unity שלכם. הרכיבים האלה מוקצים לאובייקט המשחק MapsExample בהיררכיה של הסצנות. בהם מוצג מחזור החיים של טעינת המפה. הדוגמה הזו משתמשת בנקודת מבט של אדם ראשון.

רכיב תיאור
BasemapLoader המערכת טוענת מפה עם המקור של Lat Lng שסופק, וברדיוס של 'מרחק מקסימלי'. רכיב BaseMapsLoader מדגים איך לטפל בשגיאות טעינה שבהן ה-SDK נתקל.
DynamicMapsUpdater המערכת טוענת באופן דינמי או מבטלת את הטעינה של חלקים נוספים במפה כשהמשתמש עובר (במקרה הזה, המצלמה הראשית) זז ברחבי העולם. הרכיב DynamicMapsUpdater ממשיך לטעון את אזור התצוגה של Camera.main כל הזמן, ומסיר את כל מה שנמצא מחוץ לאזור התצוגה.
FloatingLatLngOriginUpdater העברה של המקור הצף ועדכון המיקום היחסי של כל תכונות המפה שנטענו כאשר המשתמש (במקרה הזה המצלמה הראשית) מגיע למרחק FloatingOriginRange מהמיקום ההתחלתי.

הרכיב FloatingLatLngOriginUpdater מראה איך להשתמש בשיטה MapsService.MoveFloatingOrigin כדי למרכז מחדש את עולם המשחק. ההרשאה הזו הכרחית עקב שגיאות של עיגול נקודה צפה, מה שגורם לכך שהתכונות של המפה זזות ממקום למקום, יותר מהמקור של המשחק. מידע נוסף זמין במאמר המקור הצף.
עדכון כבישים כשהרכיב RoadNamesUpdater פעיל, מוצגים במפה שמות של כבישים כתוויות.
עדכון שמות של מבנים כשהרכיב BuildNamesUpdater פעיל, מוצגים במפה שמות של מבנים כתוויות.
UpdateBarUpdater כשהרכיב ProgressBarUpdater פעיל, מוצגת התקדמות הטעינה הנוכחית ב-HUD.
SearchByPlaceIdUpdater כשהרכיב SearchByPlaceIdUpdater פעיל, הוא עוקב אחר המזהים של המקומות שנטענו ונותן לכם אפשרות לחפש אובייקט בשם Gamepoid שזוהה על ידי מזהה id שנבחר במפה שנטענה.
תכונות של המפה כשהרכיב של MapsfeaturesController פעיל, הוא מאפשר לשלוח את הגיאומטריה של המפה שנטענת למספר קטגוריות מוגדרות מראש (הורות אחרת של Gameobobs). הוא גם מספק דרכים להנחות את ServiceService לגבי הקטגוריות של MapsFeature שיש לטעון.

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

עיצוב שיער במפות 101

סצנה לדוגמה זו מראה איך להשתמש ב-Maps SDK for Unity כדי לסגנן תכונות של מפות בזמן שהן נוצרות במהלך הטעינה.

יש שלוש שיטות לעיצוב מפה בזמן ריצה:

  1. השתמשו בהגדרת סגנונות (GameObjectOptions) ברכיב MapsService בעת טעינת המפה.
  2. כדי לצרף הוראות סגנון מותאמות אישית למפה ספציפית ב-GameObject, משתמשים באירועי LLCreate לפני שה-SDK יוצר אותה.
  3. השתמשו בסגנון GameObjects בזמן הריצה לאחר יצירתם, באירוע DoneCreate או אחרי האירוע mapLoaded.

הדוגמה 'סטיילינג 101' ממחישה את שתי הגישות הראשונות.

עיבוד הקוד של כל קבוצת פרמטרים זמין בכיתות הבאות, שנמצאות בקטע /Assets/GoogleMaps/Examples/03_MapsStyling/Scripts:

אזורWaterConfigView
ExtrudedBuildConfigView
ModeledConfigConfigView
אזור תצוגה
ViewConfigView

הקוד שאוסף את כל הסגנונות של המאפיינים במפה ומעביר אותם ל-MapsService API נמצא במחלקה MapsStylingEditorView.

איתור נתיב ב'מפות' 101

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

בדוגמה מוצגים שני תווים במסך. אחד מהם מנוהל על ידי השחקן, והשני מנוהל על ידי בינה מלאכותית (AI).

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

הדוגמה מדגישה את התרשים של צומתי סבכה (או ציוני דרך) שזמינים במפה שנטענת.

הערה: לצמתים האלה אין ייצוג חזותי. המספרים הלבנים המוצגים במפה הם להמחשה בלבד.

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

הקוד שמטפל בדמות הראשית נמצא ברכיב RoadLatticeCharacterController. ב-RoadLatticeAIController מופיע הקוד שמטפל בהתנהגות החיפוש של AI לסוכן.

נושאים מתקדמים

הדוגמאות הבאות ממחישות תכונות מתקדמות ליצירת סצנות ב-Unity.

עריכת התצוגה המקדימה של השעה

בסצנה לדוגמה של התצוגה המקדימה של זמני העריכה בקטע /Assets/GoogleMaps/Examples/04_Advanced/EditTimePreview, רואים הצצה ראשונה להטמעה חדשה שמאפשרת לעצב את אובייקטי המשחק ב-Editor בזמן העריכה, בניגוד לסגנון 'זמן ריצה' שמתואר בקטע 'מפות סטיילינג 101'.

הזום מעורב

בסצנה לדוגמה המבוססת על מרחק מתצוגה של /Assets/GoogleMaps/Examples/04_Advanced/MixedZoom מוסבר איך להשתמש ברמות זום שונות בזמן טעינת מפה, על סמך המיקום של המצלמה הראשית והמרחק למפה. התכונה הזו מאפשרת להתמודד עם רמות שונות של פרטים.

יומי ולילי

הדוגמה 'ליל כל הקדושים' בקטע /Assets/GoogleMaps/Examples/04_Advanced/Miscellaneous ממחישה איך יוצרים מחזור חיי לילה באמצעות מערכת skybox של Unity, תאורת כיוונים וחומרים פולשניים.

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

דוגמה זו משתמשת גם ברכיב DynamicMapsService, ברכיב BuildingTexturer וברכיב ErrorHandling.

מפות ממוזערות

סצנת הדוגמאות של המפה המינית בקטע /Assets/GoogleMaps/Examples/04_Advanced/Miscellaneous מדגימה איך לקבוע את הגדרת הרינדור של מצלמה כדי להציג תצוגת מיני-מפה של עולם המשחקים ברכיב ממשק משתמש. בסצנה הזו נעשה שימוש ב-gameObject.layer וב-Camera.cullingMask כדי לקבוע מה יוצג במיני-מפה. בסצנה הזו נעשה שימוש גם ב-RenderTexture כדי להתחבר לרכיב ממשק משתמש UI.RawImage שמוצג כמיני-מפה במסך.

עוקב/ת מיקום

סצנת הדוגמה של עוקב המיקומים בקטע /Assets/GoogleMaps/Examples/04_Advanced/Miscellaneous מדגימה איך להשתמש בקואורדינטות ה-GPS של השחקן בעולם האמיתי כדי לעדכן את מיקומו בעולם המשחקים.

דוגמאות נוספות של עיצוב

הדוגמאות הספציפיות הבאות של עיצוב ממוקמות בקטע /Assets/GoogleMaps/Examples/04_Advanced/MoreStyling.

חיתוך תשעים

סצנה לדוגמה עם 9 פרוסות מדגימה איך ליצור מרקם של בניינים באמצעות חומרים עם פריסת 9. החומרים האלה מבוססים על תוכנת הצללה מותאמת אישית BuildingWall (קיר 9) מתחת ל-/Assets/GoogleMaps/Examples/04_Advanced/MoreStyling/Materials/NineSlicing.

המערכת משתמשת ברכיב BuildingTexturer כדי להפעיל חומרים עם פרוסה משולשת, ומשתמשת ברכיב DynamicMapsService כדי לאפשר ניווט ברחבי העולם, כאשר הרכיב MapsService שומר רק את החלק שנצפה בעולם נטען בכל עת.

הדוגמה הזו משתמשת גם ברכיב ErrorHandling כדי להציג שגיאות שנמצאו ברכיב MapsService בזמן טעינת הגיאומטריה העולמית.

גבולות בניינים

הדוגמה 'גבולות בניין' מראה איך להוסיף גבולות לבסיסים של מבנים.

הדוגמה הזו כמעט זהה לדוגמה בנושא חיתוך תשע. ההבדל היחיד הוא שהדוגמה הזו משתמשת בכיתה Extruder כדי להוסיף גבולות לדוגמה לבסיסי המבנים.

דוגמה זו משתמשת גם ברכיב DynamicMapsService, ברכיב BuildingTexturer וברכיב ErrorHandling.

תוכים

סצנת הדוגמאות של דוגמאות הפאר מדגימה איך להוסיף מעגנים לקצה העליון של המבנים.

הדוגמה הזו כמעט זהה לדוגמה בנושא חיתוך תשע. ההבדל היחיד הוא שהדוגמה הזו משתמשת ב-Extruder כדי להוסיף פאר לידים מתוכננים מסביב לגגות. הוא כולל גם את הרכיב DynamicMapsService, את הרכיב BuildingTexturer ואת רכיב ErrorHandling.

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

סקווש בניין

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

החלפה מקדימה

הדוגמה לדוגמה 'החלפה מקדימה' מראה איך להשתמש בתצוגה מקדימה מוגדרת כדי להחליף מבנים מסוגים מסוימים או להחליף מבנים שנפסלו על ידי ה-SDK, כי יש להם מספר קודקודים שחורג מהמספר המקסימלי המותר ב-Unity של קודקודים (65,000 קודקודים לכל רשת).

כשהסצנה הזו נפתחת, היא מתמקדת במנזר ווסטמינסטר (לונדון), שמחליף אותו טוף מראש, מפני שהמודל הספציפי הזה מפורט מדי מכדי ש-Unity תטפל בו (ולכן בוטלה).

בדוגמה הזו נעשה שימוש ברכיב ErrorHandling כדי להציג שגיאות שאירעו ברכיב MapsService בזמן טעינת הגיאומטריה.