القائمة الرئيسية

الصفحات

Unity Game Engine: تحديث عناصر واجهة المستخدم و Canvas

Unity Game Engine: تحديث عناصر واجهة المستخدم و Canvas


Unity Game Engine: تحديث عناصر واجهة المستخدم و Canvas

Unity 3D: تحديث عناصر واجهة المستخدم UI Elements
 على Canvas في الوقت الفعلي
في المقال التعليمي الأخير تعلمنا كيف يمكننا إضافة عنصر
 واجهة مستخدم UI Elements تسمية نصية إلى لوحة لعبتنا.
كان بإمكاننا فعل ذلك بسهولة بمجرد استيراد كائن ، أليس كذلك؟ 
لماذا اهتممنا بصنع لوحة Canvas ؟ أحد الأسباب الرئيسية هو
 أننا نريد أن يكون لدينا خيار القدرة على تعديل النص والعدادات والصور
 باستخدام برنامج نصي. في الواقع ، دعنا نجرب ذلك!
امسح حقل النص من كائن اللعبة النصية ، بحيث لا يقول أي شيء.

UI Elements in unity game engine





قم بإنشاء برنامج نصي جديد يسمى ScoreBehavior وافتحه.


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class ScoreBehaviour : MonoBehaviour
{
    private Text thisText;
    private int score;
    
    void Start()
    {
        thisText = GetComponent<Text>();
        
        // set score value to be zero
        score = 0;
    }
    
    void Update() 
    {
        // When P is hit
        if(Input.GetKeyDown(KeyCode.P))
        {
            // add 500 points to score
            score += 500;
        }
        // update text of Text element
        thisText.text = "Score is " + score;
    }

}


ملاحظة:
 السطر رقم 4 هو سطر كود مهم للغاية هنا. 
سيعطيك IDE خطأ مرجع مفقود إذا نسيت تضمين أي مورد / فئة / حزمة تستخدمها في
 التعليمات البرمجية الخاصة بك ، باستخدام using التوجيه.
إذن ماذا نفعل هنا أيضًا؟ بادئ ذي بدء ، نقوم بتهيئة Text متغير فئة بالاسم thisText.
 في نص الدرجة متاح فقط إذا قمت بإضافة using UnityEngine.UI في الجزء العلوي،
 حيث أن هذه الطبقة هي جزء من UnityEngine.UI الحزمة.




في ()Start الوظيفة ، سترى عبارات يمكن التعرف عليها ،
 لا شيء خارج عن المألوف. تقوم العبارة الأولى بتعيين thisText المتغير 
إلى مكون النص المرتبط بالكائن gameObject ، بينما يقوم الآخر بتعيين الحرف score إلى 0 مبدئيًا.
في ()Update الطريقة ، نحدد عنصر تحكم الإدخال لإضافة 500 نقاط
 إلى النتيجة في كل مرة نضغط فيها على P المفتاح.
الآن ، Text يمتلك الفصل text خاصية ، يتم تخزينها كسلسلة ، 
وهذه القيمة هي ما سيظهره هذا المثال بالفعل في اللعبة. 
في الواقع ، أنت تقوم بتعيين Text.text الخاصية إلى قيمة في كل مرة
 تكتب شيئًا ما في حقل النص في طريقة العرض المراقب . 
ما نقوم به هو تحديث القيمة النصية thisText لكائننا في كل إطار.
احفظ هذا النص ، وارجع إلى Unity. يبدو أن التسمية قد اختفت ، ولكن عند تشغيل اللعبة.
اضغط P عدة مرات ، وسترى تحديث النتيجة!

تحديث عنصر واجهة المستخدم النصية من البرامج النصية الأخرى

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

ما هي الكلمة الأساسية الثابتة لـ ؟
static تجعل الكلمة الأساسية طريقة أو متغيرًا يحافظ على حالة حتى النهاية.
 يمكن استدعاؤها في الفئات الأخرى باستخدام اسم الفئة الذي static يتم فيه تعريف الطريقة.
أيضًا ، static يمكن استخدام المتغيرات فقط داخل static الطريقة.




هذا مفهوم عالمي بشكل عام وهو صحيح في حالة لغات البرمجة Java و #C  وغيرها.

طبقتنا ScoreBehaviour سيبدو:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class ScoreBehaviour : MonoBehaviour
{
    private Text thisText;
    private static int score;
    
    void Start()
    {
        thisText = GetComponent<Text>();
        
        // set score value to be zero
        score = 0;
    }
    
    void Update() 
    {
        // update text of Text element
        thisText.text = "Score is " + score;
    }
    
    // adding a new method to our class
    public static void AddScore()
    {
        // add 500 points to score
        score += 500;
    }

}


إذا كنت تتذكر ، في المقال التعليمي حيث التقطنا تصادم كرة نارية مع الهدف ،
 قمنا بتعريف فئة TargetBehaviour تم OnCollisionEnter2D تحديد طريقة لها. 




دعنا نحدث هذه الطريقة لتحديث النتيجة كلما اصطدمت الرصاصة بالهدف.


public class TargetBehaviour : MonoBehaviour
{
    
    void onCollisionEnter2D(Collision2D col) 
    {
        // When target is hit
        if(col.gameObject.tag == "Bullet")
        {
            Debug.Log("Target was Hit!");
            
            // calling AddScore method
            ScoreBehaviour.AddScore();
            
            Destroy(col.gameObject);
            Destroy(gameObject);
        }
    }

}


سيغير هذا الرمز الآن النتيجة في 500 كل مرة تصل فيها إلى الهدف. 
أنشئ بضع نسخ مكررة من كائن gameObject المستهدف وجربها.

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

جدول المحتويات