Menu
CoddyTech
flag Ar iconالعربيةdown icon

الإعدادات المشتركة

جزء من قسم هندسة الألعاب في Unity في رحلة Unity على Coddy. الدرس 21 من 50.

يغيّر إعداد الصعوبة جميع الأعداء دفعة واحدة، لذا يناسبه أصل واحد تشير إليه جميعها. يقرأ كل عدو سرعة الأصل في كل إطار، ويكتب زر 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()، تقرأ عملية Update التالية لكل عدو القيمة 4، بما في ذلك الأعداء الذين يُنشؤون لاحقًا من قالب يحتوي حقله على الأصل. ينجح ذلك لأن كل عدو يقرأ difficulty.enemySpeed عند تحركه. أما العدو الذي نسخها إلى حقل خاص به في Start، فيستمر في التحرك بسرعة 2.

يعتمد مكان استقرار أي تغيير يُجرى أثناء اللعبة على مكان تشغيل اللعبة. يحمّل الإصدار المبني أصوله كما كانت عند بنائه في كل مرة يبدأ فيها، لذا يزول اختيار اللاعب لمستوى Hard في اللعبة التالية: للاحتفاظ بالاختيار، احفظه باستخدام PlayerPrefs واكتبه مجددًا في الأصل عند بدء اللعبة. في Editor، يكون الأصل الموجود في مشروعك هو ما تغيّره اللعبة، ويظل التغيير بعد الضغط على Stop، بخلاف كائنات المشهد التي تعود إلى قيمها في Inspector. يبدأ التشغيل التالي على مستوى Hard، ويحتفظ الأصل بالقيمة 4 إلى أن تعيدها.

challenge icon

التحدي

متوسط

تعبر ثلاثة قوارب شراعية الخليج، تدفعها الرياح، ويزيد سهما الأعلى والأسفل قوة الرياح ويخفضانها بين 0 و5. لكن لكل قارب حقل windStrength خاص به، ولا يغيّر WindVane إلا strength الخاص به، لذا لا تغيّر الأسهم شيئًا على الماء. استخدموا أصلًا واحدًا بدلًا من ذلك. الملف WindSettings.cs جاهز، وأصل Breeze في المشروع (قوته 2) موجود في حقل wind لكل قارب ولـ WindVane.

  • Sailboat: استبدل windStrength بحقل عام wind من النوع WindSettings، واجعل القارب يبحر وفق wind.strength.
  • WindVane: استبدل strength بحقل عام wind، واجعل الأسهم تغيّر wind.strength لكي تشعر كل القوارب بتأثيرها. يعرض النص ذلك، مثل Wind: 3.
  • يحمّل الإصدار أصل Breeze من جديد في كل مرة يبدأ فيها، ما سيؤدي إلى فقدان رياح اللاعب. احفظ wind.strength باستخدام مفتاح PlayerPrefs Wind في كل مرة تتغير فيها، وفي Start أعد القيمة المحفوظة إلى الأصل. يحتفظ اللاعب الجديد بالقيمة 2 الموجودة في الأصل.

اضغط تشغيل، وغيّر الرياح، ثم اضغط إيقاف وتشغيل مرة أخرى، ثم اضغط تحقّق.

جرّب بنفسك

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;
    }
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس هندسة الألعاب في Unity