הגדרות משותפות
חלק מהיחידה ארכיטקטורת משחקים ב-Unity במסלול ה-Unity של Coddy. שיעור 25 מתוך 64.
הגדרת קושי משנה את כל האויבים בבת אחת, ולכן מתאים להשתמש בנכס אחד שכולם מצביעים עליו. כל אויב קורא את המהירות מהנכס בכל פריים, וכפתור Hard בתפריט כותב לאותו נכס:
[CreateAssetMenu(menuName = "Game/Difficulty")]
public class Difficulty : ScriptableObject
{
public float enemySpeed = 2f;
}public class Enemy : MonoBehaviour
{
public Difficulty difficulty;
public Transform player;
void Update()
{
float step = difficulty.enemySpeed * Time.deltaTime;
transform.position = Vector3.MoveTowards(transform.position, player.position, step);
}
}// DifficultyMenu.cs, מחובר ל-onClick של הכפתור Hard
public Difficulty difficulty;
public void SetHard()
{
difficulty.enemySpeed = 4f;
}השדות של האויבים והשדה של התפריט מחזיקים את אותו נכס, ולכן אחרי SetHard() העדכון הבא של כל אויב קורא את הערך 4, כולל אויבים שייווצרו מאוחר יותר מתוך קדם־אובייקט שבשדה שלו נמצא הנכס. זה עובד כי כל אויב קורא את difficulty.enemySpeed כשהוא נע. אויב שהעתיק אותו לשדה משלו בתוך Start ממשיך לנוע במהירות 2.
המקום שבו שינוי שנעשה במהלך המשחק נשמר תלוי במקום שבו המשחק רץ. גרסה בנויה טוענת את הנכסים כפי שהיו בעת הבנייה בכל פעם שהיא מתחילה, ולכן בחירת Hard של השחקן נעלמת במשחק הבא: כדי לשמור את הבחירה, שמור אותה באמצעות PlayerPrefs וכתוב אותה בחזרה לנכס כשהמשחק מתחיל. ב־Editor, הנכס שבפרויקט שלך הוא זה שהמשחק משנה, והשינוי נשאר אחרי שלוחצים על Stop, בניגוד לאובייקטים בסצנה, שחוזרים לערכים שלהם ב־Inspector. הלחיצה הבאה על Play מתחילה במצב Hard, והנכס נשאר בערך 4 עד שתחזיר אותו.
אתגר
בינוניגרמו לחץ לשנות את הרוח בכל הסירות באמצעות שיתוף נכס אחד.
- ב־
Sailboat, החליפו אתwindStrengthב־public WindSettings wind;והפליגו במהירותwind.strength. - ב־
WindVane, החליפו אתstrengthב־public WindSettings wind;. - גרמו לחץ לשנות את
wind.strength(מ־0 עד 5), והציגו את הערך בטקסט, כמוWind: 3.
לחצו על "שחק" ואז לחצו על החץ למעלה: כל שלוש הסירות ינועו מהר יותר. לאחר מכן לחצו על "בדיקה".
נסו בעצמכם
using UnityEngine;
using UnityEngine.InputSystem;
using TMPro;
public class WindVane : MonoBehaviour
{
public TMP_Text windText;
public float strength = 2f;
void Start()
{
Show();
}
void Update()
{
if (Keyboard.current.upArrowKey.wasPressedThisFrame)
{
strength = Mathf.Min(strength + 1f, 5f);
Show();
}
if (Keyboard.current.downArrowKey.wasPressedThisFrame)
{
strength = Mathf.Max(strength - 1f, 0f);
Show();
}
}
void Show()
{
windText.text = "Wind: " + strength;
}
}
כל השיעורים ביחידה ארכיטקטורת משחקים ב-Unity
1רכיבים, לא היררכיות
רכיבים קטניםסקריפט בסיסי לאויברכיבים מופשטיםרכיבים שפועלים יחדחזרה: צריח מודולריחזרה: תותח כפול4נתונים שעברו סריאליזציה
מחלקות שניתנות לסריאליזציהרשימות ב־Inspectorטיפוסי Enum ב־Inspectorחזרה: טבלת שללהגרלת השלל2ממשקים ב-Unity
IDamageableממשקים ו-TryGetComponentGetComponentsסיכום: מקש אינטראקציהסיכום: הקרוב ביותר בטווח5ScriptableObjects
נכסי נתוניםנתוני נשקהגדרות משותפותהצילו את הרוחגלים כנתוניםסיכום: מסד נתונים של פריטיםסיכום: קנייה בחנותתרגלו בעצמכם: Unity אונליין