منضدة التصنيع
جزء من قسم هندسة الألعاب في Unity في رحلة Unity على Coddy. الدرس 49 من 50.
في لعبة بقاء، تحوّل طاولة التصنيع ما تجمعه إلى أشياء يمكنك استخدامها. يجمع زران الخشب والحجر، وتحولها ثلاث وصفات إلى أشياء أخرى: قطعتان من الخشب تصنعان لوحًا، ولوح وحجرتان يصنعان فأسًا، وأربعة ألواح تصنع طوفًا. لا يمكن الضغط على زر الوصفة إلا عندما تحتوي الحقيبة على كل ما تتطلبه الوصفة، ويستهلك التصنيع هذه الأشياء. تُملأ بيانات الوصفات على الطاولة في Inspector، لذا لا تتطلب الوصفة الجديدة أي شيفرة جديدة. تعلن الحقيبة عن كل تغيير لكل من يستمع، وتُحفظ بصيغة JSON في كل مرة تتغير فيها، لذا لن تفقد شيئًا عند إنهاء اللعبة.
اكتب نصين برمجيين: Inventory، على Backpack، وCraftingBench، على Bench.
التحدي
صعبInventory:
- صنف
[System.Serializable]باسمItemStackيحتوي علىpublic string itemوpublic int count، وصنف[System.Serializable]باسمInventoryDataيحتوي علىpublic List<ItemStack> stacks. يحتفظ المخزون بكائن واحد منInventoryData. - الحدث
public event Action Changed، ويُطلق بعد كل تغيير. public int Count(string item): عدد العناصر التي يحتوي عليها من هذا النوع، أو 0 إذا لم يكن لديه أي منها.- تضيف
public void Add(string item, int amount)إلى رزمة العنصر، أو تضيف رزمة جديدة في نهاية القائمة. وتأخذpublic void Remove(string item, int amount)من الرزمة، وتُزال الرزمة من القائمة عندما يصل عددها إلى 0. - تعرض
public string Describe()الرزم بالترتيب، مثلWood 3, Plank 1، أو تُعيدempty. - يُحفَظ كل تغيير فورًا في
inventory.jsonضمنApplication.persistentDataPath، بصيغةJsonUtility.ToJsonلكائنInventoryData. وتحمّلAwakeهذا الملف إذا كان موجودًا.
CraftingBench، الذي يزوّده Inspector بـ inventory وrecipes وrecipeButtons (زر واحد لكل وصفة، وبالترتيب نفسه)، وwoodButton وstoneButton وinventoryText:
- صنف
[System.Serializable]باسمIngredientيحتوي علىpublic string itemوpublic int amount، وصنف[System.Serializable]باسمRecipeيحتوي علىpublic string resultوpublic List<Ingredient> needs. وتكونrecipesفي طاولة التصنيع عبارة عنList<Recipe>، تُملأ في المشهد. - تضيف أزرار الجمع وحدة واحدة من
Woodأو وحدة واحدة منStone. ويستدعي كل زر وصفةpublic void Craft(int index)مع فهرس وصفته. - لا تفعل
Craftشيئًا عندما لا يحتوي المخزون على أي من متطلبات الوصفة. وإلا، فإنها تزيل كل مكوّن، وتضيف وحدة واحدة من الناتج، وتسجّل ذلك، مثلCrafted Axe. - في البداية وكلما تغيّر المخزون، يكون كل زر وصفة قابلًا للنقر فقط عندما يمكن تصنيع وصفته، ويعرض
inventoryTextالوصف بعد كلمة Inventory، مثلInventory: Wood 3, Plank 1أوInventory: empty.
اضغط Play، واجمع الموارد واصنع طوفًا، ثم اضغط Stop وPlay مرة أخرى، ثم اضغط Check.
جرّب بنفسك
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using TMPro;
public class CraftingBench : MonoBehaviour
{
[SerializeField] private Inventory inventory;
[SerializeField] private Button[] recipeButtons;
[SerializeField] private Button woodButton;
[SerializeField] private Button stoneButton;
[SerializeField] private TMP_Text inventoryText;
}
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس هندسة الألعاب في Unity
1المكوّنات لا التسلسلات الهرمية
مكوّنات صغيرةسكربت أساسي للعدومكوّنات مجرّدةتعمل المكوّنات معًامراجعة: برج دفاعي معياري4البيانات المتسلسلة
الأصناف القابلة للتسلسلالقوائم في Inspectorالتعدادات في Inspectorمراجعة: جدول الغنائم10مشروع: الناجي في الساحة
البطلأنواع الأعداء