جمع العملات المعدنية ثنائية الأبعاد في Unity
أصبح التقاط العملات وجمعها عنصرًا أساسيًا في الألعاب ثنائية الأبعاد، خاصة في 2D Platformers.
لالتقاط عملة معدنية في Unity، سنحتاج إلى إنشاء برنامج نصي سيتم إرفاقه بكائن coin وسيتم تدميره بمجرد اتصال اللاعب به، تحديث قيمة العداد.
سأستخدم 2D Character Controller، ولكن يمكنك تخطي هذا الجزء إذا كان لديك بالفعل وحدة تحكم ثنائية الأبعاد.
خطوات
لإنشاء عملة ثنائية الأبعاد يمكن التقاطها وجمعها، اتبع الخطوات التالية:
- قم بإنشاء GameObject جديد (GameObject -> إنشاء فارغ) وقم بتسميته "Coin"
- قم بإرفاق مكون SpriteRenderer بالكائن "Coin"
- قم بتعيين كائن العملة الخاص بك إلى SpriteRenderer (يمكنك استخدام الصورة أدناه، وتأكد من ضبط نوع المادة في إعدادات الاستيراد على 'Sprite (2D and UI)')
- قم بقياس كائن العملة حتى الحجم المطلوب
- قم بتغيير موضع محور العملة 'Z' بحيث يتطابق مع موضع اللاعب
- قم بإرفاق مكون BoxCollider2D بالكائن "Coin"
- قم بإنشاء سكريبت جديد، وسمه "SC_2DCoin"، وأزل كل شيء منه ثم الصق الكود أدناه بداخله:
SC_2DCoin.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SC_2DCoin : MonoBehaviour
{
//Keep track of total picked coins (Since the value is static, it can be accessed at "SC_2DCoin.totalCoins" from any script)
public static int totalCoins = 0;
void Awake()
{
//Make Collider2D as trigger
GetComponent<Collider2D>().isTrigger = true;
}
void OnTriggerEnter2D(Collider2D c2d)
{
//Destroy the coin if Object tagged Player comes in contact with it
if (c2d.CompareTag("Player"))
{
//Add coin to counter
totalCoins++;
//Test: Print total number of coins
Debug.Log("You currently have " + SC_2DCoin.totalCoins + " Coins.");
//Destroy coin
Destroy(gameObject);
}
}
}
- قم بإرفاق البرنامج النصي SC_2DCoin بالكائن "Coin"
- حدد كائن المشغل الخاص بك وتأكد من تعيين علامته على "Player" (هذا ضروري لتتمكن من التقاط العملة المعدنية)
العملة جاهزة الآن، يمكنك حفظها في Prefab وتكرارها حول المستوى.
لإنشاء عداد للعملات المعدنية، اتبع الخطوات التالية:
- أنشئ صورة جديدة لواجهة المستخدم من خلال النقر بزر الماوس الأيمن على عرض التسلسل الهرمي -> واجهة المستخدم -> الصورة وتسميتها "CoinIcon"
- قم بتعيين كائن العملة لمكون الصورة
- قم بتغيير محاذاة RectTransform إلى 'top left'، والمحور إلى (0، 1)، والنشر X إلى '5'، وPos Y إلى '-5'، والعرض والارتفاع إلى '25'
- أنشئ نصًا جديدًا بالنقر بزر الماوس الأيمن على عرض التسلسل الهرمي -> واجهة المستخدم -> النص وتسميته "CoinCounter"
- قم بتعيين "CoinCounter" RectTransform مثل "CoinIcon"، باستثناء تعيين Pos X على '35' والعرض إلى '160'
- اضبط نمط خط النص على 'Bold' وحجم الخط على 22 والمحاذاة على 'left center' واللون على 'white'
- أنشئ سكريبت جديد وسميه "SC_CoinCounter" وأزل كل شيء منه ثم الصق الكود أدناه بداخله:
سيقوم البرنامج النصي لعداد العملة بتطبيق عدد العملات المعدنية على عنصر النص.
SC_CoinCounter.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class SC_CoinCounter : MonoBehaviour
{
Text counterText;
// Start is called before the first frame update
void Start()
{
counterText = GetComponent<Text>();
}
// Update is called once per frame
void Update()
{
//Set the current number of coins to display
if(counterText.text != SC_2DCoin.totalCoins.ToString())
{
counterText.text = SC_2DCoin.totalCoins.ToString();
}
}
}
- قم بإرفاق البرنامج النصي SC_CoinCounter بكائن النص "CoinCounter"
اضغط على "تشغيل" ولاحظ أن العملات المعدنية تختفي عند اتصال اللاعب ويتم إضافتها إلى العداد.