
Input.GetAxis("Horizontal") מחזיר ערך בין -1 ל-1: שמאלה שלילי וימינה חיובי. הערך עולה בהדרגה ולא בקפיצה, והקצב נקבע לפי ה-Sensitivity.rb.velocity מקבל Vector2. הערך האופקי הוא הקלט כפול המהירות, והערך האנכי נשאר כמו שהוא.הטקסט המלא של הדקות הראשונות בהרצאה «פיתוח דמות השחקן - חלק 2» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
היום אנחנו נזיז את השחקן וגם נחליף בין האנימציות מתוך הקוד ובשביל זה אנחנו צריכים לדבר קצת על מה קורה עם קלט מהשחקן ביוניטי ואיך זה עובד. אז אם אני לוחץ פה על אדיט, פרויקט, סטינגס ואינפוט אני מקבל פה את האינפוט מנאג'ר באינספקטור תשימו לב זאת אומרת זה לא חלון חדש זה החלון של האינספקטור אם אני אלחץ עכשיו על איזשהו גיים אובג'קט אחר וזה
ייעלם לי מפה. אז ככה, אינפוט ביוניטי עובד דרך אקסיס, דרך צירים. אז יש לנו בעצם את הציר ההוריזונטל, האופקי, יש לנו את האנכי, הוורטיקל, יש לי פה גם כל השאר נקרא צירים, למרות שזה לא ממש צירים, יש לי fire, jump וכן הלאה.
אני אפתח אחד מהם כדי שנראה מה יש בפנים, אז יש פה את השם, יש לי פה את ה-Descriptive name פחות מעניין, אני אדבר על מה שכן מעניין אותנו, יש לנו negative button, פוזיטיב בטון, אלטרנטיב, נגטיב בטון, אלטרנטיב פוזיטיב בטון וסנסיטיביטי.
עכשיו, אני יכול גם להגדיר פה צירים החדשים, אני יכול פשוט להגדיר פה שיש פה 19 במקום 18 ויש לי פה, הוא העתיק לי את האחרון ויצר לי אותו כבר עם ערכים כמו של האחרון פה, אני אחזיר את זה להיות 18 ואנחנו יכולים ככה בעצם להגדיר צירים חדשים, להגדיר אינפוטים חדשים שמעניינים אותנו.
אז במקרה שלנו יעניין אותנו בעיקר הכיבורד ולכן יש לי פה את הבטנס וכמו שאמרתי אז יש לנו את הבטנס את האלטרנטיבס ואת הסנסטיביטי ויש גם אינוורט אם מישהו אפשר תמיד לעשות אינוורט במשחקים ל y-axis אז גם דרך פה וככה אני גם ניגש לאינפוט שלי דרך הקוד באמצעות ה-axis האלה אז בוא נייצר סקריפט חדש פלייר קונט רולר ולפני שאני ניגש לאקסיס אני רוצה לרגע להסביר קצת שוב על המבנה של
הסקריפט פה ועל הפונקציות שכבר קיימות בברירות מחדל אז סטארט ראינו בעצם זה רץ זה רץ בהתחלה ברגע שהמשחק מתחיל כל סקריפט שיש לו סטארט יריץ את הקוד של מה שיש לו בסטארט אפדייט כמו שאנחנו רואים פה is called once per frame כל פריים שהוא, כל פריים שמתעדכן לי ירוץ לי הפונקציה הזאת שנקראת Update.
אז מה שאני יכול לעשות פה זה קודם כל אני אעשה דיבאג.לוג ומה אני רוצה להדפיס במקרה שלנו? אני רוצה את input.getAxis שזה משיג לי את האינפוט מהציר שאותו אני אתן לו ובאמצעות שם הוריזונטל ונקודה פסיק ככה אני מקבל את הערך של הציר הזה מבחינת האינפוט שלי מבחינת מה המשתמש עושה ואם אני עכשיו אריץ את זה אז כל פריים תצא לי הדפסה של מה הערך של הציר הזה כאשר זה יהיה ממינוס אחד לאחד A או חטא שמאלה זה נותן לי ערך שלילי
וימינה או D ניתן לי ערך חיובי. אם עכשיו אני לוחץ על play וכמובן מה ששכחתי לעשות זה לשמור אני לוחץ פה על play ואנחנו רואים שכל עוד אני לא נוגע בכלום והוא ממשיך להדפיס לי פה הוא סופר לי גם את ההדפסות של 0 כי האינפוט כרגע הערך שלו הוא 0 אם אני לוחץ על d ימינה שזה המקש החיובי או עוזב ראיתם שאני אעצור את זה זה קפץ ל-1 אבל בצורה הדרגתית
וגם כשעזבתי זה חזר ל-0 בצורה הדרגתית אוקיי לקח לו אני לא אספור עכשיו כרגע כמה פריימים לקח לו אבל אני רואה שזה בסביבות בין 10 ל-15 או משהו כזה כנ"ל אם אני אחזור לפה אז זה נעשה בצורה הדרגתית וזה אם אתם זוכרים הסנסיטיביטי שלי באינפוט מנאג'ר הסנסיטיביטי של הציר הזה אוקיי אז ככה קיבלתי את הערך האם הצחקן לוחץ שמאלה או ימינה אני
אעצור פה ועכשיו מה שאני רוצה לעשות זה להזיז את השחקן בעצם לפי הציר הזה. אז בשביל זה אני צריך להוסיף לו RigidBody2D כי אנחנו נעבוד עם המנוע של הפיזיקה וCapsuleCollider2D כמו שהוספנו לדמות בפרויקט הקודם.
ב-Ground אני מוסיף BoxCollider2D ואני אחזור לשחקן שלי בשביל לשנות את הגודל ואת המיקום של ה-Collider שלי. קודם כול הוא הרבה יותר מדי רחב, אני אעשה פה 1, זה גם קצת רחב מדי, אני לא רוצה את הרובה בתוך הקוליידר, אז 0.8 ואני גם אזיז אותו, אז מינוס 0.1 נניח,
זה נראה לי בסדר, מבחינת הגובה שלו הוא גם גבוה מדי, אז בגובה שלו 1.1 נניח, ואופסט מינוס 0.1 לא מספיק, מינוס 0.15 יותר מדי מינוס 1.2 בסדר שוב עכשיו אם אני מריץ אז הוא נפל לי לאדמה והוא עומד עליה ועכשיו אני יכול להתחיל לשלוט בו מתוך הקוד עכשיו עוד דבר שהוא מאוד חשוב אני רוצה את האופציה לגשת לקומפוננטים אחרים כלומר
אם אנחנו נרצה לשנות את האנימציות אנחנו נצטרך לגשת לקומפוננט של האנימטור אם נרצה להזיז את הגוף הפיזיקלי אני צריך גישה לקומפוננט של הריג'יד באדי.
איך עושים את זה? אז קודם כל אני אגדיר משתנים שיכילו להיותם. אז יש לי פה אני מאטור אנים ונגדיר אותו פאבליק ופאבליק ריג'יד באדי 2d rb זה השם הסטנדרטי פחות או יותר שמשתמשים לריג'יד באדי ואני שומר ואני אלך פה לסקריפט שלי.
אני יכול פשוט לגרור את הפלייר לתוך שניהם הוא הוא יודע לבד לקחת את הקומפוננט הנכון אתם רואים אני פלייר ואז בסוגריים אנימטור ריג'יד באדי rb וזה הפלייר הריג'יד באדי 2d אז הוא יודע לעשות את זה.
יש עוד דרכים לעשות את זה אבל כרגע אנחנו נשתמש בזה ועכשיו מה שאני רוצה לעשות אני גם אגדיר פה פאבליק ולא נקרא לזה זונטל ולו סיטי כמובן פלואוט ואני מחכה שיופיע לי פה ונניח שאני רוצה שהוא יזוז לי 5 יחידות בשנייה אוקיי עכשיו אנחנו היום למעשה לומדים המון דברים שבסך הכל זה פשוט אבל צריך להכיר
הרבה דברים אז מה שאני רוצה לעשות זה אם יש לי אינפוט גט אקסיס הוריזונטל שונה מאפס אז אני רוצה לשים את ההוריזונטל ולוסיטי להכפיל אותו במהירות בציר ה-X. תכף אני אדגים ואני אסביר מה קורה, אז במקום דיבאג אני עושה פה rigidbody rb.velocity שווה.
עכשיו ה-velocity שלי אנחנו רואים שזה מה שנקרא וקטור 2. וקטור 2 זה דאטה טייפ שקיים בתוך יוניטי שמכיל לי בעצם X ו-Y, במקרה הזה מייצגים את המהירות בציר ה-X והמהירות בציר ה-Y, אני לא יכול לגשת ישירות ל-X או ל-Y, אני צריך להכניס פה וקטור 2.
אז מה אני אעשה? אני אכניס ערך לווקטור 2 ל-X ואת ה-Y אני אשאיר כמו שהוא, כלומר אני אתן לו את אותו עורך שכבר נמצא שם. אז פה אני עושה new וקטור 2, פתח סוגריים.
עכשיו, אני יכול לעשות את זה פשוט בצורה... להכניס את זה באותה פקודה, אבל אני רוצה להפריט כדי שזה יהיה ברור. float x velocity שווה input.getaccess הוריזונטל ואני רוצה להכפיל אותו בהוריזונטל velocity שלי. זאת אומרת הערך אם אתם זוכרים נכון הערך של input.getaccess הוא נע בין מינוס אחד
לאחד. אם אני רוצה שהוא יזוז בין מינוס חמש שמאלה נניח לבין חמש ימינה אני מכפיל את זה בהוריזונטל velocity.
אז יש לי את ה-X-Velocity הזה ואופתור אני אשים פה X-Velocity פסיק rb.velocity.y בו אני לא רוצה לגעת ולכן אני נותן אותו אותו ערך שכבר קיים לו. עכשיו אני שומר ואני לוחץ על פליי ועכשיו כשאני לוחץ כשאני לוחץ על a או על d אז אני מקבל את התנועה.
עכשיו מה ששכחתי לעשות פה, קונסטריינטס, פריז רוטיישן, סייב ופליי. ועכשיו אני יכול ללכת ימינה ושמאלה, אני חושב שזה, אני גם צריך להגדיל את הרגישות, כי עד שהוא רץ, התאוצה שלו היא מאוד איטית, אז אני אגדיל את הרגישות, וכמובן מה שאני עוד צריך לעשות זה לסובב את
השחקן. אז ככה, בוא נלך לאדיט, פליי פרוג'קט סטינגס אינפוט,