مقدمة لآلة الدولة في الوحدة

تعد أجهزة الحالة مفهومًا أساسيًا في تطوير الألعاب، وتوفر Unity مجموعة أدوات قوية لتنفيذها. آلة الحالة هي نموذج حسابي يتكون من مجموعة من الحالات، والانتقالات بين تلك الحالات، والإجراءات المرتبطة بكل حالة أو انتقال. في Unity، يتم استخدام نظام آلة الحالة بشكل شائع للتحكم في سلوك شخصية اللعبة، وإدارة الرسوم المتحركة، والتعامل مع إدخالات المستخدم، وإدارة حالات واجهة المستخدم، والمزيد.

ما هي آلة الدولة

تتكون آلة الحالة في جوهرها من عنصرين رئيسيين: الحالات والانتقالات.

تمثل الحالات شروطًا محددة أو سلوكيات يمكن أن يتواجد فيها كائن أو نظام في أي وقت محدد. على سبيل المثال، في آلة حالة إحدى شخصيات اللعبة، قد تكون هناك حالات مثل الخمول أو المشي أو الجري أو القفز أو الهجوم. تحدد كل حالة مجموعة من الإجراءات أو السلوكيات المرتبطة بها.

public enum CharacterState
{
    Idle,
    Walking,
    Running,
    Jumping,
    Attacking
}

public CharacterState currentState;

تحولات آلة الدولة

ومن ناحية أخرى، تصف التحولات الظروف التي تنتقل بموجبها آلة الحالة من حالة إلى أخرى. يمكن تفعيل هذه الشروط عن طريق إدخال المستخدم، أو حدوث أحداث معينة في اللعبة، أو استيفاء معايير محددة. على سبيل المثال، قد يتم تشغيل الانتقال من حالة الخمول إلى حالة المشي عندما يضغط اللاعب على مفتاح الحركة.

الرسوم المتحركة

في Unity، غالبًا ما يتم تنفيذ وظيفة آلة الحالة باستخدام مكون Animator، الذي يوفر واجهة لإنشاء الحالات والانتقالات وإدارتها. تتيح وحدة التحكم Animator للمطورين تحديد مقاطع الرسوم المتحركة لكل حالة وتحديد شروط الانتقال، مثل قيم المعلمات أو أحداث التشغيل.

آلة الدولة في Unity

نافذة الرسوم المتحركة الوحدة

لاستخدام آلة الحالة في Unity، اتبع الخطوات التالية:

إنشاء وحدة تحكم الرسوم المتحركة

أصل وحدة تحكم الرسوم المتحركة في محرر الوحدة

  • يعمل هذا الأصل بمثابة الحاوية لجهاز الحالة. يمكن إنشاؤه عن طريق النقر بزر الماوس الأيمن في نافذة المشروع وتحديد "Create," واختياره "Animator Controller."
Animator animator;

دول التصميم

  • ضمن وحدة التحكم في الرسوم المتحركة، يمكن تعريف الحالات التي تمثل سلوكيات أو شروطًا مختلفة. يمكن أن يكون لكل حالة مقاطع رسوم متحركة مرتبطة بها أو متغيرات أو معلمات تتحكم في سلوك الحالة.
animator = GetComponent<Animator>();
animator.SetFloat("Speed", moveSpeed); // Set the "Speed" parameter to control animation speed

تعريف التحولات

  • حدد الشروط التي بموجبها تنتقل آلة الحالة من حالة إلى أخرى. يمكن أن تعتمد هذه الشروط على قيم المعلمات، أو أحداث trigger، أو المنطق الذي يحركه البرنامج النصي.
animator.SetBool("IsJumping", true); // Set the "IsJumping" parameter to trigger the jumping animation

تنفيذ الإجراءات

  • قم بإرفاق البرامج النصية بكائنات اللعبة التي تتعامل مع الإجراءات المرتبطة بكل حالة أو انتقال. يمكن لهذه البرامج النصية تعديل المتغيرات والتحكم في الرسوم المتحركة وتنفيذ إجراءات اللعب والمزيد.
void Update()
{
    // Check for player input and transition to the appropriate state
    if (Input.GetKey(KeyCode.W))
    {
        currentState = CharacterState.Walking;
        animator.SetBool("IsWalking", true);
    }
    else if (Input.GetKey(KeyCode.Space))
    {
        currentState = CharacterState.Jumping;
        animator.SetBool("IsJumping", true);
    }
    else
    {
        // Default state
        currentState = CharacterState.Idle;
        animator.SetBool("IsWalking", false);
        animator.SetBool("IsJumping", false);
    }
}

الاختبار والتكرار

العب اللعبة ولاحظ كيفية انتقال آلة الحالة بين الحالات بناءً على الشروط المحددة. اضبط التحولات والإجراءات والمعلمات حسب الحاجة لتحقيق السلوك المطلوب.

خاتمة

توفر أجهزة الحالة منهجًا معياريًا ومنظمًا لإدارة السلوكيات المعقدة في ألعاب Unity. من خلال تحديد الحالات والانتقالات والإجراءات المرتبطة بها، يمكن للمطورين إنشاء أنظمة ديناميكية وسريعة الاستجابة تتكيف مع مدخلات اللاعب وأحداث اللعبة والظروف الأخرى. سواء كان شخص ما يقوم بإنشاء رسوم متحركة للشخصيات، أو سلوكيات الذكاء الاصطناعي، أو تفاعلات واجهة المستخدم، أو أي نظام ألعاب آخر، فإن فهم أجهزة الحالة واستخدامها في Unity يمكن أن يعزز بشكل كبير سير عمل تطوير اللعبة.

المقالات المقترحة
كيفية تشغيل Cutscene في الوحدة
مقدمة للمتغيرات وأنواع البيانات في البرمجة في الوحدة
إنشاء نظام جرد وصياغة العناصر في الوحدة
إنشاء تأثير وقت الرصاصة في الوحدة
إنشاء كائنات تفاعلية في الوحدة
تنفيذ التفاعلات الحركية في الوحدة
نظام الاختيار والإسقاط بدون جرد في الوحدة