الإعدادات المشتركة
جزء من قسم هندسة الألعاب في 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 واكتبه مرة أخرى في الأصل عند بدء اللعبة. في المحرر، يكون الأصل الموجود في مشروعك هو الأصل الذي تغيّره اللعبة، ويبقى التغيير بعد الضغط على Stop، بخلاف كائنات المشهد التي تعود إلى قيم Inspector. تبدأ المرة التالية التي تضغط فيها على «العب» على مستوى 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التعدادات في Inspectorمراجعة: جدول الغنائممراجعة: اختيار الغنائم عشوائيًا2الواجهات في Unity
IDamageableالواجهات وTryGetComponentGetComponentsمراجعة: مفتاح التفاعلمراجعة: أقرب عنصر ضمن النطاق5ScriptableObjects
أصول البياناتإحصاءات الأسلحةالإعدادات المشتركةأنقذ الرياحالموجات كبياناتمراجعة: قاعدة بيانات العناصرمراجعة: الشراء من المتجرتدرّب بنفسك: Playground لـ Unity