المكوّنات تعمل معًا
جزء من قسم هندسة الألعاب في Unity في رحلة Unity على Coddy. الدرس 4 من 64.
حتى المكوّنات الصغيرة تحتاج إلى بعضها. يحتاج Jetpack إلى Fuel على الكائن نفسه، لذا يعثر على Fuel مرة واحدة في Awake، ويحفظه في حقل، ويتواصل معه من خلال طريقتين عامتين صغيرتين:
public class Fuel : MonoBehaviour
{
public float amount = 10f;
public bool IsEmpty()
{
return amount <= 0f;
}
public void Burn(float units)
{
amount = Mathf.Max(amount - units, 0f);
}
}[RequireComponent(typeof(Fuel))]
public class Jetpack : MonoBehaviour
{
public float lift = 4f;
private Fuel fuel;
void Awake()
{
fuel = GetComponent<Fuel>();
}
void Update()
{
if (Keyboard.current.spaceKey.isPressed && !fuel.IsEmpty())
{
fuel.Burn(Time.deltaTime);
transform.position += Vector3.up * lift * Time.deltaTime;
}
}
}تجعل [RequireComponent(typeof(Fuel))] Unity يضيف Fuel كلما أُضيف Jetpack، سواء في المحرر أو باستخدام AddComponent، كما تمنع إزالة Fuel ما دام Jetpack موجودًا. لا يتحقق Unity من ذلك إلا لحظة إضافة Jetpack، لذا فإن Jetpack الموجود بالفعل على كائن قبل كتابة السمة يحتفظ بإعداده السابق. المكان المناسب لجلبه هو Awake: فهو يعمل مرة واحدة، وتكون جميع مكوّنات الكائن نفسه موجودة حينها.
لا يغيّر Jetpack قيمة amount بنفسه أبدًا. يحدد Fuel معنى استهلاك الوقود، مثل عدم النزول أبدًا إلى ما دون 0، بينما يكتفي Jetpack بالاستعلام. وإذا أضاف Fuel لاحقًا مقياسًا أو أعاد تعبئة الوقود من العناصر الملتقطة، فلن يحتاج Jetpack إلى التغيير.
التحدي
سهلاجعل اندفاعة المتزلج تستهلك القدرة على التحمّل.
- في
Stamina، أضفpublic bool TrySpend(float cost): إذا كانتcurrentتساويcostأو تزيد عليها، اطرحcostمنها وأعِدtrue، وإلا فأعِدfalse. - ضع
[RequireComponent(typeof(Stamina))]فوقpublic class Dash، واجلبه إلى حقل فيAwake(). - عند الضغط على Space، اندفع فقط إذا كانت
TrySpend(cost)تساوي true؛ وإلا فسجّلToo tired.
اضغط «العب»: بعد اندفاعتين، تعرض وحدة التحكم Too tired. ثم اضغط «تحقق».
جرّب بنفسك
using UnityEngine;
using UnityEngine.InputSystem;
public class Dash : MonoBehaviour
{
public float distance = 3f;
public float cost = 40f;
void Update()
{
if (Keyboard.current.spaceKey.wasPressedThisFrame)
{
transform.position += Vector3.forward * distance;
}
}
}
جميع دروس هندسة الألعاب في Unity
1المكوّنات، لا التسلسلات الهرمية
مكوّنات صغيرةنص برمجي أساسي للعدومكوّنات مجرّدةالمكوّنات تعمل معًامراجعة: برج معياريمراجعة: مدفع مزدوج4البيانات المُسلسلة
الأصناف القابلة للتسلسلالقوائم في Inspectorالتعدادات في Inspectorمراجعة: جدول الغنائممراجعة: اختيار الغنائم عشوائيًا2الواجهات في Unity
IDamageableالواجهات وTryGetComponentGetComponentsمراجعة: مفتاح التفاعلمراجعة: أقرب عنصر ضمن النطاقتدرّب بنفسك: Playground لـ Unity