Menu
CoddyTech

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

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

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

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

challenge icon

التحدي

متوسط

اجعل الأسهم تغيّر الرياح في كل قارب من خلال مشاركة أصل واحد.

  1. في Sailboat، استبدل windStrength بـ public WindSettings wind; واجعل القارب يبحر بسرعة wind.strength.
  2. في WindVane، استبدل strength بـ public WindSettings wind;.
  3. اجعل الأسهم تغيّر wind.strength (من 0 إلى 5)، واجعل النص يعرض قيمته، مثل Wind: 3.

اضغط على «العب» ثم اضغط على السهم للأعلى: ستزداد سرعة القوارب الثلاثة. ثم اضغط على «تحقق».

جرّب بنفسك

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;
    }
}

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

تدرّب بنفسك: Playground لـ Unity