مكوّنات صغيرة
جزء من قسم هندسة الألعاب في Unity في رحلة Unity على Coddy. الدرس 1 من 50.
إن GameObject عبارة عن قائمة من المكوّنات، وكل سكربت تكتبه هو مكوّن إضافي. تُبنى ألعاب Unity بإسناد مهمة واحدة لكل سكربت ووضع عدة سكربتات على كائن. يمكن أن تكون حركة اللاعب وإطلاقه النار ونقاط صحته كلها ضمن PlayerController واحد، لكن بوصفها ثلاثة مكوّنات، Mover وShooter وHealth، يمكن وضع كل واحد منها على كائنات أخرى أيضًا:
public class Health : MonoBehaviour
{
public int hp = 3;
public void TakeDamage(int amount)
{
hp -= amount;
if (hp <= 0)
{
Destroy(gameObject);
}
}
}- اللاعب: Mover وShooter وHealth
- البرج: Shooter وHealth
- الصندوق: Health
باستخدام أصناف C# عادية، قد تبني شجرةً بدلًا من ذلك: Character، ثم ShootingCharacter : Character، ثم Player : ShootingCharacter. يطلق البرج النار لكنه لا يمشي أبدًا، والصندوق لا يفعل سوى أن يتحطم، لذا فإن كل نوع جديد من الكائنات يعني إعادة تشكيل الشجرة. أما باستخدام المكوّنات، فالنوع الجديد من الكائنات هو مزيج جديد من السكربتات الموجودة مسبقًا، تجمعها معًا في Inspector، ويمكن أن تكون لكل سكربت قيمه الخاصة هناك: مكوّن Mover بطيء على كائن، وآخر سريع على كائن مختلف.
تتشارك المكوّنات الموجودة على كائن واحد Transform الخاص به، لذا ينبغي لكل منها تغيير الجزء الذي تملكه فقط. إن Mover الذي يضيف إلى x وz باستخدام transform.position += يترك y دون تغيير، لذا يظل بإمكان Jumper على الكائن نفسه تغيير الارتفاع. أما Mover الذي يضبط الموضع بأكمله على new Vector3(x, 0.5f, z) فسيعيد y إلى قيمته في كل إطار ويلغي القفزة.
التحدي
سهلينفّذ Boat.cs ثلاث مهام في الوقت نفسه: تتحكم الأسهم (إجراء Move) في توجيه القارب، ويتمايل القارب على الأمواج، ويومض مصباحه. تحتاج البطة أيضًا إلى التمايل، وتحتاج العوّامة إلى التمايل والوميض، لذا يضمّ المشهد بالفعل المكوّنين Bobber وBlinker لكلٍّ منهما، بينما يحتوي القارب على المكوّنات الثلاثة. قسّم Boat.cs إلى هذه المكوّنات:
- Bobber: يتمايل كل كائن حول الارتفاع الذي يبدأ عنده، بمقدار
heightوحدة إلى الأعلى والأسفل، وبـspeedخاص به (يحدّد Inspector القيمتين). يغيّر Bobber قيمة y في الموضع فقط، لذا يظل بإمكان القارب الانعطاف. - Blinker: يشغّل
lamp(وهو Renderer) ويطفئه كلintervalثانية. - Boat يحتفظ بالتوجيه فقط: احذف التمايل والوميض، مع الحقول المرتبطة بهما.
اضغط Play ووجّه القارب في أرجاء المكان، ثم اضغط Check.
جرّب بنفسك
using UnityEngine;
using UnityEngine.InputSystem;
// برنامج نصي واحد، ثلاث مهام: التوجيه والتمايل والوميض.
public class Boat : MonoBehaviour
{
public float speed = 3f;
public float bobHeight = 0.1f;
public float bobSpeed = 2f;
public Renderer lamp;
public float blinkInterval = 0.5f;
private InputAction moveAction;
private float startY;
private float blinkTimer;
void Start()
{
moveAction = InputSystem.actions.FindAction("Move");
startY = transform.position.y;
}
void Update()
{
// التوجيه
Vector2 input = moveAction.ReadValue<Vector2>();
transform.position += new Vector3(input.x, 0f, input.y) * speed * Time.deltaTime;
// التمايل
Vector3 p = transform.position;
p.y = startY + Mathf.Sin(Time.time * bobSpeed) * bobHeight;
transform.position = p;
// الوميض
blinkTimer += Time.deltaTime;
if (blinkTimer >= blinkInterval)
{
blinkTimer -= blinkInterval;
lamp.enabled = !lamp.enabled;
}
}
}
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس هندسة الألعاب في Unity
1المكوّنات لا التسلسلات الهرمية
مكوّنات صغيرةسكربت أساسي للعدومكوّنات مجرّدةتعمل المكوّنات معًامراجعة: برج دفاعي معياري4البيانات المتسلسلة
الأصناف القابلة للتسلسلالقوائم في Inspectorالتعدادات في Inspectorمراجعة: جدول الغنائم10مشروع: الناجي في الساحة
البطلأنواع الأعداء