التنظيف
جزء من قسم أساسيات البرمجة النصية في Unity في رحلة Unity على Coddy. الدرس 78 من 85.
إن إزالة العناصر من قائمة أثناء مرور foreach عليها تؤدي إلى إيقاف البرنامج النصي مع InvalidOperationException. استخدم حلقة for بالعكس بدلًا من ذلك: إزالة العنصر i لا تحرّك إلا العناصر التي تليه، وقد مرّت عليها الحلقة بالفعل.
for (int i = coins.Count - 1; i >= 0; i--)
{
if (coins[i].transform.position.y > 20f)
{
Destroy(coins[i]);
coins.RemoveAt(i);
}
}التحدي
متوسطأزل الكتل التي تسقط أسفل الأرضية.
- استبدل
foreachبـfor (int i = blocks.Count - 1; i >= 0; i--)، مع تحريكblocks[i]إلى الأسفل كما في السابق. - بعد التحريك، عندما يكون
blocks[i].transform.position.y < -1f، استدعِDestroy(blocks[i]);ثمblocks.RemoveAt(i);.
اضغط على «العب»: لن يحتوي التسلسل الهرمي أبدًا على أكثر من بضع كتل. ثم اضغط على «تحقق».
جرّب بنفسك
using System.Collections.Generic;
using UnityEngine;
public class Runner : MonoBehaviour
{
[SerializeField] private float speed = 6f;
[SerializeField] private float laneEdge = 4f;
[SerializeField] private GameObject blockPrefab;
[SerializeField] private float spawnEvery = 1f;
[SerializeField] private float fallSpeed = 5f;
private List<GameObject> blocks = new List<GameObject>();
private float timer;
void Update()
{
Vector3 p = transform.position;
p.x += Input.GetAxisRaw("Horizontal") * speed * Time.deltaTime;
p.x = Mathf.Clamp(p.x, -laneEdge, laneEdge);
transform.position = p;
timer += Time.deltaTime;
if (timer >= spawnEvery)
{
timer -= spawnEvery;
Vector3 spot = new Vector3(Random.Range(-laneEdge, laneEdge), 10f, 0f);
blocks.Add(Instantiate(blockPrefab, spot, Quaternion.identity));
}
foreach (GameObject block in blocks)
{
block.transform.position += Vector3.down * fallSpeed * Time.deltaTime;
}
}
}
جميع دروس أساسيات البرمجة النصية في Unity
1أساسيات C# في Unity
مرحبًا يا Unityالمتغيراتالأعداد العشرية تحتاج إلى fالنص في وحدة التحكممتغيرات تتذكرإذا وإلامقارنة الأعدادمراجعة: جامع العملات7الحلقات والدوال
التكرار باستخدام forحلقات داخل حلقاتكتابة دالةدوال تُعيد إجابةالمصفوفاتمراجعة: السُّلّم5المتجهات
جمع المتجهاتالاتجاهاتالفضاء المحلي والعالميالسرعة القُطريةالمسافة بين الأشياءVector3 بنية Structمراجعة: قيادة الطائرة المسيّرة8كائنات اللعبة والمكوّنات
المراجع في Inspectorالحصول على مكوّنالمكوّنات المفقودةإضافة مكوّنRequireComponentالإظهار والإخفاءمراجعة: مفتاح الإضاءة6التحويلات والتسلسل الهرمي
الآباء والأبناءارفع العلمالتحجيمانظر إلى الأشياءتحرّك نحو نقطةمراجعة: القمر في مدارهتدرّب بنفسك: Playground لـ Unity