
הטקסט המלא של הדקות הראשונות בהרצאה «חוקי פיזיקה - Rigidbody» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
היום אנחנו נכיר קצת את המנוע פיזיקה של יוניטי 2D. הוא מאוד דומה למנוע ה-3D והרכיבים שאנחנו נלמד עליהם יש להם מקבילות, מקבילים גם במנוע של ה-3D כאשר יש לנו שלושה סוגים של קומפוננטות בעצם של פיזיקה ואנחנו נדבר על שניים מהם. השלישי אני אזכיר קצת, אני אסביר עליו טיפה אבל אני לא אדגים, הוא פחות רלוונטי למשחק שאנחנו נבנה פה.
אז ככה, אפשר להגיד שהרכיב העיקרי של הפיזיקה הוא ה-Rigid Body, כאשר יש לנו Rigid Body למנוע של ה-3D ו-Rigid Body 2D.
מרגע שהוספתי את זה ואני אמרתי בעצם ל-Unity, טפלי בכל העניין של הפיזיקה בכל מה שקשור לאובייקט הזה. זה אומר שאם אני לוחץ עכשיו פליי, השחקן שלי נופל.
יש לו השפעה של הכוח המשיכה של הגרביטי וגם בכל מה שקשור להתנגשויות אז אנחנו תכף נראה יש לנו פה מסה ליניאר דרג ואנגולר דרג שזה סוגים של התנגדויות למשל ניתן דוגמא אם אני אשכפל את הפלייר ואני יכול לשכפל אובייקט גיים אובייקט על זה שאני עומד עליו אני לוחץ על קונטרול די מלשון דופליקייט ואני אזיז אחד לפה ולזה אני אתן לו ליניאר דרג של שתיים
לצורך העניין שזה התנגדות בעצם אז אני לוחץ על פליי אנחנו נראה מיד את ההשפעה של זה אוקיי אז אחד מהם זה שיש לו ליניאר דרג הוא נפל יותר לאט זה לא בגלל שהכוח עליו השתנה אלא כי יש לו התנגדות מובנית אני אמחק אותו אז יש לנו את הליניאר דרג אנגולר דרג זה בעצם התנגדות אבל בסיבובים.
רבטי סקייל זה בעצם בעולם האמיתי וגם בעולם שיוניטי מדמה אז יש לנו תאוצה תאוצה של גוף בנפילה חופשית היא מינוס 9.8 מטר לשנייה בריבוע בעולם האמיתי וגם ביוניטי ביחידות שבהם יוניטי עובד זאת אומרת אם מדובר פה על מטר ליוניט פחות או יותר עכשיו אם אתם זוכרים אנחנו שינינו בעצם יכולנו לשנות את הסקייל של האובייקטים
או את התסכל של העולם בעצם באיזה יחידות אנחנו עובדים אם אנחנו נשארנו אנחנו נשארנו בסדר גודל של יחידה למטר אבל יכול להיות שזה לא חייב להיות ואם כאשר הפרויקט שלנו הוא לא בסדר גודל של יחידה למטר אז אנחנו יכולים להתאים את הגרוויטי לכל סדר גודל שנרצה עוד דבר חשוב פה בריג'יט באדי זה קוליז'ן דטקשן קוליז'ן
זה התנגשויות בין אובייקטים פיזיקליים כאשר קוליז'ן דיטקשן, או בכלל המנוע פיזיקה עובד גם כן, הוא לא עובד בצורה רציפה, הוא עובד לפי פרקי זמן קבועים, הוא עושה חישוב, נניח של עשירית שנייה כל פעם, ומעדכן.
עכשיו, מה שקורה במקרה ויש לנו גופים שזזים מאוד מאוד מהר, אז יכול להיות שיש לנו שני גופים פיזיקליים, אחד עומד ואחד זז לכיוונו בצורה מאוד מאוד מהירה.
עכשיו, מכיוון שהוא זז בצורה מאוד מאוד מהירה, וגם החישובים נעשים במרווחי זמן אז יכול להיות שבפעם אחת הוא יהיה בצד אחד של האובייקט פעם שנייה בפריים הבא או ללא פריים בפיזיקה אבל זה בנקודת זמן הבאה שבה נעשה חישוב כבר בצד השני כי המהירות שלו מאוד גבוהה
ולכן יוניטי לא יזהה את ההתנגשות הזאת. אז אפשר לפתור את זה על ידי שאנחנו עושים פה collision detection continuous. המחיר שאנחנו משלמים הוא בביצועים אז חשוב רוב הפעמים זה לא רלוונטי אפילו לא האמת שזה מאוד רלוונטי אם זה יש לנו באמת קליעים שטסים מאוד מהר אבל באמת טסים וזה לא רק חישוב של יריעה באפס מהירות אז אם יש לנו קליעים שנוסעים מאוד מהר ודמויות
מאוד מאוד קטנות אז יכול להיות שנרצה לשנות את זה לקונטיניוס אם נראה איזושהי בעיה אבל כדאי להישאר על דיסקריט וברירת מחדל פחות או יותר זהו אנחנו נדבר על הקונסטריינס האלה תכף אחרי שאני אוסיף קוליידר אבל תכף נגיע לזה אז בעצם זה ה-rigid body 2D.
עכשיו הגיע הזמן להוסיף רצפה אז סתם מצאתי לי איזה גרפיקה באינטרנט ולקחתי אותה לפה אני אוסיף game object 2D sprite נכניס את הגראונד ואני אמקם אותה מינוס 2.5 והscale אני אתן לה פה 6 יפה יספיק אז יש לנו רצפה וגם לה אני ארצה להוסיף רייג'יט באדי 2D אבל הסוג באדי טייפ אנחנו נשנה אותו לקינמטיק זה אומר שהוא לא זז וכרגע אם אני לוחץ על פליי אז הפלייר ייפול לי דרך
הרצפה אבל אנחנו רואים שהרצפה לא נופלת אני אשנה את השם פה רק לגראונד אוקיי השלב הבא זה שאנחנו בעצם צריכים להגיד ל-Unity איך לחשב התנגשויות ואנחנו עושים את זה באמצעות קוליידר אז אני מוסיף פה קוליידר עכשיו לרצפה אני אוסיף בוקס קוליידר 2D יש לנו עוד סוגים של קוליידרים.
הפלייר אני למשל אתן הרבה פעמים משחקים הדמויות הם יהיה להם קפסול קוליידר אז יש לנו כמובן גם קפסול קוליידר 2D שהוא יושב מאוד לא יפה על הדמות.
אז מה שאנחנו יכולים לעשות זה קודם כל אני רוצה שבעצם לצורך הפיזיקה אני לא צריך את הידיים אני רוצה הקוליידר שלי יהיה די צר אז שיניתי פה בסייז ל-0.5 בגובה ואני אעשה 1 פחות או יותר בסדר אבל יש לנו הוא לא יושב באמצע אני יכול גם להזיז את המריכוז בעצם למרכז את הקוליידר איך שאני רוצה אז אני אתן לו אופסט של 0.1 אה זה למעלה אז
מינוס 0.1 לא יותר מדי מינוס 0.5 וזה נראה לי פחות או יותר בסדר. עכשיו אם אני לוחץ על פליי אז הדמות שלי עומדת יפה על הרצפה.
עכשיו אמרתי שאני אדבר גם על הפריז פוזישן ורוטיישן אם נלך לפלייר אני אסובב אותו קצת לצורך ההדגמה ממש טיפה ואני אכרץ על פליי אנחנו נראה שבגלל הצורה של הקוליידר הדמות נופלת לי אז אם אני אעשה פה פריז רוטיישן אז ברגע שהוא יפול הוא יישאר לעמוד אני אחזיר אותו כמובן לזווית רגילה אבל זה היה לצורך