תכנות משחק באחדות: מדריך למתחילים

תכנות משחק באחדות: מדריך למתחילים
מדריך זה זמין להורדה כקובץ PDF בחינם. הורד את הקובץ הזה עכשיו . אתם מוזמנים להעתיק ולשתף את זה עם חברים ובני משפחה.

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





צוותי פיתוח משחקי האינדי האלה הפגינו זריזות וסבילות סיכונים שבמקרים רבים מאפשרים להם לדחוף חדשנות במשחק מהר יותר מאשר עמיתיהם התקציביים הגדולים. מספר כותרות אינדי מוצלחות להפליא עלו בכורה בשנים האחרונות, כולל מיינקראפט , נְשִׁיָה , ו Super Meat Boy , וגם אם אינך צריך מיומנויות ליצור משחקים כאלה, תוכל ליצור משחק באמצעות Buildbox.





בנוף המתפתח במהירות של פיתוח משחקי אינדי, אַחְדוּת הפך למשהו סטנדרטי בפועל: עלותו הנמוכה, קלות השימוש ומערך התכונות הרחב הופכים אותו לאידיאלי לפיתוח משחקים מהיר. האחדות כל כך גמישה שאפשר אפילו צור בקרי משחקים מותאמים אישית משלך עם קצת DIY יודע איך!





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

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



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

היום אני אדריך אותך בכל מה שאתה צריך לדעת כדי ליצור משחק באחדות, המתפרק לעשרה פרקים עיקריים:





§1 - גרסאות של אחדות

§2 - התקנת אחדות





§3-מבוא קצר לפרדיגמה מוכוונת האובייקטים

§4 - יסודות אחדות

§5 –דוגמא: אלמנטים בסיסיים של משחק

§6 - סקריפטים באחדות

§7 – דוגמה: תסריט פונג

§8 - חקר התיעוד / למידה נוספת

§9 - בניית המשחק שלך / הידור ליישום עצמאי

§10-הערות סיום

1. גרסאות של אחדות

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

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

1.1 תמחור

הגרסה החינמית של אחדות היא כמובן חינמית. עם זאת, יש כמה מגבלות: לא ניתן לתת רישיון לגרסה החינמית של אחדות לכל חברה עם הכנסה שנתית של יותר מ- 100,000 $ . למרות שארגונים כאלה נמצאים מחוץ להיקף המדריך הזה, אם אתה חושד שאתה עלול להפוך לארגון כזה, סביר להניח שחכם לבוא לגרסת Pro.

גרסת Pro של אחדות היא 75 $ חודש, או $ 1500 לקבלת רישיון קבוע, ואין לו מגבלות על מה שאתה יכול לעשות עם המשחקים שנוצרו איתו. יש גם ניסיון חינם למשך 30 יום, שבו נשתמש במדריך זה, על מנת לתת לך סקירה מלאה ככל האפשר של התכונות הזמינות. רישיון סטודנט לשנה זמין גם באמצעות לימוד ל $ 129 .

1.2 תכונות

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

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

2. התקנת אחדות

אחדות היא פשוטה להתקנה. אתה יכול להוריד את ההפעלה מ unity3d.com/get-unity/download .

לאחר ההורדה, הפעל אותו ולאחר מכן פעל בהתאם להוראות ההתקנה. בסיום ההתקנה יופיע חלון שכותרתו 'הפעל את רישיון אחדותך'. סמן את התיבה 'הפעל ניסיון חינם ל -30 יום של Unity Pro' ולאחר מכן 'אישור'.

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

איך להחזיר את הפס בחזרה ל- Snapchat

3. מבוא קצר לפרדיגמה מוכוונת האובייקטים

לפני שנתחיל ב- Unity, חשוב שנעבור מעט על היסודות. אחדות תומכת בשניהם C # ו JavaScript ל תכנות משחק ; נעבוד עם C# עבור הדרכה זו.

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

אם אתה רוצה משהו קצת שונה מ- C# (אך לא בהכרח שפה בה תוכל להשתמש ב- Unity), עיין במדריך שלנו לשש שפות התכנות הקלות ביותר למתחילים.

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

הרעיון החשוב ביותר שיש להבין כאן הוא הפרדיגמה מוכוונת האובייקטים (מקוצר כ לִפְתוֹחַ ). בשפות מונחות עצמים התוכניות מחולקות ליחידות פונקציונאליות הנקראות אובייקטים . לכל אובייקט יש משתנים ותפקודים פרטיים משלו. פונקציות ספציפיות לאובייקט נקראות שיטות .

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

אובייקטים מייצרים מ שיעורים : מחלקה היא רק קובץ המפרט את ההגדרה של האובייקט שלך. אז אם אתה רוצה א ללעוג אובייקט המטפל ב- AI לאויב במשחק שלך, היית כותב מחלקת 'מוק' ולאחר מכן מצרף קובץ זה לכל ישות אויב. כאשר אתה מפעיל את המשחק שלך, כל אויב יצויד בעותק של אובייקט 'מוק'.

חיבור סקריפט חדש לאובייקט נראה כך:

ראשון, בחר את האובייקט ולך אל מְפַקֵחַ . הקלק על ה הוסף רכיב לַחְצָן.

לך ל תסריט חדש , הזן את השם הרצוי ולחץ על ליצור ולהוסיף .

עכשיו יש לך סקריפט חדש שאתה יכול לערוך על ידי לחיצה כפולה עליו!

קובץ מחלקה נראה בערך כך:

using UnityEngine;
public class Mook : MonoBehaviour {
private float health;
void Start () {
health = 100;
}
void Update(){
if (health > 0) {
/* Search for player
if you encounter the player on the road, kill him
if you get shot, remove a random amount of health */
}
}
}

בואו נפרק את זה:

  • שימוש ב- UnityEngine: שורה זו אומרת ל- C# שאנחנו רוצים להשתמש בספריות של Unity, המאפשרות לנו להתחבר למנוע המשחקים של Unity.
  • מחלקה ציבורית מוק: מונו התנהגות: שורה זו מכריזה על המחלקה ושמה - ללעוג .
  • בריאות צפה פרטית: זה מצהיר על משתנה מחלקה פרטית (שניתן לשנותו רק מתוך הכיתה). למשתנה ניתן ערך ב- הַתחָלָה .
  • בטל התחלה (): זה מכריז על שיטה שנקראת הַתחָלָה . התחלה היא שיטה מיוחדת הפועלת פעם אחת בלבד, כאשר המשחק מתחיל בהתחלה.
  • עדכון בטל (): עדכון הוא שיטה מיוחדת נוספת, הפועלת על כל מסגרת. רוב ההיגיון במשחק שלך ילך לכאן.
  • // אם אתה נתקל בשחקן על הכביש, הרג אותו: שורה זו היא הערה (כל שורה שמתחילה בקו קו כפול מתעלמת על ידי C#). הערות משמשות כדי להזכיר לעצמך מה פיסות קוד מסוימות עושות. במקרה זה, ההערה הזו משמשת כדי לעמוד על גוש קוד מסובך יותר שלמעשה עושה את מה שההערה מתארת.

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

public float addTwoNumbers(float a, float b) {
return a+b;
}

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

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

float result = addTwoNumbers(1, 2);

קריאת השיטה ממעמד אחר דומה:

addTwoNumbers instance;
float result = instance.addTwoNumbers(1, 2);

שוב, זה רק יוצר מופע של הכיתה שלנו, ניגש לשיטה המתאימה ומזין את המספרים שברצוננו להוסיף ואז מאחסן את התוצאה תוֹצָאָה . פָּשׁוּט.

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

התחביר לכך נראה כך:

GetComponent().Play();

אם כל זה אינו מוכר לך, חזור ועבר את פריימר C#. זה יחסוך לך הרבה תסכול בהמשך הדרך.

4. יסודות אחדות

בחלק זה, אנו נעבוד בדרכנו באמצעות המכניקה הבסיסית של מנוע אחדות. תהליך העבודה ב- Unity הולך בערך כך:

  1. צור ישות שתמלא תפקיד במשחק (ריק GameObjects יכול לשמש למשימות לוגיות מופשטות).
  2. כתוב או מצא קובץ מחלקה והוסף אותו לישות כתסריט (באמצעות הוסף רכיב כפתור ב מְפַקֵחַ נוף.
  3. לָרוּץ > מִבְחָן > לנפות > חזור עד שזה עובד ועבור לאלמנט הבא של המשחק.

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

  1. מִשְׂחָק: מציג מופע פועל של המשחק שאפשר ליצור איתו אינטראקציה ולבדוק.
  2. סְצֵינָה: מספק גרסה סטטית לעריכה של משחק עולם .
  3. מְפַקֵחַ: מאפשר לך לשנות ישויות בודדות בעולם המשחק על ידי בחירתן ב- עוֹרֵך כרטיסייה.
  4. פּרוֹיֶקט: מאפשר לך לדפדף בין קבצי הפרויקט ולגרור מודלים, חומרים ומשאבים אחרים לתוך עוֹרֵך הכרטיסייה כדי למקם אותם בעולם המשחקים.
  5. הִיֵרַרכִיָה: כרטיסייה זו מציגה את כל האובייקטים בעולם, ומאפשרת לך למצוא אובייקטים רחוקים בסצנה וגופים הורים זה לזה על ידי לחיצה וגרירה.

עיין בתרשים שלהלן למיקומים של כל הדברים האלה:

4.1 ישויות אחדות

4.1.1 רשתות

רשתות הן הדרך גיאומטריה תלת מימדית מיוצג באחדות. אתה יכול להשתמש במובנה של Unity פְּרִימִיטִיבִי אובייקטים (קוביות, כדורים, צילינדרים וכו '), או ייבא דגמי תלת מימד משלך מחבילת דוגמנות כמו מַמחֶה אוֹ מאיה . Unity תומך במגוון פורמטים תלת -ממדיים, כולל .fbx , ו .3ds .

הכלים הבסיסיים לתפעול רשתות הם כפתורי קנה המידה, הסיבוב והתרגום בפינה השמאלית העליונה של הממשק. לחצנים אלה מוסיפים סמלים של שליטה לדגמים בתצוגת העורך, ולאחר מכן ניתן להשתמש בהם כדי לתפעל אותם בחלל. כדי לשנות את תכונות המרקם או הפיזיקה של אובייקט, בחר אותם והשתמש ב מְפַקֵחַ מבט לנתח את חוֹמֶר ו גוף קשיח אלמנטים.

4.1.2 רכיבי GUI

ניתן להציג ספריטים וטקסט מסורתיים של GUI באמצעות טקסט GUI וה מרקם GUI GameObjects בעורך. עם זאת, דרך חזקה ומציאותית יותר להתמודד עם אלמנטים של ממשק משתמש היא השימוש ב- טקסט תלת מימד ו מְרוּבָּע GameObjects (עם מרקמים שקופים וצלול שקוף שאינו מואר) להציב אלמנטים של HUD לעולם המשחק כישויות.

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

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

4.1.3 חומרים

חומרים הם שילובים של מרקמים וצללים, וניתן לגרור אותם ישירות אל אובייקטים של משחק מהכרטיסייה של הפרויקט. מספר רב של צללים מגיעים עם Unity Pro, ותוכל להתאים את המרקם המצורף אליהם באמצעות כרטיסיית המפקח לאובייקט שהם מיושמים עליו.

כדי לייבא מרקם, המר אותו ל- .jpg , .png , או .bmp וגרור אותו לתוך נכסים תחת תיקיית הפרויקט Unity (המופיעה ב- המסמכים שלי כברירת מחדל). לאחר מספר שניות יופיע סרגל טעינה בעורך. כאשר היא מסתיימת, תוכל למצוא את התמונה כמרקם מתחת ל פּרוֹיֶקט כרטיסייה.

4.1.5 אורות

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

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

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

שלושת סוגי האור העיקריים הם לְזַהוֹת , נְקוּדָה , ו כִּוּוּנִי .

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

אורות נקודה יש מיקום בחלל תלת -ממדי, ושופכים אור באופן שווה לכל הכיוונים. אורות נקודה אינם מטילים צל.

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

4.1.6 מערכות חלקיקים

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

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

תחת הִתנַגְשׁוּת תכונה, אם תפעיל אותה ותגדיר את מרחב הסימולציה ל- עוֹלָם תקבל חלקיקים שיתנגשו בחפצים בעולם, שיכולים לשמש למספר השפעות חלקיקות מציאותיות, כולל גשם, מים זזים וניצוצות.

5. דוגמא: אלמנטים בסיסיים של משחק

עבור הדרכה זו, אנו הולכים לעשות משחק פשוט של פונג - משהו שסיקרנו מספר פעמים ב- DIY בעבר:

  • פונג קלאסי של ארדואינו
  • פונג ארדואינו OLED

בחלק זה נעבור על סידור יסודות הליבה - מדריך הסקריפטים יגיע מאוחר יותר.

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

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

ראשית, צור א אביזר קוביה בשביל ההנעה.

קנה את זה כראוי, לשכפל אותו , ושם א כַּדוּר בין ההנעה לכדור.

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

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

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

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

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

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

6. תסריט באחדות

ברגע שיש לך סקריפט מצורף לאובייקט, תוכל לשנות אותו על ידי לחיצה כפולה עליו ב- מְפַקֵחַ . זה נפתח MonoDevelop , סביבת הפיתוח המוגדרת כברירת מחדל עבור Unity. בעיקרו של דבר, Monodevelop הוא עורך טקסט עם תכונות המותאמות במיוחד לתכנות.

מילות מפתח והערות מודגשות ב כָּחוֹל ו ירוק , וערכים ומחרוזות מספריים מופיעים ב נֶטוֹ . אם השתמשת ליקוי חמה או של IDE אחרים, MonoDevelop דומה מאוד. אתה יכול לִבנוֹת את הסקריפטים שלך מתוך העורך, כדי לבדוק אם יש שגיאות תחביר, כך:

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

אם אתה רוצה שתסריט על אובייקט ישפיע על המאפיינים של אובייקט אחר, תוכל ליצור ריק GameObject משתנה בתסריט שלך, והשתמש ב- מְפַקֵחַ להקצות אותו לאובייקט אחר בסצנה.

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

  1. שינוי צורה
  2. קוביה (מסנן רשת)
  3. Box Collider
  4. מעבד רשת

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

6.1 טרנספורמציה

פונקציות הטרנספורמציה של GameObject in Unity שולטות בפרמטרים הפיזיים של אותו אובייקט: שלה סוּלָם , שלה עמדה , וזה שלה נטייה . אתה יכול לגשת אליהם מתוך סקריפט כזה:

transform.position = newPositionVector3;
transform.rotation = newRotationQuaternion;
transform.localScale = newScaleVector3;

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

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

transform.rotation = Quaternion.Euler(pitch, yaw, roll);

אם ברצונך להעביר אובייקטים בצורה חלקה ממקום למקום, תמצא את סלרפ שיטת רבעונים וקטורים 3 מועילה. סלרפ לוקח שלושה טיעונים - המצב הנוכחי, המצב הסופי ומהירות השינוי, ומערער ביניהם בצורה חלקה במהירות הנתונה. התחביר נראה כך:

transform.position = Vector3.Slerp(startPositionVector3, newDestinationVector3, 1);

6.2 מעבד

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

renderer.enabled = false;
renderer.material.color = new Color(0, 255, 0);
renderer.material.mainTexture = myTexture;
renderer.material.shader = newShader;

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

6.3 פיזיקה

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

כל אביזרי הפיזיקה דורשים מתנגשים . עם זאת, ההדמיה עצמה מטופלת על ידי א גוף קשיח , שניתן להוסיף ב מְפַקֵחַ נוף. נוגדנים יכולים להיות קינמטי אוֹ לא קינמטי .

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

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

דוגמאות:

rigidbody.angularDrag = 0.1f;
rigidbody.mass = 100;
rigidbody.isKinematic = false;
rigidbody.useGravity = true;
rigidbody.AddForce(transform.forward * 100);

כל אלה די מסבירים את עצמם. הדבר היחיד שצריך לציין כאן הוא השימוש ב- להפוך. קדימה . ל Vector3 יש שלושה מרכיבים ( .קָדִימָה , .לְמַעלָה , ו .ימין ) הקשורים אליהם, שאפשר לגשת אליהם ולסובב אותם ( קָדִימָה הוא כיוון החץ הכחול בעורך). ה להפוך. קדימה מילת המפתח היא פשוט וקטור קדימה לאובייקט הנוכחי עם גודל 1. ניתן להכפיל אותו במצוף כדי ליצור יותר כוח על האובייקט. אתה יכול גם להתייחס transform.up ו להפוך.נכון , ולשלול אותם כדי לקבל את ההיפוכים שלהם.

6.4 התנגשות

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

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

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

void OnCollisionEnter(Collision other) {
//do things here
}

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

לפעמים, זה יכול להיות שימושי גם לעשות מה שנקרא raycasting . בשידור raycast, קו דק לאין שיעור (א קֶרֶן ) נזרק דרך העולם ממקור כלשהו, ​​לאורך וקטור כלשהו, ​​וכאשר הוא פוגע במשהו, המיקום ופרטים אחרים של ההתנגשות הראשונה מוחזרים. הקוד של raycast נראה כך:

RaycastHit hit;
if (Physics.Raycast(transform.position, -Vector3.up, out hit)) {
float distanceToGround = hit.distance;
}

זה מטיל קרן מהמיקום של האובייקט הנוכחי לאורך -Vector3.up (ישר למטה), ומקשר את המשתנה מכה לאובייקט הראשון איתו הוא מתנגש. ברגע שהקרן שלך פגעה במשהו, תוכל לגשת אליו hit.distance כדי לקבוע כמה זה רחוק, או hit.GameObject לתמרן את האובייקט שפגעת בו.

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

6.5 תיקון זמן

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

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

6.6 מקורות שמע ומאזינים

כעת, לאחר שסקרנו כיצד ליצור, לעבד ולשלוט באובייקטים, בואו נדבר על התחושה השנייה שמשחקי מחשב יכולים לשרת: כלומר, נשמע . אחדות תומכת בשני סוגים של צלילים: 2D ו תלת מימד צלילים. צלילים תלת -ממדיים משתנים את עוצמת הקול שלהם בהתאם למרחק, ומתעוותים תוך כדי תנועה ביחס למצלמה; צלילים דו -ממדיים לא.

צלילים דו-ממדיים מתאימים לקריאות שמע ומוזיקת ​​רקע, וצלילים תלת-ממדיים חלים על צלילים שנוצרים מאירועים בעולם. כדי לשנות אם צליל הוא תלת מימד או לא, בחר אותו ב- פּרוֹיֶקט צפה, עבור אל מְפַקֵחַ הצג ובחר באפשרות המתאימה מהתפריט הנפתח ולאחר מכן הקש על לייבא מחדש לַחְצָן.

על מנת להשמיע את הצליל בפועל, עליך לצרף מקור שמע לאביזר (האביזר שממנו אתה רוצה שהצליל יגיע, במקרה של צליל תלת -ממדי). אז תצטרך לפתוח את קליפ אודיו שדה ובחר את קובץ הקול שלך.

מה המשמעות של חלוקת הכונן הקשיח

אתה יכול להשתמש myAudioSource.Pause () ו myAudioSource.Play () כדי לשלוט בקבצי הקול האלה. אתה יכול להתאים את התנהגויות הנפילה, עוצמת הקול והעברת הדופלר של הצלילים מתחת ל מְפַקֵחַ הכרטיסייה עבור מקור האודיו.

6.7 קלט

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

Vector3 mousePos = Input.mousePosition;
bool isLeftClicking = Input.GetMouseButton(0);
bool isPressingSpace = Input.GetKey(KeyCode.Space);

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

6.8 איתור באגים בסקריפט

נניח שהתסריט לא עובד. כפי שאומר הרופא הטוב, באנג -אפ וניתוקים יכולים לקרות לך. אם ישנן שגיאות תחביר מוחלטות ב- C#שלך, המשחק בדרך כלל יסרב לפעול כאשר אתה לוחץ על הפעלה, ותקבל כמה הודעות שגיאה שימושיות למדי אם אתה לִבנוֹת התסריטים מתוך העורך. ראה למטה:

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

הראשון הוא להשהות את ביצוע המשחק ולבדוק את הקונסולה. אתה יכול להשהות את המשחק על ידי לחיצה על הַפסָקָה סמל בחלק האמצעי העליון של העורך ולאחר מכן בחירה לְנַחֵם מהחלק התחתון של חַלוֹן תפריט (או לחיצה על Ctrl > מִשׁמֶרֶת > ג ). גם אם אין טעויות, אזהרות עדיין יכולות לעזור לתת כמה רמזים לגבי מה שעשוי להשתבש.

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

7. דוגמא: תסריט פונג

כדי לבנות את פונג, בואו נפרק את המשחק ליסודות הליבה שלו: אנחנו צריכים כדור שמתקדם קדימה ואחורה בין המשוטים במהירות הולכת וגוברת, אנחנו צריכים לוח תוצאות שיודע מתי הכדורים עברו את המשוטים, ואנחנו צריכים מנגנון הפעלה מחדש של הכדור כשזה קורה. צעד ראשון טוב יהיה הוספת גוף נוקשה שאינו קינמטי לכדור, שני נוגדנים נוקשים קינמטיים למשוטים, השבתת כוח הכבידה לכולם והקצאת חומר פיסי מתאים מהנכסים הסטנדרטיים ( להקפיץ עם לשלב קפיצה מכוון ל לְהַכפִּיל ).

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

BallHandler.cs

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

PaddleHandler.cs

לאחר מכן, אנו זקוקים ל- AI של האויב: משהו שיגרום לחבטת האויב לעקוב אחר הכדור בקצב קבוע. לשם כך נשתמש ב- Vector3.Slerp לפשטות מרבית. היינו רוצים גם את אותה התנהגות חלקיקים שאנו רואים על ההנעה שלנו.

EnemyAI.cs

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

לוח תוצאות Updater.cs

עם התסריטים המצורפים וההתייחסויות מלאות, כאשר אנו מריצים את משחק הפונג שלנו, אנו חווים משחק!

אתה יכול הורד את הדגמת הפונג שלי , אם אתה רוצה לראות את כל מה שתארתי בפעולה. הוא פועל במערכות Windows, Mac ו- Linux.

8. חקר התיעוד / למידה נוספת

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

משאב מכריע כאן הוא Unity ScriptReference . ScriptReference הוא מאגר נתונים שניתן לחפש, הזמין עבור C# ו- Javascript, הכולל רשימה של כל פקודה ותכונה של Unity, עם תיאורים של הפונקציות שלהם ודוגמאות קצרות של תחביר.

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

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

9. בניית המשחק שלך / הידור ליישום עצמאי

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

בתור התחלה, דע שאתה יכול לבנות רק פרויקט נטול שגיאות. לשם כך, וודא שהקונסולה פתוחה בעת בנייתך: יש כמה תנאי שגיאה שהמשחק יתעלם מהם בעורך, אך עדיין יבטל ניסיון בנייה. זה רק זורק הודעות שגיאה לקונסולה, ללא תוצאות גלויות על המסך, מה שעלול להיות מתסכל אם תשכח לבדוק. עם זאת, לאחר שהמשחק שלך נערך ללא שגיאות, תוכל לבחור בנה הגדרות תחת קוֹבֶץ בתפריט, או הקש Ctrl > מִשׁמֶרֶת

> ב . זה יביא דיאלוג פשוט המאפשר לך לבנות את המשחק שלך למספר פלטפורמות.

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

10. הערות סיום

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

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

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

אם קראת את כל זה וקצת מוצף מהקידוד הנדרש עם Unity, הקפד לבדוק כיצד ללמוד פיתוח משחקים עם Unity Learn וגם קרא את המדריך שלנו כיצד ליצור משחקי וידיאו ללא תכנות.

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

לַחֲלוֹק לַחֲלוֹק צִיוּץ אימייל 3 דרכים לבדוק אם דוא'ל אמיתי או מזויף

אם קיבלת מייל שנראה קצת מפוקפק, תמיד עדיף לבדוק את האותנטיות שלו. להלן שלוש דרכים לדעת אם הודעת דוא'ל אמיתית.

קרא הבא
נושאים קשורים
  • תִכנוּת
  • תִכנוּת
  • טופס ארוך
  • מדריך לונגפורם
על הסופר אנדרה אינפנטה(131 מאמרים פורסמו)

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

עוד מאת אנדרה אינפנטה

הירשם לניוזלטר שלנו

הצטרף לניוזלטר שלנו לקבלת טיפים, סקירות, ספרים אלקטרוניים בחינם ומבצעים בלעדיים!

לחצו כאן להרשמה