בקר דמויות יכול לעזור לך ליישם פיזיקת תנועה פשוטה במשחק שלך.
אתה יכול לגשת לבקרי דמויות Unity3D מכמה זוויות. אם אתה משתמש בספרייה עם מחלקות ופונקציות חזקות, יצירת בקר דמויות מבוסס פיזיקה יכולה להיות מקום מהנה להתחיל בפיתוח המשחק שלך.
שלב 1: צור סצנה עם אובייקטים של נגן ושטח
ברגע ש-Unity פתוחה ויצרת פרויקט חדש, תוכל להתחיל בהוספת כמה אובייקטים לסצנה שלך. אתה יכול ליצור את האובייקטים האלה בכל סדר שתרצה, אך הקפד לוודא שאתה משתמש בהגדרות הנכונות. אמנם הפרויקט הזה הוא בסיסי, אבל זו דרך מצוינת לעשות זאת התחל עם Unity.
אובייקט מישור תלת מימדי עבור שטח
האובייקט הראשון להוסיף לסצנה שלך הוא מטוס. לחץ לחיצה ימנית בתוך חלונית ההיררכיה, רחף מעל אובייקט תלת מימד, ובחר מָטוֹס מהרשימה. אתה יכול להתאים את גודל המטוס כדי לספק אזור בדיקה גדול יותר, אבל אתה לא צריך לעשות לו שום דבר אחר.
דגם נגן אובייקט קובייה
לאחר מכן, הגיע הזמן להוסיף קובייה לסצנה שתשמש דוגמנית שחקן. לחץ לחיצה ימנית בתוך חלונית ההיררכיה, רחף מעל
אובייקט תלת מימד, ובחר קוּבִּיָה מהתפריט הנפתח. מקם את הקובייה החדשה כך שהיא יושבת מעל המטוס שגם הוספת. אתה גם צריך להוסיף רכיב קשיח כדי להפוך את הקוביה לאובייקט פיזיקה.בחר את הקוביה ועבור אל המפקח. לחץ על הוסף רכיב בתחתית החלונית, חפש את rigidbody ובחר גוף קשיח מהרשימה כאשר היא מופיעה. סמן את השתמש בכוח המשיכה סמן תיבת והשאיר את שאר ההגדרות כפי שהן.
אתה יכול למצוא נכסי Unity בחינם באינטרנט כדי לשפר את הפרויקט שלך.
מצלמה של אדם שלישי
לסצינה שלך כבר אמורה להיות מצלמה שתוכל להשתמש בה בתור מצלמת גוף שלישי. מקם את המצלמה כך שתושב בתנוחת גוף שלישי נוחה מעל הקובייה שלך. עבור לחלונית ההיררכיה לפני גרירה ושחרור של המצלמה על הקובייה כדי ליצור קשר הורה-ילד. המצלמה תעקוב אוטומטית אחר הקובייה שלך כשזה נעשה.
מבחן מהיר
למרות שעדיין אין לסצנה שלך שום קוד, אתה יכול לבדוק את העבודה שעשית עד כה. לחץ על לְשַׂחֵק כפתור בחלק העליון של המסך כדי לטעון את המשחק שלך. אתה אמור לראות את הקובייה נופלת ונוחתת על גבי המטוס, והמצלמה צריכה לעקוב אחרי הקובייה כשהיא נופלת.
שלב 2: הגדר קובץ C#
עכשיו הגיע הזמן ליצור קובץ C# כדי שתוכל להתחיל לתכנת תנועה כלשהי. עבור אל הקטע 'פרויקט', לחץ לחיצה ימנית, העבר את העכבר מעל 'צור' ובחר תיקיה מהרשימה. תן שם לתיקיה Scripts או משהו דומה.
נווט בתוך התיקיה החדשה שלך וחזור על התהליך, אך בחר ב-C# Script מהרשימה. אתה יכול לתת לקובץ הזה כל שם, אבל זה יהיה גם השם של הפונקציה הראשית בתוכו. ודא ש-C# החדש שלך נראה כך.
באמצעות מערכת. אוספים;
באמצעות מערכת. אוספים. גנרית;
באמצעות UnityEngine;פּוּמְבֵּימעמדCharacter_Control: מונו-התנהגות {
בָּטֵלהַתחָלָה() {
}
בָּטֵלעדכון() {
}
}
שלב 3: השתמש ב-C# כדי ליצור תנועה קדימה ואחורה עם מהירות
לפני הוספת הפונקציות בקובץ הסקריפט שלך, הכריז על כמה משתנים ציבוריים. ראשית יש Rigidbody לאחסון דגם הנגן. הכריז גם על ציפה כדי לעקוב אחר מהירות התנועה. משתנים אלה נכנסים למחלקה הראשית, מחוץ לפונקציות כלשהן.
פּוּמְבֵּי Rigidbody rigidbody;
פּוּמְבֵּילָצוּף מְהִירוּת;
לאחר מכן, הגיע הזמן להוסיף שורת קוד אחת לפונקציית ההתחלה. זה משתמש בהצהרת GetComponent כדי להקצות את רכיב rigidbody של ה-Cube למשתנה rigidbody שיצרת.
בָּטֵלהַתחָלָה() {
rigidbody = GetComponent < Rigidbody > ();
}
עכשיו אתה יכול להוסיף קצת קוד שיניע את דגם הנגן שלך. הקוד הזה נחמד ופשוט; אתה רק צריך שתי הצהרות אם, אחת לתנועה קדימה ואחת לתנועה אחורה. אתה יכול להשתמש ב-Input. GetKey כדי לקבוע מתי מקש נלחץ. במקרה זה, אתה מחפש לחיצות על מקשי W ו-S.
לחיצה על אחד מהמקשים הללו מוסיפה כוח לגוף הנוקשה בקובייה באמצעות הגוף הקשיח. AddForce. ניתן לחשב את הכיוון והמהירות של הכוח הנוסף על ידי הכפלת מיקום ציר ה-Z שלו (transform.forward) במשתנה המהירות. אין מחלקה של transform.backward לשימוש עבור תנועה לאחור, אך ניתן להשיג זאת על ידי הכפלת transform.forward ב-1.
אם (קֶלֶט. להשיג מפתח("וו")) {
גוף קשיח. AddForce (transform.forward * מהירות);
}
אם (קֶלֶט. להשיג מפתח("ש")) {
גוף קשיח. AddForce((transform.forward * -1) * מהירות);
}
שמור את קובץ C# ונווט חזרה אל Unity. מצא את הסקריפט בתוך חלונית הפרויקט וגרור ושחרר אותו אל דגם הדמות Cube בתוך ההיררכיה כדי להקצות את הסקריפט לאובייקט זה. כאשר אתה בוחר בקובייה אתה אמור לראות את הסקריפט כרכיב בחלונית המפקח. לחץ בתוך תיבת המשתנה rigidbody ובחר את ה-rigidbody של הקובייה שלך.
כעת תוכל להשתמש בלחצן הפעל כדי להפעיל את המשחק ולבדוק את הקוד שלך. אבל חכה! יש בעיה; הקובייה שלך מתגלגלת במקום לנוע ישר קדימה. חזור אל המפקח של הקוביה, מצא את רכיב Rigidbody וסמן את התיבות ל-Freze Rotation בציר X ו-Z לפני הפעלת המשחק שוב. עכשיו זה אמור לעבוד.
שלב 4: השתמש ב-C# כדי ליצור פנייה שמאלה וימינה עם מומנט
שלא כמו תנועה אחורה וקדימה, הפיכת דגם נגן הקוביות שלך דורשת כוח שנקרא מומנט. אתה צריך משתנה נוסף בשביל זה: ציפה ציבורית כדי להקצות ערך מומנט.
פּוּמְבֵּילָצוּף עֲנָק;
הקוד לפנות ימינה ושמאלה בסקריפט הזה דומה מאוד לזה שמשתמשים בו גם כדי לנוע קדימה ואחורה. יש אם הצהרה לכל כיוון שמחפש לחיצות על מקש D (פנייה ימינה) או מקש A (פנייה שמאלה).
הצעד הראשון בכל משפט if הוא לקבוע את כיוון הפנייה באמצעות ה-Input. שיטת GetAxis ומקצה את התוצאה למשתנה צף. לאחר מכן, השתמש ב-rigidbody. הוסף מומנט כדי להפעיל כוח סיבובי על מודל הדמות של הקוביה על ידי הכפלת המומנט, הסיבוב וציר ה-Z של הקובייה.
אם (קֶלֶט. להשיג מפתח("ד")) {
לָצוּף turn = קלט. GetAxis("אופקי");
גוף קשיח. AddTorque (transform.up * מומנט * סיבוב);
}
אם (קֶלֶט. להשיג מפתח("א")) {
לָצוּף turn = קלט. GetAxis("אופקי");
גוף קשיח. AddTorque (transform.up * מומנט * סיבוב);
}
שמור את הקוד שלך וחזור אל Unity כדי לבדוק אותו. אתה יכול לכוונן את המהירות וזמן ההתגברות של סיבוב דגם הנגן שלך על ידי בחירת הקוביה ועריכת המשתנים של המסה, הגרירה והמומנט של הגוף הנוקשה בתסריט שלך. פרויקט לדוגמה זה מסתפק על מסה אחת, גרירה אחת ו-2 מומנט.
שלב 5: השתמש ב-C# כדי לתכנת קפיצה
בתור המרכיב האחרון של בקר הדמויות הזה של Unity, הגיע הזמן ליצור את הקפיצה שלך. יצירת קפיצה מורכבת יותר מהפקדים הבסיסיים האחרים שעבדת עליהם, בהתחשב בכך שהקפיצה חייבת להיות בגובה מוגבל. התחל על ידי הוספת משתנה בוליאני פרטי כדי לעקוב אחר האם הנגן קופץ או לא.
פְּרָטִיbool isJumping = שֶׁקֶר;
המשתנה הזה לא יעשה שום דבר בלי הצהרה כדי לבדוק אותו. במקרה זה, משפט if בסיסי כדי לבדוק אם המשתנה הוא שקר יעשה את העבודה. הוספת אותו תנאי לתנועה האחרת אם הצהרות ימנעו מהשחקן לנוע בזמן קפיצות.
אם (!isJumping) {
}
הוספת אותו תנאי לתנועה האחרת אם הצהרות ימנעו מהשחקן לנוע בזמן קפיצות.
אם (קֶלֶט. להשיג מפתח("וו") && !isJumping) {
גוף קשיח. AddForce (transform.forward * מהירות);
}
בתוך ההצהרה !isJumping if, אתה צריך עוד הצהרת if, הפעם כדי לבדוק אם יש לחיצה על כפתור הקפיצה. הגדרת המשתנה isJumping ל-true היא הדבר הראשון שיש לעשות בהצהרת if, ולאחר מכן ביצוע הצהרת rigidbody.angularVelocity כדי להסיר את הכוחות המופעלים כעת על הקוביה.
עכשיו אתה יכול להשתמש בגוף הנוקשה. הצהרת AddForce להוסיף כוח לקובייה על ציר ה-Z שלה, וליצור תנועה כלפי מעלה של קפיצה. לבסוף, הגיע הזמן להשתמש בהצהרת הפעלת כדי לקרוא לפונקציה אחרת לאחר 0.8 שניות.
אם (!isJumping) {
אם (קֶלֶט. GetKeyDown("מֶרחָב")) {
isJumping = נָכוֹן;
גוף קשיח. AddForce (transform.up * מהירות * 120);
rigidbody.angularVelocity = Vector3.zero;
לעורר("Move_Setter", 0.8 ו);
}
}
פונקציה זו מחזירה את המשתנה isJumping ל-false כך שתנועה/קפיצה אפשרית שוב, וההשהיה של 0.8 שניות מונעת ממנו להפעיל מוקדם מדי.
בָּטֵלMove_Setter() {
isJumping = שֶׁקֶר;
}
שלב 6: בדוק את קוד בקר התווים שלך
שמור את הקובץ שלך וחזור אל Unity כדי לבדוק את הקוד שכתבת. כמו רוב המהדרים, Unity מספקת מידע על שגיאות ובעיות אחרות בקוד שלך כדי להקל לראות מה ייתכן שיהיה עליך לשנות. אתה יכול לראות את הקוד המלא עבור הפרויקט הזה אצלנו GitHub עמוד.
יצירת בקרי אופי אחדות
אתה יכול לבחור מתוך מגוון גישות שונות בעת יצירת בקר דמויות ב- Unity. שימוש בפיזיקה הוא אפשרות אחת, אבל אתה יכול גם להשתמש במערכת בקר התווים המובנית אם תרצה.
בחינת אפשרויות שונות כמו זו היא דרך מצוינת ללמוד על כלים כמו Unity.