סצנות לדוגמה של Maps SDK ל-Unity

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

כדי להריץ סצנה לדוגמה ב-Unity

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

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

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

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

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

תחילת העבודה

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

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

הקוד שמאפשר תקשורת עם ה-SDK של מפות Google ל-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 משלכם. הרכיבים האלה מוקצים לאובייקט ה-gameobject מ-MapsExample בהיררכיית הסצנה. הן מציגות את מחזור החיים של טעינת המפה. בדוגמה הזו נעשה שימוש בנקודת מבט של גוף ראשון.

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

הרכיב FloatingLatLngOriginUpdater מדגים איך להשתמש בשיטה MapsService.MoveFloatingOrigin כדי למרכז מחדש את עולם המשחק. המצב הזה נדרש בגלל שגיאות של עיגול נקודה צפה (floating-point), שגורמות יותר ויותר לחוסר התאמה של תכונות המפה, ככל שמהלך המשחק (gameplay) הנוסף הולך ופוחת ממקור המשחק. למידע נוסף, ראו מקור צף.
RoadNamesUpdater כאשר הרכיב RoadNamesUpdater פעיל, המפה הנטענת מציגה שמות דרכים כתוויות.
BuildingNamesUpdater כאשר רכיב buildNamesUpdater פעיל, המפה הנטענת מציגה שמות בניינים כתוויות.
ProgressBarUpdater כשהרכיב ProgressBarUpdater פעיל, ה-HUD מציג את התקדמות הטעינה הנוכחית.
SearchByPlaceIdUpdater כשהרכיב SearchByPlaceIdUpdater פעיל, הוא עוקב אחר מזהי PlaceId שנטענו ומספק דרך לחפש Gameobject שזוהה לפי מזהה המקום שנבחר במפה שנטענה.
MapFeaturesController כשהרכיב MapFeaturesController פעיל, הוא מספק דרך לשלוח את גיאומטריית המפה הנטענת לכמה קטגוריות מוגדרות מראש (הגדרת הרשאות הורה ב-gameobject). היא גם מספקת דרכים להנחות את MapsService לגבי הקטגוריות שיש לטעון אותן.

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

עיצוב מפות 101

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

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

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

הדוגמה 101 בנושא עיצוב של מפות Google ממחישה את שתי הגישות הראשונות.

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

AreaWaterConfigView
ExtrudedStructureConfigView
ModeledStructureConfigView
RegionConfigView
SegmentConfigView

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

חיפוש נתיב 101 במפות Google

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

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

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

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

שימו לב שלצמתים האלה אין ייצוג חזותי. הנקודות הלבנות שמוצגות במפה הן להמחשה בלבד.

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

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

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

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

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

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

זום משולב

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

יום ולילה

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

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

בדוגמה הזו נעשה שימוש גם ברכיב DynamicMapsService, ברכיב BuildingTexturer וברכיב ErrorTreatment.

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

הסצנה לדוגמה של מפה ממוזערת בקטע /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.

תשע פרוסות

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

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

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

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

הסצנה לדוגמה של גבולות מבנים ממחישה איך להוסיף גבולות מסביב לבסיסי מבנים.

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

בדוגמה הזו נעשה שימוש גם ברכיב DynamicMapsService, ברכיב BuildingTexturer וברכיב ErrorTreatment.

שטיחים מקיר לקיר

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

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

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

דחיסת בניינים

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

החלפה מוכנה מראש

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

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

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