اصطدام!
جزء من قسم أساسيات البرمجة النصية في Unity في رحلة Unity على Coddy. الدرس 63 من 67.
التحدي
متوسطحان وقت الخطر. احتفظ بكل شيء من الخطوات السابقة، وأنهِ اللعبة عندما يلامس أحد المكعبات اللاعب:
- كلاهما مكعبان بعرض وحدة واحدة، لذا يلامس المكعب اللاعب عندما يكون الفرق بين موضعيهما على محور x أقل من 1، والفرق بين موضعيهما على محور y أقل من 1.
- تحقّق من كل مكعب بعد تحريكه، في كل إطار. عند حدوث تلامس، سجّل
Game overوأوقف البرنامج النصي باستخدامenabled = false، لكي يتوقف اللاعب والمكعبات وإنشاء المكعبات.
اضغط على Play وشاهد كم ستصمد، ثم اضغط على Check.
جرّب بنفسك
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 = 0f;
Vector3 spot = new Vector3(Random.Range(-laneEdge, laneEdge), 10f, 0f);
blocks.Add(Instantiate(blockPrefab, spot, Quaternion.identity));
}
for (int i = blocks.Count - 1; i >= 0; i--)
{
blocks[i].transform.position += Vector3.down * fallSpeed * Time.deltaTime;
if (blocks[i].transform.position.y < -1f)
{
Destroy(blocks[i]);
blocks.RemoveAt(i);
}
}
}
}
جميع دروس أساسيات البرمجة النصية في Unity
1أول سكربت لك
مرحبًا يا Unityضع المكعبتحرّك في كل إطاراستدر كل ثانيةوجّه باستخدام المفاتيحمراجعة: قُد المكعب5التحويلات والتسلسل الهرمي
الآباء والأبناءالتحجيمالنظر إلى الأشياءالتحرك نحو نقطةمراجعة: القمر الدائر